ロボット研究開発、ソフトウェア開発、コンテンツ制作配信

【Python講座】Pythonで作るパズルゲーム#5_タイトルやゲームオーバー等を追加して完成させよう

こんにちは、koheiです。
Pythonでパズルゲームを作ろうの最終回です。

動画解説もあります。記事と合わせてどうぞ!

スポンサーリンク

今回のゴール

ゲームのタイトルやゲームオーバーなどを追加してゲームとして完成させたいと思います。
練習用素材は以下からダウンロードできます。

状態を追加しゲームの処理を分ける

前回まで、3つ以上揃っただんごを消す処理まで作りました。
これからゲームとして完成させるには、タイトル画面、だんごの落下、だんごが揃ったかの判定、だんご消す、ゲームオーバー処理など
様々な処理を作っていく必要があります。そこで、ゲームの進行状態を表す変数(state)を追加します。

このゲーム状態(state)の値によって、ゲーム処理を分けていきます。

state=0 タイトル画面処理を作る

まずは、stateが0 タイトル画面処理を作っていきます。
メイン処理内でゲーム状態を表す変数stateを宣言しましょう。

続いて、タイトル画像とクリックスタート用の画像をロードしましょう。

メイン処理のwhile文内で、状態を判定する処理を追加していきましょう。

if文でstateが0の場合の処理を追加しています。(上記19行目〜25行目)
タイトル描画等が終わったら、ゲーム進行状態(state)を1にして次の状態へ移行します。

state=1 ゲーム開始入力まち

今回のゲームは、タイトル画面からマウスをクリックしたらゲームスタートするようにします。
なので、左クリック状態がTrueの時、変数の初期化、最上位にだんごをランダムに配置し、次の状態へ移行します。

以下が最上位にだんごをランダムに配置する処理です。

state=2 だんご落下処理

状態state=2はだんご落下処理です。前回作成しただんご落下処理を少し改造して、だんごの落下処理がすべて終わったかどうかを判定するようにします。

関数内に入った時に、変数flgをFalseで初期化しておきます。だんごの落下処理が実行された時、flgをTrueに設定します。
何も落下がなければ、flgはFalseのままリターンされます。すなわち落下処理がすべて終わったら戻り値はFalseで返ります。

続いて、メイン処理内にstate=2の処理を以下のように実装します。

だんご落下処理(drop_dango)に戻り値を追加したので、Falseの場合は次の状態だんご判定処理へ移行します。

state=3 だんご判定

次にメイン処理内にstate=3(だんご判定)の処理を以下のように実装します。

46行目のだんごが揃ったか判定する処理(check_dango())は、前回作成した関数のままです。3つ揃っていたら、串のデータに変換しています。
あとは、次の状態state=4(だんご消去処理(スコア計算))に移行します。

state=4 だんご消去処理(スコア計算)

メイン処理に実装する前にまず、マスの最上位にだんごが達しているかを調べる関数を作っておきます。これはゲームオーバー判定に使います。

以下の様に実装しましょう。

続いて、メイン処理内にstate=4の処理を以下のように実装しましょう。

前回作成しただんごを消す処理(delete_dango())を使います。またスコア計算処理も前回同様です。
56行目のif文でスコアが0より大きい時、すなわちだんごが消された場合は、state=2(だんご落下処理)へ移行します。
スコアが0の時、すなわちだんごが消されていない場合は、ゲームオーバー判定します。59行目でだんごが最上位になかったら、マス上にクリックした時に配置する次のだんごを変数に設定します。(※next_dangoは、メイン関数のはじめとstate=1の処理内で初期化処理を入れています)
その後、state=5(だんご配置待ち処理)へ移行します。
だんごが最上位にある場合は、state=6(ゲームオーバー処理)へ移行します。timer変数は、次のゲームオーバー処理で使う変数です。

state=5 だんご配置待ち

続いて、マス上にだんごを配置する処理です。こちらは前回作成した処理を基本そのまま使います。
以下の様に実装しましょう。

マウスが盤上内にあるかどうかは、前回同様の処理です。(68行目〜73行目)
マウスが盤上内にあり、クリックされた場合、最上位にだんごをランダムに配置(set_dango())し、クリックしたマス上に次のだんご(next_dango)を設定します。そして、state=2(だんご落下処理)へ移行します。

state=6 ゲームオーバー処理など

続いて、state=6 ゲームオーバー処理を実装しましょう。

まずは、ゲームオーバー用の画像をロードします。

続いてメイン処理内にstate=6(ゲームオーバー処理)を実装します。
以下のように実装しましょう。

ゲームオーバー処理では、timer変数を1ずつ加算していき、50になったら、state=0(初回画面)に移行します。
88行目からは、stateのif文の判定外の処理で、stateの値によらず共通で処理される処理です。
スコア表示、次のだんご表示を行っています。

ここまでで、一旦動きを見てみましょう。
タイトル画面からゲーム開始、ゲームオーバーなど一通りゲームとして動作すればOKです。

$python pygame_dango_game.py

BGM,効果音処理を入れる

最後にゲームのBGMと効果音処理を入れてみましょう。
ゲームのBGMは、dango_bgm.mp3、だんごが消えた時の効果音としてpi.mp3を使います。
pygameでサウンドを出力させるために、まずは、音楽ファイルをロードします。以下のように実装しましょう。

try-except処理は、プログラム実行中に例外エラーが発生した場合、eccept内に書いた処理が実行されます。

続いて、ゲームBGMの再生処理を記載します。

pygame.mixer.music.play(-1)でBGMを再生します。引数の-1は、ループ再生です。0が1回再生、その他回数を指定するとその回数分再生されます。

次に、だんごを消した時の効果音を再生させます。

メイン処理内のstate=4の処理内で、だんごが消された場合の処理に再生処理を入れます。
seという変数にロードした音声ファイルが設定されていますので、se.play()と記載します。
これで、だんごが消えた時に、効果音が鳴るはずです。

さて、ここまでできたら、再度プログラムを実行してみましょう。
BGMやだんごが消えた時の効果音が鳴ればOKです。
ついに、パズルゲームとして完成しました。お疲れさまでした!

最後に

全5回に渡って解説してきたPythonによるパズルゲーム、今回の解説で完成です。
少しでも参考にしていただけたら幸いです。

それでは!

スポンサーリンク

いいね!を押すと、
最新記事をお届けします。

Twitter で
関連記事(一部広告含む)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


ページトップボタン