見出し画像

Lesson15 ゲームをクリアしよう

前回敵キャラを攻撃する手段が手に入りましたね。

というわけで、全ての敵キャラを撃破しゲームをクリアしましょう。


クリア画面はすでに実装済み※ですのでそこにつなげていきましょう。
Lesson4 参照



stage1.py

#### ライブラリの読み込み ####

############################################################################################
#### メインプログラム ####
def main(hp,mp,idx):

    ## 省略 ##

    ########################################################################################
    #### ゲームループ ####
    while True:

        ## 省略 ##

        ## ゲームオーバー ##
        # 追加済み
                
        ## ステージクリア ##
        total_enemies = len(single_enemies.sprites()) + len(clone_enemies.sprites()) + len(white_enemies.sprites())
        if total_enemies == 0:
            pygame.display.update()
            pygame.time.delay(1500)
            idx = 2
            return hp, mp, idx

ステージのクリア条件をゲームループ内に書き込みました。

>python main.py

実行して、頑張って敵をすべて撃破してください★


実行結果1: 全部の敵を撃破すると…
実行結果2: 2秒後にクリア画面に移行します

いかがですか?クリアできましたか?

実はちょっとだけ難易度が高いんですよ。

というのも白い敵もUFOも画面の端に到達すると画面外に消えてしまって、撃破しにくくなるんですね。

次回はそこを修正していけたらと思います。


では少しだけ今回のコードを解説します。


stage1.py

        ## ステージクリア ##
        total_enemies = len(single_enemies.sprites()) + len(clone_enemies.sprites()) + len(white_enemies.sprites())
        # 残存エネミーをカウント
        if total_enemies == 0:          # エネミーが全滅したら
            pygame.display.update()     # 画面を更新
            pygame.time.delay(1500)     # 2秒待機
            idx = 2                     # ゲームクリアインデックス(ラストステージのみ追加)
            return hp, mp, idx          # ゲームループを抜ける

total_enemies の中にある値が入っています。

len(******)というのは、その中に何個のデータが入っているか?という命令です。

つまり
len(single_enemies.sprites()) と書くと、single_enemiesグループにいるスプライトの残機数を数えてくれるわけです。

len(single_enemies.sprites()) → UFO とボスキャラの残機数
len(clone_enemies.sprites()) → UFO のクローンの残機数
len(white_enemies.sprites()) → 白い敵の残機数
これらを合算して、total_enemies に値を入れます。


if total_enemies == 0:
ここで条件分岐をして残機数を確認し、もしエネミーが全滅したら
・画面更新
・2秒待機
・ゲームインデックスを2(クリア状態)に変更
・ゲームループを抜けて main.py のゲームループに戻る

という流れになっています。

これで全滅→クリアという流れがつくれました★


次回は、敵が画面外に出ていかないように修正していきます。

ゲーム難易度が下がるのでデバッグもしやすくなりそうですね。

※デバッグ:プログラムが間違ってないか確認する作業


解説付きコード

 stage.py  

#### ライブラリの読み込み ####

############################################################################################
#### メインプログラム ####
def main(hp,mp,idx):        # 追加済み

    ## 省略 ##

    ########################################################################################
    #### ゲームループ ####
    while True:        # 追加済み

        ## 省略 ##

        ## ゲームオーバー ##
        # 追加済み
                
        ## ステージクリア ##
        total_enemies = len(single_enemies.sprites()) + len(clone_enemies.sprites()) + len(white_enemies.sprites())
        # 残存エネミーをカウント
        if total_enemies == 0:          # エネミーが全滅したら
            pygame.display.update()     # 画面を更新
            pygame.time.delay(1500)     # 2秒待機
            idx = 2                     # ゲームクリアインデックス(ラストステージのみ追加)
            return hp, mp, idx          # ゲームループを抜ける


いいなと思ったら応援しよう!