我是一个新的编码和有困难,找出为什么我的游戏崩溃后,最后一个敌人被打死。我正在为学校的最后一个项目制作一个太空入侵者游戏。现在,我只是试着让最上面一排的敌人每隔一段时间射击一次,它奏效了,但是当最后一个敌人在最上面一排被杀的时候,我得到了一个错误代码。据我所知,这就像是程序试图删除一个不存在的敌人激光,然后我得到错误代码--->;列表.删除(x) :x不在列表中。请帮忙谢谢
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()
这就是问题所在:
在第一个敌人之后,你再次循环,但是激光已经被移除。您需要创建一个类并设置一个标志,将它们设置为活动/非活动,而不是删除它们,然后再删除它们。你知道吗
相关问题 更多 >
编程相关推荐