我如何检测我的角色是否与敌人相撞并在它击中 3 次时关闭游戏

How do i detect if my character collided with an enemy and closes the game if it hits 3 times

我想做的有点像生命系统,碰到敌人3次就会退出


pygame.init()

screen_width = 800
screen_height = 600

window = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption('Test')
time = pygame.time.Clock()
bg_color1 = (135, 142, 142)  # MAIN BG COLOR
bg_color2 = (255, 0, 0)  # red
bg_color3 = (255, 255, 0)  # yellow
UFO = pygame.image.load('ufo.png')
bg_pic = pygame.image.load('Letsgo.jpg')
clock = pygame.time.Clock()
playerImg = pygame.image.load('enemy.png')
playerX = random.randrange(0, screen_width)
playerY = -50
playerX_change = 0
player_speed = 5


def player(x, y):
    window.blit(playerImg, (playerX, playerY))


crashed = False

rect = UFO.get_rect()
obstacle = pygame.Rect(400, 200, 80, 80)

menu = True
playerY = playerY + player_speed
if playerY > screen_height:
    playerX = random.randrange(0, screen_width)
    playerY = -25


def ufo(x, y):
    window.blit(UFO, (x, y))


while menu:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            quit()
        elif event.type == pygame.MOUSEBUTTONDOWN:
            if event.button == 1:
                menu = False
    window.fill((0, 0, 0))
    time.tick(30)
    window.blit(bg_pic, (0, 0))
    pygame.display.update()
x = (screen_width * 0.45)
y = (screen_height * 0.8)
x_change = 0
car_speed = 0
y_change = 0

while not crashed:
    x += x_change
    if x < 0:
        x = 0
    elif x > screen_width - UFO.get_width():
        x = screen_width - UFO.get_width()

    y += y_change
    if y < 0:
        y = 0
    elif y > screen_height - UFO.get_height():
        y = screen_height - UFO.get_height()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            crashed = True

        ############SIDE TO SIDE################
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                x_change = -5
            elif event.key == pygame.K_RIGHT:
                x_change = 5
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                x_change = 0
        ###########UP AND DOWN#################
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                y_change = -5
            elif event.key == pygame.K_DOWN:
                y_change = 5
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
                y_change = 0
    if playerY > screen_height:
        playerX = random.randrange(0, screen_width)
        playerY = 0
    playerY += 10
    ##
    window.fill(bg_color1)
    ufo(x, y)
    player(playerX, playerY)
    pygame.display.update()
    clock.tick(100)

pygame.quit()
quit()

我正在考虑使用 collide.rect,但无法弄清楚任何帮助,我们将不胜感激 我希望“playerImg”成为敌人................................................ .....................................

创建一个存储生命数的变量。创建pygme.Rect objects of the player and the UFO with the method get_rect. Set the location of the rectangles by keyword arguments. Use colliderect以测试碰撞并在检测到碰撞时减少生命数并创建新的随机起始位置:

lives = 3
while not crashed:
    # [...]

    player_rect = playerImg.get_rect(topleft = (playerX, playerY))
    ufo_rect = UFO.get_rect(topleft = (x, y))
    if player_rect.colliderect(ufo_rect):
        lives -= 1
        print(lives)
        playerX = random.randrange(0, screen_width)
        playerY = 0
        if lives == 0:
            crashed = True

    # [...]