Menu
CoddyTech

パトロール船

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()を呼び出し、船を描画します。

この章では、同じプログラムをレッスンごとに発展させていきます。そのため、課題で指定された名前を使い続けてください。チェックでは、それらの名前を使ってゲームの各要素を見つけます。

challenge icon

チャレンジ

中級
  1. assets/images/ship.pngをship_imageに読み込みます。
  2. class Player(pygame.sprite.Sprite)を記述します。画像はship_image、Rectの下中央は(320, 470)とし、updateではLeftキーとRightキーで1フレームあたり6ピクセル移動させ、ウィンドウ内に収まるようにします。
  3. 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プレイグラウンド