mugaxのなんでも情報局

いろんな分野について発信していきます。

PygameZeroを攻略するキーワード

PygameZeroはPythonでゲームを作るためのライブラリである。PygameZeroを使えば、2Dゲームを簡単に作ることができる。

しかし、あくまでも教育用に開発されたものなので、細かい調整など、できないこともある。とはいえ、自分でシューティングゲームやアクションゲームなどを作ってみれば、かつて熱中したタイムパイロットスーパーマリオブラザーズドルアーガの塔などがどのような仕組みで動いていたのかがわかるし、Pythonの勉強にも効果的だ。

PygameZeroを攻略するキーワードは"60FPS"である。PygameZeroが用意したupdate関数は60FPSで自動実行される。つまり、update関数に書いたコードは1秒間に60回実行されるということだ。だから、たとえば処理を0.5秒ごとに1回だけ実行したいというときには、次のような工夫が必要になる。

import pgzrun

WIDTH = 600
HEIGHT = 480

loopcount = 0

player = Actor("bear", midleft=(0, 400))

def draw():
    screen.clear()
    player.draw()

def update():
    global loopcount

    # 30フレーム(つまり0.5秒)ごとに処理
    loopcount = (loopcount + 1) % 30
    if loopcount == 0:
        player.x += 10

pgzrun.go()

上記のコードでは、スプライトが0.5秒ごとに10ピクセル右に移動する。

少し解説をすると、"loopcount = (loopcount + 1) % 30"では、loopcountという変数に1フレームごとに0から29までの数値が入る。普通に1から30までカウントしてもいいのだが、そうすると30までカウントした後に1に戻す処理が必要になる。この処理が不要になる点で、除算の余りを使う手法は優れているのだ。

ちなみに、PygameZeroはPythonのバージョンが新しすぎるとうまくインストールできない場合がある。そういうときはMuエディタがお勧めだ。