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エディタがお勧めだ。