【ITニュース解説】Building Chrome Dinosaur Game in Pygame (Part 5: Deadly Cactus)

2025年09月03日に「Dev.to」が公開したITニュース「Building Chrome Dinosaur Game in Pygame (Part 5: Deadly Cactus)」について初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

ITニュース概要

PygameでChromeの恐竜ゲームを作るチュートリアル記事。今回は、恐竜が避けるべき障害物となるサボテンを実装する。サボテンの高さはランダムで、複数同時に出現。地平線と一緒にスクロールする。サボテンが画面外に出ると新しいセットを生成する。イベント処理でサボテン生成を制御し、ゲームの難易度を上げる。

ITニュース解説

この記事は、PythonのPygameライブラリを使って、Chromeブラウザの恐竜ゲームを作るチュートリアルの第5部だ。ここでは、恐竜が避けなければならない障害物、つまりサボテンをゲームに追加する方法を解説する。

まず、サボテンの画像ファイルを読み込む必要がある。pygame.image.load()関数を使って、画像ファイルを読み込み、.convert_alpha()メソッドを使って、画像の透明度を保持したまま、ゲームに適した形式に変換する。

次に、サボテンの幅を定義する。ここでは、すべてのサボテンの幅を一定にするために、CACTUS_WIDTHという変数を定義している。

ゲーム画面にサボテンを表示するには、draw_window()関数内で、pygame.transform.scale()関数を使ってサボテンの画像を適切なサイズに拡大縮小し、WINDOW.blit()関数を使って、画面に描画する。サボテンの高さはそれぞれ異なるため、画像を読み込んだ時点で拡大縮小するのではなく、描画時に拡大縮小する必要がある。

ゲームでは、サボテンは1つから3つがまとまって出現する。そのため、サボテンのグループをリストとして表現する。ゲームを再開するたびに、サボテンの数をランダムに生成し、画面の右端に表示するようにする。サボテンの位置は、x座標とy座標で決定する。x座標は、画面の幅から一定の距離を引いた値に、サボテンの幅を足していくことで、サボテンが互いに重ならないように配置する。y座標は、地平線のy座標からサボテンの高さを引いた値に、サボテンの高さの4分の1を足すことで、サボテンが地面に接するように配置する。

次に、サボテンを画面上でスクロールさせる。地平線をスクロールさせたときと同様に、obstacle_offset_xという変数を使って、サボテンのx座標を少しずつ変化させることで、サボテンが左方向に移動しているように見せる。地平線とは異なり、obstacle_offset_xはリセットせずに、無限に増加させることで、サボテンが画面外に消えても、再び現れないようにする。

サボテンの生成ロジックをgenerate_cacti()という関数にまとめる。この関数は、サボテンの開始位置を引数として受け取る。

最後に、サボテンが画面外に消えたら、新しいサボテンを生成する。これを行うために、GENERATE_OBSTACLESというカスタムイベントを作成し、サボテンのリストの最後の要素が画面外に出たときに、このイベントをイベントキューに追加する。イベントキューに追加されたGENERATE_OBSTACLESイベントは、イベントループ内で処理され、古いサボテンをクリアし、新しいサボテンを生成する。新しいサボテンは、最後に画面外に出たサボテンの位置から始まるように生成する。

このチュートリアルでは、pygame.event.post()関数を使って、カスタムイベントをイベントキューに追加する方法を解説している。pygame.event.Event()オブジェクトでカスタムイベントをラップし、pygame.event.post()でイベントキューにポストする必要がある。

これで、サボテンがゲームに追加され、ゲームはより面白くなったはずだ。次のステップでは、衝突判定を実装し、恐竜がサボテンに衝突したときにゲームオーバーになるようにする予定だ。

【ITニュース解説】Building Chrome Dinosaur Game in Pygame (Part 5: Deadly Cactus) | いっしー@Webエンジニア