-1
私はコーディングが初めてで、最後の敵が殺された後にゲームがクラッシュする理由を理解するのに問題があります。私は学校のための私の最終的なプロジェクトのための宇宙侵略ゲームを作っています。今のところ、私は敵の一番上の列にそれほど頻繁に撃つように努力していましたが、一番上の行で最後の敵が殺されると、エラーコードが表示されます。私が理解するところでは、プログラムはそこにない敵のレーザーを取り除こうとしているのですが、エラーコード----> list.remove(x):xがリストにありません。再びなぜ最後の敵が殺された後にクラッシュするのですか?
for enemy in enemies:
for laser in lasers:
if laser.colliderect(enemy):
enemies.remove(enemy)
lasers.remove(laser)
最初の敵、あなたのループの後が、レーザーが削除されています。助けてくださいあなた
def level1():
# Images
bg = pygame.image.load('spacebackground.jpg')
bg = pygame.transform.scale(bg, (1024, 768))
ship1 = pygame.image.load('ship1.png')
ship1 = pygame.transform.scale(ship1, (50, 50))
life1 = pygame.image.load('ship1.png')
life1 = pygame.transform.scale(life1, (25, 25))
life2 = pygame.image.load('ship1.png')
life2 = pygame.transform.scale(life2, (25, 25))
enemy1 = pygame.image.load('enemy1.png')
enemy1 = pygame.transform.scale(enemy1, (50, 50))
enemy2 = pygame.image.load('enemy2.png')
enemy2 = pygame.transform.scale(enemy2, (50, 50))
points = 0
# Coordinates
enemy_x = 50
enemy_x2 = 50
enemy_x3 = 50
dx = 5
dx2 = 10
dx3 = 5
shipX = 462
shipY = 668
# Lists
enemies = []
enemies_2 = []
enemies_3 = []
enemyLaser1 = []
enemyLaser2 = []
enemyLaser3 = []
lasers = []
# Appending enemies
for i in range(10):
enemies.append(pygame.Rect(enemy_x, 100, 50, 50))
enemy_x += 65
for i in range(10):
enemies_2.append(pygame.Rect(enemy_x2, 150, 50, 50))
enemy_x2 += 65
for i in range(10):
enemies_3.append(pygame.Rect(enemy_x3, 225, 50, 50))
enemy_x3 += 65
# Game Loop
while True:
clock.tick(60)
# Laser Coordinates
laserX = shipX + 23
laserY = 658
# Event handling
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
# Creating lasers with space bar
if (pygame.key.get_pressed()[pygame.K_SPACE]) != 0 and len(lasers) < 3:
lasers.append(pygame.Rect(laserX, laserY, 5, 20))
# Ship Rect
shipRect = pygame.Rect(shipX, shipY, 50, 50)
# Ship Controls
if (pygame.key.get_pressed()[pygame.K_RIGHT]) != 0:
shipX += 20
if (pygame.key.get_pressed()[pygame.K_LEFT]) != 0:
shipX += -20
# Removing enemies and lasers when collision
for enemy in enemies:
for laser in lasers:
if laser.colliderect(enemy):
enemies.remove(enemy)
lasers.remove(laser)
points += 5
break
for enemy_2 in enemies_2:
for laser in lasers:
if laser.colliderect(enemy_2):
enemies_2.remove(enemy_2)
lasers.remove(laser)
points += 10
break
for enemy_3 in enemies_3:
for laser in lasers:
if laser.colliderect(enemy_3):
enemies_3.remove(enemy_3)
lasers.remove(laser)
points += 5
break
# Moving laser
for laser in lasers:
laser.move_ip(0, -10)
# Removing laser when off screen
for laser in lasers:
if laser.y <= -20:
lasers.remove(laser)
# Keeping ship on screen
if shipX <= 0:
shipX = 0
if shipX >= 974:
shipX = 974
# Reversing direction when enemies reach boundary
if len(enemies) >= 1:
if enemies[0].x < 50:
dx = -dx
if enemies[-1].x > 924:
dx = -dx
if len(enemies_2) >= 1:
if enemies_2[0].x < 50:
dx2 = -dx2
if enemies_2[-1].x > 924:
dx2 = -dx2
if len(enemies_3) >= 1:
if enemies_3[0].x < 50:
dx3 = -dx3
if enemies_3[-1].x > 924:
dx3 = -dx3
# Move each enemy
for enemy in enemies:
enemy.x += dx
for enemy_2 in enemies_2:
enemy_2.x += dx2
for enemy_3 in enemies_3:
enemy_3.x += dx3
# Enemy Shooting
if len(enemies) >= 1:
randEnemy1 = random.randrange(len(enemies))
if len(enemies_2) >= 1:
randEnemy2 = random.randrange(len(enemies_2))
if len(enemies_3) >= 1:
randEnemy3 = random.randrange(len(enemies_3))
if len(enemies) >= 0:
for enemy in enemies:
if enemy == enemies[randEnemy1] and len(enemyLaser1) < 3:
enemyLaser1.append(pygame.Rect(enemy.x + 22.5, 120, 5, 20))
for enemyLaser in enemyLaser1:
enemyLaser.move_ip(0, 10)
if enemyLaser.y >= 769:
enemyLaser1.remove(enemyLaser)
# Drawing
screen.blit(bg, (0,0))
for laser in lasers:
pygame.draw.rect(screen, red, laser)
for enemyLaser in enemyLaser1:
pygame.draw.rect(screen, red, enemyLaser)
screen.blit(ship1, shipRect)
for enemy in enemies:
screen.blit(enemy1, enemy)
for enemy_2 in enemies_2:
screen.blit(enemy2, enemy_2)
for enemy_3 in enemies_3:
screen.blit(enemy1, enemy_3)
font = pygame.font.SysFont("OCR A Extended", 30)
pointsFont = font.render("Points:"+ str(points), 1, red)
screen.blit(life1, (5,733))
screen.blit(life2, (33,733))
screen.blit(pointsFont, (5, 5))
# Update Display
pygame.display.update()
古いデバッグを行う必要があります。まず、ログファイルを開いてオブジェクトをリストに追加したり削除したりしてメッセージを記録し、論理エラーをキャッチできるかどうかを確認することができます。また、pdbを使う必要があるかもしれません。あるいは少し面白いpudbを試すこともできます。 – rrauenza