パトロール船
CoddyのPygameジャーニー「スプライトと画像」セクションの一部。レッスン 29/36。
ゲーム全体を作る時間です。Star Patrolでは、敵の船の群れが画面上部から降りてきます。自機はウィンドウの下部を巡回し、左右に動いてレーザーを上に向けて発射します。すべての群れを倒せば勝利です。敵を3体通過させるか、敵に衝突するとゲームオーバーです。
ゲーム内のすべてのオブジェクトはスプライトになります。プレイヤー、自機のレーザー、敵、そして敵の爆発です。第4章と同様に、まずはプレイヤーから始めます。
class Player(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = ship_image
self.rect = self.image.get_rect(midbottom=(320, 470))ウィンドウを作成した後、ship_imageを一度だけ読み込みます。updateでは矢印キーに合わせてRectを動かし、ウィンドウの内側に収めます。メインループでplayer.update()を呼び出し、船を描画します。
この章では、同じプログラムをレッスンごとに発展させていきます。そのため、課題で指定された名前を使い続けてください。チェックでは、それらの名前を使ってゲームの各要素を見つけます。
チャレンジ
中級assets/images/ship.pngをship_imageに読み込みます。class Player(pygame.sprite.Sprite)を記述します。画像はship_image、Rectの下中央は(320, 470)とし、updateではLeftキーとRightキーで1フレームあたり6ピクセル移動させ、ウィンドウ内に収まるようにします。player = Player()を作成し、各フレームでplayer.update()を呼び出します。塗りつぶしの後、player.rectの位置にplayer.imageをblitします。
自分で試してみよう
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Star Patrol")
clock = pygame.time.Clock()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((12, 14, 30))
pygame.display.flip()
clock.tick(60)
pygame.quit()
スプライトと画像のすべてのレッスン
自分で練習してみよう: Pygameプレイグラウンド