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

【Python講座】Pythonで作るパズルゲーム#4_揃っただんごを消してみよう

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

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

スポンサーリンク

今回のゴール

今回は、3つ以上揃っただんごを消すという処理を作っていきます。
練習素材は以下からダウンロードできますので、ぜひダウンロードしてやってみてください。

だんごを消す処理のイメージ

だんごを消す処理のイメージです。以下の流れで制御していきます。

1.判定用リストを用意し、dangoリストを判定用リスト(checkリスト)にコピーする

2.判定用リスト(checkリスト)を使って、縦、横、斜めにだんごが3つ並んでいるかをチェックし、並んでいる場合は、dangoリストの値を串(値5)に変更する

それを全マスチェックしていく

3.dangoリストの値をチェックし、串(値5)だったら、空(値0)に変更する。

なぜ、判定用リスト(checkリスト)をわざわざ用意するかというと、そのままdangoリストをチェックして値を変更していくと、すでに3つ揃っている箇所は串の値5に変わっているので、4つ以上並んでいる場合の判定できなくなってしまうからです。

実装

それでは、先程のイメージに沿って、だんごが揃ったかどうかの判定処理を作っていきましょう。
pygame_dango_game.pyに以下を実装しましょう。(黄色い部分)

5-9行目は、dangoリストと判定用リスト(check)の初期化処理です。
前回まで暫定で設定していたdangoリストをオール0で初期化しています。appendは、リストの末尾に要素を追加するメソッドです。
29行目からのcheck_dango()処理では、だんごが縦、横、斜めに3つ並んでいるかをチェックする処理です。
34〜40行目が、縦に3つ並んでいるかをチェックする処理、
42〜48行目が、横に3つ並んでいるかをチェックする処理、
50〜61行目が、斜めに3つ並んでいるかチェックする処理となります。3つ揃っていたら、dangoリストの値を串(値:5)に変更しています。

次に、揃っただんごを消す処理を実装しましょう。
以下の関数を追加しましょう。

dangoリストの中身をチェックしていき、串の値:5の場合、空白:0に変更します。
また、空白に変更した数を戻り値で返します。
これは、後ほどスコア計算で使用するため、戻り値で消した数を返すようにしています。

さて、これらの関数をメインモジュールからコールするようにします。
以下を追加します。

さて、ここまでできたら、ファイルを保存して実行してみましょう。
3つ以上揃っただんごが消えていけば、OKです。

$python pygame_dango_game.py

スコア表示処理

続いて、だんごを消した数からスコアを計算し、表示させてみましょう。

まずは、スコア用の変数、文字表示用の色定義を用意します。
変数は、複数の関数で参照するため、グローバル変数で定義します。
※グローバス変数・・・関数の外部で宣言した変数。グローバル変数の値はプログラムが終了するまで値が保持される。
関数内でグローバル変数の値を変更するには、その変数をglobal宣言する必要がある。

以下を実装します。

初期化関連の処理内で、pygameのフォント指定処理を追加しておきます。

スコア表示用の関数、メインモジュール等に以下を実装します。

disp_score()は、スコア表示する関数です。
計算したスコアを文字列に変換し、render()命令で表示文字列を作ります。
blit()命令で画面に文字列を貼り付けます。座標は、スコア表示用の座標を指定しています。

メインモジュールでは、スコアを計算します。
delete_dango()で消しただんごの数をscへ設定し、10倍した値をscore変数に格納します。
33行目の判定は、ハイスコア(hisc)を超えたら、ハイスコアを更新する処理です。

ここまでできたら、ファイルを保存してpython実行してみましょう。
揃っただんごが消えて、スコアが加算されていけばOKです。

$python pygame_dango_game.py

最後に

今回は、揃っただんごを消して、スコアを計算する処理を作ってみました。
だんだんゲームらしくなってきました。
次は、ゲームのタイトル画面やゲームオーバー、効果音などを追加してゲームとして完成させたいと思います。
それでは!

スポンサーリンク

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

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

コメントを残す

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

CAPTCHA


ページトップボタン