PygameZeroのお勉強(4)

日経ソフトウェア2020年5月号付録を見ながらお勉強

「4日目」月着陸ゲーム

 まず「3日目」の画像加工プログラムが動かなかった件。
コマンドプロンプトより

> mygame03.py

で実行していたらエラーとなったが、

> python mygame03.py

とすれば期待通りに動作した。当方環境には、いくつかの pythonが入っているようで(Anacondaのものと
VSのものは認識している)、たぶん Anaconda とは別の
Pythonが起動されたものと思われるが、今は「動いた!おっけー!」で進めることにする。


・例によって、使用する画像の選定。今回も「この画像を使うと良いよ」と記事が教えてくれているので、ダウンロードして、↑で解決したサイズ変換プログラムを使って変換。この、サイズ決めにも経験が必要(たぶん画面全体のサイズとのバランスを考えて決めたと予想)だと思うので、実際に一人で作るときにはこの部分だけで平気で1時間とか使いそう。

・今回、一気にプログラムらしくなってきた。ゲーム中とそれ以外のステータス管理とかリアルタイムでキーボード入力を受け付けて動かすとか

・そういえば、ロケットの炎の描画は必ずロケット画像よりもZ-orderが下のように見えるけど、そんな指定は指定ない(駄洒落)な。

・このプログラム、draw()関数が呼ばれる度に全体を描画しているけど、全然速度や見え方(ちらつき)に問題がないなぁ。でも、もっと良い書き方がありそうな気がして、少し気持ち悪い。


そして今回、2日目の疑問が解消しました。関数内でグローバル変数の値を参照するときには、global
を使うのですか。2日目のプログラムを少しいじって、左右往復するようにしてみたもの。

import pgzrun

WIDTH=400
HEIGHT=200

p=1

alien = Actor('p3_walk01' , midleft=(0,60))

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

def update():
  global p
  alien.x += p
  if alien.midright[0]>WIDTH or alien.midleft[0]<0:
    p *= -1
    alien.y += 5

pgzrun.go()