【pygame】pythonでヒット&ブローゲーム作る #07 最終調整【簡単】
【pygame】pythonでヒット&ブローゲーム作る #07 最終調整【簡単】
前回までのまとめ
【簡単?】初心者がpython3とpygameでヒット&ブローゲーム作ってみる【習作?】 - 工学じじいの縁側日記
【簡単?】初心者がpython3とpygameでヒット&ブローゲーム作ってみる #02【習作?】 - 工学じじいの縁側日記
【簡単?】初心者がpython3とpygameでヒット&ブローゲーム作ってみる #03 画面作るよ【習作?】 - 工学じじいの縁側日記
【pygame】pythonでヒット&ブローゲーム作る #04 数字の入力【簡単】 - 工学じじいの縁側日記
【python】ヒット&ブローゲーム作る #05 正誤判定、ログの表示【プログラミング】 - 工学じじいの縁側日記
ko-gaku-jiji.hatenablog.jp
前回までで、タイトル画面、ゲーム画面の状態遷移、
問題の出題と、解答の入力とチェック
タブによる、解答ログのページ切り替え表示。
解答ログを15x4ページに表示する機能を実装しました。
実行結果:
最終調整
最後に、ほとんどそんなことはないと思いますが、ログの4ページ目、つまり15x4=60回解答をミスった時にゲームオーバーになる処理と、60回以内に回答を成功させると、「Congratulations」のメッセージと何手で解答できたかを表示します。
手数オーバーによるゲームオーバーの実装
ゲームオーバーのシーンに移動したときの処理を、2種類に分けます。
- ゲームオーバー
- 60手以内に解答成功
- 「〇手で解答しました」のメッセージを表示
- 60手を超えてしまった
- 「手数オーバー」のメッセージを表示
です。
具体的には、input_statusの状態を1つ増やして、それに合わせてメッセージgamemessageを追加します。
input_status = 0 # 1 入力エラー 2 重複エラー 3 正解 4 手数オーバー (省略) gamemessage = [] mes_font = pygame.font.SysFont("yumincho", 40) gamemessage.append(mes_font.render("エラー:数字が正しくない", True, (255, 0, 0))) gamemessage.append(mes_font.render("エラー:数字が重複", True, (255, 0, 0))) gamemessage.append(mes_font.render("CONGRATULATIONS", True, (255, 0, 0))) gamemessage.append(mes_font.render("残念!手数オーバーです", True, (255, 0, 0)))
これで、手数オーバーの表示は完成です。
実行例:
正解時の手数の表示
60回以内に正解できた時は、おめでとうメッセージと共に何手で正解したか表示します。
ゲームオーバー(正解時)の表示処理を以下のように変更します。
elif gamescene == 2: screen.blit(gamemessage[input_status - 1], (100, 100)) screen.blit(gamebutton[2], gamebuttonrect) if turn <= 60: turnmss = mes_font.render(str(turn)+"回で正解しました!", True, (255, 255, 255)) screen.blit(turnmss, (120, 350))
60手以内に正解出来たら、手数を表示そのままの処理ですね。
実行してみます。
初期化の見直し
最後の最後に、各種変数の初期化の処理を見直します。
タイトル画面 →(初期化)→ ゲーム画面 → ゲームオーバー → タイトル画面 →(初期化)→ ゲーム画面・・・
このように、ゲームが始まる前にゲームの状態を初期化します。
初期化しなければならないものとして、手数、ターン数、表示位置・・・など様々なものがあります。
タイトル画面で、スタートボタンを押したときに初期化します。
if gamebuttonrect.collidepoint(event.pos): if gamescene == 0: # タイトル画面でスタートボタンが押された question = make_question() # 問題を作成 # print(question) # デバッグ用に正解をコンソールに表示 players_input = [-1, -1, -1, -1] # プレイヤーの解答の初期値 gamescene = 1 # ゲームシーンをゲーム画面に遷移 input_status = 0 # 入力状態を初期化 turn = 0 # ターン数を0に初期化 input_pos = 0 # 入力位置(入力桁)の初期化 current_tab = 0 # 解答ログのページを初期値に anslog.clear() # 解答ログを初期化 elif gamescene == 1: if -1 in players_input: # ゲーム画面で「judgement」が押された (省略)
これで繰り返し何回でもゲームができます(笑)
今回のまとめ
最後に、ゲームとしてのまとめをやってみました。
これまで、pygameを使って、ヒットアンドブローゲームを作るというお題で7回にわたってやってきました。
なんとなく、ゲームっぽいものができたのではないかなと思います。
難しい処理は特に行っていないので、いろいろ改造してみたり楽しんでみてください。
(ただ、ちょっとenchant.jsとか、XNAとかいじってきた私にとっては、pygameは使いづらいなぁって思いました。)
今回のソースコード一式はgithubにもあります。
GitHub - gomta777/hitandblow: hit and blow game
のfinaleditionが今回のものです。
ということで、一応今回で完成ということにしたいと思います。
よかったら、ブログ村↓のクリックお願いします。