私はpygameで「スペースインベーダー」ゲームを作ろうとしています...私はすでにゲームの多くを実行していますが、自分で解決できない厄介な問題に遭遇しました(これは私が取った最初のプログラミングコースです)。問題のコードは次のとおりです。
for enemy in enemies:
if hero.sprite.rect.colliderect(enemy.sprite.rect) or enemy.posy>400:
hero.health-=1
initgame()
break
else:
enemy.moveBy(enemyPos, ENEMYVERT)
enemy.draw()
したがって、これが行うべきことは次のとおりです。
- 「敵」という名前のリスト内のすべてのアイテムを確認します(すべての敵インスタンスを追加しました)
- ヒーロースプライトと衝突した場合、または画面の下部に到達した場合
- 次に、プレイヤーからライフを1つ削除し、ゲームを初期化します(敵リストを作り直し、位置をリセットします)
- 「for」ループを壊します。
- それ以外の場合は、通常どおり敵を動かしてブリットします。
ただし、これが実際に行うことは、タッチしたプレイヤーからすべてのライフを削除することです。ブレークしたから計算やめた方がいいんじゃないの?敵のいずれかが 400px に達したかどうかを計算し続けているため、プレイヤーからライフを削除し続けていると思います。
これは私のinitgame関数です
def initgame():
enemies=[]
createEnemies("1.png", 50, 250)
createEnemies("2.png", 50, 190)
createEnemies("3.png", 50, 130)
createEnemies("4.png", 50, 70)
createEnemies("5.png", 50, 10)
enemyPos=0
enemyDir=-1
hero.score=0
restartFlag=False
for enemy in enemies:
enemy.draw()