> ## Content Index
> Fetch the complete content index at: https://www.geekjp.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# 【pygame】pythonでヒット＆ブローゲーム作る　#07　最終調整【簡単】
- URL: https://www.geekjp.com/2019-11-25-011415/
- Published: 2019-11-24T16:14:15.000Z
- Updated: 2019-11-24T16:14:15.000Z
- Description: python プログラミング 入門シリーズです。 pythonとpygameを使ってとても簡単なゲームを作ってみます。 細かい訂正をして、今回で完成です！ 順を追って作っていくと誰でもできるので、作って遊んでみてください！
- Author: 工学じじい
- Tags: ゲームプログラミング, Pygame, Python, 技術, #Import 2026-07-19 20:21, #Import 2026-07-19 20:24

【pygame】pythonでヒット＆ブローゲーム作る #07 最終調整【簡単】

![f:id:gomta777:20191115111505p:plain](https://www.geekjp.com/content/images/import/hatena/2019/11/20191115111505-1.png "f:id:gomta777:20191115111505p:plain")

- [前回までのまとめ](#前回までのまとめ)
- [最終調整](#最終調整)
  - [手数オーバーによるゲームオーバーの実装](#手数オーバーによるゲームオーバーの実装)
  - [正解時の手数の表示](#正解時の手数の表示)
- [初期化の見直し](#初期化の見直し)
- [今回のまとめ](#今回のまとめ)

### 前回までのまとめ

[【簡単？】初心者がpython３とpygameでヒット＆ブローゲーム作ってみる【習作？】 - 工学じじいの縁側日記](https://www.geekjp.com/2019-11-16-184245/)  
[【簡単？】初心者がpython３とpygameでヒット＆ブローゲーム作ってみる #02【習作？】 - 工学じじいの縁側日記](https://www.geekjp.com/2019-11-17-133208/)  
[【簡単？】初心者がpython３とpygameでヒット＆ブローゲーム作ってみる #03 画面作るよ【習作？】 - 工学じじいの縁側日記](https://www.geekjp.com/2019-11-19-015433/)  
[【pygame】pythonでヒット＆ブローゲーム作る #04 数字の入力【簡単】 - 工学じじいの縁側日記](https://www.geekjp.com/2019-11-19-170123/)  
[【python】ヒット＆ブローゲーム作る #05 正誤判定、ログの表示【プログラミング】 - 工学じじいの縁側日記](https://www.geekjp.com/2019-11-22-052748/)  

[https://ko-gaku-jiji.hatenablog.jp/entry/2019/11/24/023919](https://www.geekjp.com/2019-11-24-023919/)

  
前回までで、タイトル画面、ゲーム画面の状態遷移、

![f:id:gomta777:20191119133131p:plain](https://www.geekjp.com/content/files/images/import/hatena/2019/11/20191119133131.png "f:id:gomta777:20191119133131p:plain")

図 状態遷移

問題の出題と、解答の入力とチェック

![f:id:gomta777:20191119163750p:plain](https://www.geekjp.com/content/files/images/import/hatena/2019/11/20191119163750.png "f:id:gomta777:20191119163750p:plain")

図 解答の入力とチェック

タブによる、解答ログのページ切り替え表示。  
解答ログを１５ｘ４ページに表示する機能を実装しました。

実行結果：

![f:id:gomta777:20191124022734p:plain](https://www.geekjp.com/content/files/images/import/hatena/2019/11/20191124022734.png "f:id:gomta777:20191124022734p:plain")

図 タブの切り替え

### 最終調整

最後に、ほとんどそんなことはないと思いますが、ログの４ページ目、つまり１５ｘ４＝６０回解答をミスった時にゲームオーバーになる処理と、６０回以内に回答を成功させると、「Congratulations」のメッセージと何手で解答できたかを表示します。

#### 手数オーバーによるゲームオーバーの実装

ゲームオーバーのシーンに移動したときの処理を、２種類に分けます。

- ゲームオーバー
1. ６０手以内に解答成功
  - 「〇手で解答しました」のメッセージを表示
2. ６０手を超えてしまった
  - 「手数オーバー」のメッセージを表示

です。  
具体的には、input\_statusの状態を１つ増やして、それに合わせてメッセージgamemessageを追加します。

```python
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)))

```

これで、手数オーバーの表示は完成です。  
実行例：

![f:id:gomta777:20191125004628p:plain](https://www.geekjp.com/content/files/images/import/hatena/2019/11/20191125004628.png "f:id:gomta777:20191125004628p:plain")

図 手数オーバー

#### 正解時の手数の表示

６０回以内に正解できた時は、おめでとうメッセージと共に何手で正解したか表示します。  
ゲームオーバー（正解時）の表示処理を以下のように変更します。

```python
        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手以内に正解出来たら、手数を表示そのままの処理ですね。

実行してみます。

![f:id:gomta777:20191125005145p:plain](https://www.geekjp.com/content/files/images/import/hatena/2019/11/20191125005145.png "f:id:gomta777:20191125005145p:plain")

図 手数の表示

### 初期化の見直し

最後の最後に、各種変数の初期化の処理を見直します。

タイトル画面 →（初期化）→ ゲーム画面 → ゲームオーバー → タイトル画面 →（初期化）→ ゲーム画面・・・

このように、ゲームが始まる前にゲームの状態を初期化します。  
初期化しなければならないものとして、手数、ターン数、表示位置・・・など様々なものがあります。  
タイトル画面で、スタートボタンを押したときに初期化します。

```python
   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  # ターン数を０に初期化
                        input_pos = 0  # 入力位置（入力桁）の初期化
                        current_tab = 0  # 解答ログのページを初期値に
                        anslog.clear()  # 解答ログを初期化
                    elif gamescene == 1:
                        if -1 in players_input:  # ゲーム画面で「judgement」が押された
（省略）

```

これで繰り返し何回でもゲームができます(笑)

### 今回のまとめ

最後に、ゲームとしてのまとめをやってみました。  
これまで、pygameを使って、ヒットアンドブローゲームを作るというお題で７回にわたってやってきました。  
なんとなく、ゲームっぽいものができたのではないかなと思います。  
難しい処理は特に行っていないので、いろいろ改造してみたり楽しんでみてください。  
（ただ、ちょっとenchant.jsとか、XNAとかいじってきた私にとっては、pygameは使いづらいなぁって思いました。）

今回のソースコード一式はgithubにもあります。  
[GitHub - gomta777/hitandblow: hit and blow game](https://github.com/gomta777/hitandblow/?ref=geekjp.com)

の[finaledition](https://github.com/gomta777/hitandblow/tree/master/finaledition?ref=geekjp.com)が今回のものです。

ということで、一応今回で完成ということにしたいと思います。

  
よかったら、ブログ村↓のクリックお願いします。