
マイケル
餅おいしいな〜〜〜
カタカタカタカタ

エレキベア
やっぱり正月はお餅クマね

マイケル
いくらでも食べれるぜ
カタカタカタカタ

エレキベア
・・・何カタカタしてるクマ?

マイケル
これかい?
これはね・・・
これはね・・・

マイケル
Pythonで作ったあけおめパズル さ!!!

エレキベア
そうなのクマね

マイケル
・・・。

エレキベア
・・・。

エレキベア
お餅おいしいクマね

マイケル
どんなゲームか聞いてよ!!!
あけおめゲームの設計

マイケル
あけおめゲームは一言でいうなら
ぷよぷよ風の文字連結ゲームだ!
ぷよぷよ風の文字連結ゲームだ!

エレキベア
(勝手に解説が始まったクマ・・・)

マイケル
ルールはこんな感じ!

マイケル
落ちてくる「あけおめ」の文字を探してなぞって消すゲーム!
一つ揃えると最下段3段も消す仕様にしました!
一つ揃えると最下段3段も消す仕様にしました!

エレキベア
よく見るタイプの落ち物パズルクマね

マイケル
テトリスやぷよぷよ系のゲームだね。
参考書は前回と同じくこちらを使用しました!
参考書は前回と同じくこちらを使用しました!

マイケル
この本の落ち物パズルゲームをカスタマイズして今回の動きにしています!
実装方法についてもっと詳しく知りたい方はぜひ読んでみてね!
実装方法についてもっと詳しく知りたい方はぜひ読んでみてね!

エレキベア
これは良本クマ〜〜〜〜
あけおめゲームの開発

マイケル
それでは開発方法について説明します!

エレキベア
(聞いてないクマけどなぁ)
画像の作成

マイケル
まずは使用する画像素材を作成します!
・背景
・落ちてくるボールの画像
・揃った時に帰るボール
・カーソル
の画像を用意しましょう!
・背景
・落ちてくるボールの画像
・揃った時に帰るボール
・カーソル
の画像を用意しましょう!
↑ball_bg.png(背景)
↑ball_1.png 〜 ball_4.png(あけおめボール)
↑ball_gold_1.png 〜 ball_gold_5.png(謹賀新年ボール、祝ボール)
↑ball_cursor.png(カーソル)

マイケル
背景については、今回は枠の大きさを24px、
正方形一つあたりの大きさを72pxにしておきます!
また、正方形の数は横8列 * 縦10列で作成します!
正方形一つあたりの大きさを72pxにしておきます!
また、正方形の数は横8列 * 縦10列で作成します!
↑ステージの大きさ

エレキベア
素材準備完了クマ〜〜〜
処理の実装

マイケル
ソース全体は以下のようになります!

エレキベア
長くて分からないクマ

マイケル
細かくみていきます!
マウス操作の検知について

マイケル
マウスの操作については、下記のように
「<Motion>」「<ButtonPress>」をbind することによって検知しています。
検知後は各変数に値を設定します。
「<Motion>」「<ButtonPress>」をbind することによって検知しています。
検知後は各変数に値を設定します。
↑マウス操作の検知
ゲームメイン処理について

マイケル
ゲームのメイン処理についてはroot.after()メソッドに時間を設定することによってループ処理を行なっています。
下記の例では0.1秒毎にgame_main()メソッドを実行しています。
下記の例では0.1秒毎にgame_main()メソッドを実行しています。
↑ゲームのメイン処理

エレキベア
UnityでいうUpdateメソッドの代わりクマね
画面の状態切り替えについて

マイケル
画面の状態については、index変数に「タイトル画面」「ゲーム中」「ゲームオーバー」の状態を設定することで処理を分けています。

エレキベア
ループ処理の中で各処理を分岐しているクマね
ボールの描画と落下処理

マイケル
ここからゲームの処理内容に入っていきます。
ステージは 横8列 * 縦10列の配列 として定義し、
draw_ball()メソッド で描画しています。
ステージは 横8列 * 縦10列の配列 として定義し、
draw_ball()メソッド で描画しています。

マイケル
各ボールの画像は img_ball変数 に定義していて、
配列0番目はNone(何も表示しない)にしています。
配列0番目はNone(何も表示しない)にしています。
【img_ball配列の設定値】
1〜4:「あ」「け」「お」「め」のボール
5〜8:「謹」「賀」「新」「年」のボール
9: 「祝」のボール

エレキベア
ステージ配列内の数字を変えることで各ボールが表示されるクマね

マイケル
そういうことだね!
そして描画したボールは drop_ball()メソッド で徐々に落下するよう実装しています。
そして描画したボールは drop_ball()メソッド で徐々に落下するよう実装しています。
ボール生成処理

マイケル
ボールの生成処理は下記箇所で行なっています!
ループ時間とは別に generate_timer変数 を用意し、一定時間ごとにランダムで生成するよう実装しています。
ループ時間とは別に generate_timer変数 を用意し、一定時間ごとにランダムで生成するよう実装しています。
↑ボール生成処理

エレキベア
ここで「あ」「け」「お」「め」のボールを生成するクマね
ボールを繋げる処理

マイケル
そしてあけおめの文字を繋げる判定処理は下記部分です!
ボタンが押されている状態でカーソルが移動した場合に
あけおめの順番で繋いでいるかチェックし、
正しい場合はchain_list変数に格納しています!
ボタンが押されている状態でカーソルが移動した場合に
あけおめの順番で繋いでいるかチェックし、
正しい場合はchain_list変数に格納しています!
↑ボールを繋げる処理

エレキベア
ここの処理が肝クマね
「あけおめ」まで繋げ終わったら「謹賀新年」に変える処理 も行なっているクマね
「あけおめ」まで繋げ終わったら「謹賀新年」に変える処理 も行なっているクマね
ボール削除処理

マイケル
そして最後にボール削除処理!
ボールを繋げる処理部分で設定された delete_timer変数をカウントダウンし、
削除の5秒前になったら最下段3段全て「祝」ボールに変えています。
ボールを繋げる処理部分で設定された delete_timer変数をカウントダウンし、
削除の5秒前になったら最下段3段全て「祝」ボールに変えています。

マイケル
あとは削除時間0秒になった時点で「謹賀新年」「祝」のボールを全て削除するよう実装すれば完了です!

エレキベア
完成したクマ〜〜〜〜〜
おわりに

マイケル
駆け足でしたがざっと処理内容を解説しました!
どうだったかな??
どうだったかな??

エレキベア
簡単にそれらしいゲームができて楽しかったクマ〜〜

マイケル
Pythonは気軽に開発できるのがいいよね
今回作ったゲームは難易度が一定なので、
気が向いた方はぜひレベルデザインにも挑戦してみてね!
今回作ったゲームは難易度が一定なので、
気が向いた方はぜひレベルデザインにも挑戦してみてね!

エレキベア
作り込んでやるクマ〜〜〜〜

マイケル
それでは今日はこの辺で!
のんびりしたお正月をお過ごしくださいね!
のんびりしたお正月をお過ごしくださいね!

エレキベア
パズル作るクマ〜〜〜〜〜〜〜

マイケル
お餅食べよ〜〜〜〜
【Python】ぷよぷよ風の文字連結パズルゲームを作る【あけおめパズル】 〜完〜