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
実行して、頑張って敵をすべて撃破してください★
いかがですか?クリアできましたか?
実はちょっとだけ難易度が高いんですよ。
というのも白い敵も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 # ゲームループを抜ける