エイリアン襲来
を実装します。
エイリアンクラス
エイリアンも自機、ミサイルと同様にスプライトなので作り方はほとんど同じです。
class Alien(pygame.sprite.Sprite): """エイリアン""" speed = 2 # 移動速度 animcycle = 18 # アニメーション速度 frame = 0 move_width = 230 # 横方向の移動範囲 def __init__(self, pos): # imagesとcontainersはmain()でセット pygame.sprite.Sprite.__init__(self, self.containers) self.image = self.images[0] self.rect = self.image.get_rect() self.rect.center = pos self.left = pos[0] # 移動できる左端 self.right = self.left + self.move_width # 移動できる右端 def update(self): # 横方向への移動 self.rect.move_ip(self.speed, 0) if self.rect.center[0] < self.left or self.rect.center[0] > self.right: self.speed = -self.speed # キャラクターアニメーション self.frame += 1 self.image = self.images[self.frame/self.animcycle%2]
上の図のように個々のエイリアンの移動範囲はleftとrightで指定します。leftは移動範囲の左端、rightは移動範囲の右端です。コンストラクタで与えるposは左端の座標としてます。右端は左端の座標にmove_widthを足して求めています。エイリアンはleftからrightの範囲しか移動できません。そのため、update()で移動範囲を超えたときに速度を反転して逆方向に進むようにしています。移動方向の反転は画像の移動と跳ね返り処理(2008/5/9)を参考にしてください。キャラクターアニメーションの作り方は、キャラクターアニメーション(2008/5/18)を参照してください。
エイリアンの作成
エイリアンを作成するコードはmain()にあります。
# スプライトグループを作成して登録 all = pygame.sprite.RenderUpdates() Player.containers = all Shot.containers = all Alien.containers = all # エイリアンのデフォルトスプライトグループを指定 # スプライトの画像を登録 Player.image = load_image("player.png") Shot.image = load_image("shot.png") # エイリアンの画像を分割してロード Alien.images = split_image(load_image("alien.png"), 2) # 自機を作成 Player() # エイリアンを作成 for i in range(0, 50): x = 20 + (i % 10) * 40 y = 20 + (i / 10) * 40 Alien((x,y))
エイリアンは全部で50体作成してます。各エイリアンの座標 (x,y) を計算してAlienオブジェクトを作成します。Alienはデフォルトスプライトグループを指定しているのでオブジェクトを作るだけで自動的にallに追加され、描画、更新が始まります。ここら辺は自機やミサイルを作ったときと同じですね。実行するとわかりますが、エイリアンは無敵です。絶対に倒せません。ミサイルがあたったとき倒せるようにするにはミサイルとエイリアンの衝突検出を実装する必要がありますね。次回取り上げます。