Python ValueError:<__0x07BFE2F8处的主要敌人目标>;不在列表中

Python ValueError:<__0x07BFE2F8处的主要敌人目标>;不在列表中,python,pygame,Python,Pygame,我试图用pygame制作宇宙飞船游戏。只是简单的游戏什么军舰射击子弹和碰撞敌人。但当我玩我的游戏时,在6或7次碰撞后,我犯了这个错误。有人能帮我吗。非常感谢 import pygame import random import time WIDTH, HEIGHT = (750, 600) WIN = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("Space İnvader Game&quo

我试图用pygame制作宇宙飞船游戏。只是简单的游戏什么军舰射击子弹和碰撞敌人。但当我玩我的游戏时,在6或7次碰撞后,我犯了这个错误。有人能帮我吗。非常感谢

import pygame
import random
import time

WIDTH, HEIGHT = (750, 600)

WIN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Space İnvader Game")
BG_IMAGE = pygame.transform.scale(pygame.image.load("yeni_resim.jpg"), (WIDTH, HEIGHT))
CAPTION_IMAGE = pygame.image.load("spaceship.png")
ENEMY_IMAGE = pygame.image.load("enemy.png")
BULLET_IMAGE = pygame.image.load("bullet.png")
PLAYER_IMAGE = pygame.image.load("warship.png")
创建bullet类

class Bullet:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.img = BULLET_IMAGE
        self.mask = pygame.mask.from_surface(self.img)
        self.vel = 8
        self.hitbox = (self.x, self.y, 32,32)

    def draw(self, window):
        window.blit(self.img, (self.x, self.y))
        self.hitbox = (self.x, self.y, 32, 32)
        pygame.draw.rect(window,(0,0,255),self.hitbox,2)

    def get_width(self):
        return self.img.get_width()

    def get_height(self):
        return self.img.get_height()

    def collide(self, obj1, obj2):
        self.offset_x = obj2.x - obj1.x
        self.offset_y = obj2.y - obj1.y
        return obj1.mask.overlap(obj2.mask , (self.offset_x, self.offset_y)) != None

class Ship:
    def __init__(self, x, y,width,height):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.ship_img = None


    def draw(self, window):
        window.blit(self.ship_img, (self.x, self.y))


    def get_width(self):
        return self.ship_img.get_width()

    def get_height(self):
        return self.ship_img.get_height()


class Player(Ship):

    def __init__(self, x, y,width,height):
        super().__init__(x, y,width,height)
        self.ship_img = PLAYER_IMAGE
        self.mask = pygame.mask.from_surface(self.ship_img)
        self.hitbox = (self.x, self.y, 64, 64)

    def draw(self, window):
        super().draw(window)
        self.hitbox = (self.x , self.y , 64, 64)
        pygame.draw.rect(window, (0, 0, 255), self.hitbox, 2)
创建敌人类并定义碰撞定义

class Enemy():

    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.ship_img = ENEMY_IMAGE
        self.mask = pygame.mask.from_surface(self.ship_img)
        self.enemy_vel = 4
        self.hitbox = (self.x, self.y, 64, 64)

    def draw(self, window):
        self.hitbox = (self.x, self.y, 64, 64)
        window.blit(self.ship_img,(self.x, self.y))
        pygame.draw.rect(window, (255,0,0),self.hitbox,2)

    def move(self,x,y):
        self.x = x
        self.y = y
        self.x += self.enemy_vel
        if self.x >= 686 or self.x <= 0:
            self.enemy_vel *= -1
            self.y += 5

    def get_width(self):
        return self.ship_img.get_width()
    def get_height(self):
        return self.ship_img.get_height()

    def hit(self):
        print("Hit")

    def collide(self,obj1, obj2):
        self.offset_x = obj2.x - obj1.x
        self.offset_y = obj2.y - obj1.y
        return obj1.mask.overlap(obj2.mask , (self.offset_x, self.offset_y)) != None




def main():
    run = True
    FPS = 60
    clock = pygame.time.Clock()
    bullets = []
    enemies = []
    player = Player(350, 500,64,64)
    player_vel = 8
    enemy_vel = 3




    def redraw_window():
        WIN.blit(BG_IMAGE,(0,0))
        player.draw(WIN)
        for bullet in bullets:
            bullet.draw(WIN)
        for enemy in enemies:
            enemy.draw(WIN)
        pygame.display.update()
类敌人():
定义初始化(self,x,y):
self.x=x
self.y=y
self.ship\u img=敌人\u图像
self.mask=pygame.mask.from_surface(self.ship_img)
敌我级别=4
self.hitbox=(self.x,self.y,64,64)
def绘图(自,窗口):
self.hitbox=(self.x,self.y,64,64)
window.blit(self.ship\u img,(self.x,self.y))
pygame.draw.rect(窗口,(255,0,0),self.hitbox,2)
def移动(自身、x、y):
self.x=x
self.y=y
self.x+=self.敌军等级
如果self.x>=686或self.x 0:
bullet.y-=bullet.vel
其他:
子弹.弹孔(子弹.索引(子弹))
keys=pygame.key.get_pressed()
如果键[pygame.K_RIGHT]和player.x+player_vel+player.get_width()0:
player.x-=player_级别
如果键[pygame.K_SPACE]:
如果透镜(子弹)<10:
子弹。追加(子弹(回合(玩家x+17),回合(玩家y)))
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
main()
然后在6次或7次碰撞后取此错误

C:\Users\191119\AppData\Local\Programs\Python38-32\Python.exe“C:/Users/191119/PycharmProjects/Pygame Projects2/AIGAMES.py” PyGame1.9.6 大家好,来自pygame社区。 回溯(最近一次呼叫最后一次): 文件“C:/Users/191119/PycharmProjects/Pygame Projects2/AIGAMES.py”,第180行,在 main() 文件“C:/Users/191119/PycharmProjects/Pygame Projects2/AIGAMES.py”,第151行,主视图 敌人.pop(敌人.索引(敌人)) ValueError:不在列表中这是您的问题:

针对敌人中的敌人:
敌人移动(敌人x,敌人y)
对于子弹中的子弹:
如果子弹相撞(敌人,子弹):
敌人.pop(敌人.索引(敌人))
子弹.弹孔(子弹.索引(子弹))
您正在遍历列表并从列表中删除元素,而您仍在遍历它们。那是不允许你做的事

尝试遍历列表的副本并从原始列表中删除。大概是这样的:

敌人中的敌人。复制(): 敌人移动(敌人x,敌人y) 用于项目符号中的项目符号。复制(): 如果子弹相撞(敌人,子弹): 敌人.pop(敌人.索引(敌人)) 子弹.弹孔(子弹.索引(子弹)) 另一方面,我不清楚你为什么要做这种手术:

bullets.pop(bullets.index(bullet))
不要像这样使用
remove()

项目符号。删除(项目符号)

@Softwareprogrammer94是同一种错误,但位于不同的位置吗?你也需要在其他地方做一个类似的复制。我在代码中看到另一个位置,您正在迭代
项目符号
pop()
项。@Softwareprogrammer94还注意到我的额外建议,即使用
remove()
而不是
pop()
index()
组合。感谢这么多的朋友,我将(pop)改为(remove)它会起作用的。:()()))谢谢
    while run:
        clock.tick(FPS)
        redraw_window()


        if len(enemies) < 8:
            enemies.append(Enemy(random.randint(0, 600), random.randint(0,200)))

        for enemy in enemies:
            enemy.move(enemy.x, enemy.y)
            for bullet in bullets:
                if bullet.collide(enemy,bullet):
                    enemies.pop(enemies.index(enemy))
                    bullets.pop(bullets.index(bullet))




        for bullet in bullets:
            if bullet.y < 600 and bullet.y > 0:
                bullet.y -= bullet.vel
            else:
                bullets.pop(bullets.index(bullet))


        keys = pygame.key.get_pressed()
        if keys[pygame.K_RIGHT] and player.x + player_vel + player.get_width() < WIDTH:
            player.x += player_vel
        if keys[pygame.K_LEFT] and player.x - player_vel > 0:
            player.x -= player_vel
        if keys[pygame.K_SPACE]:
            if len(bullets) < 10:
                bullets.append(Bullet(round(player.x + 17),round(player.y)))



        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False


main()