Когда игрок сталкивается с монстром, жизнь не уменьшается - PullRequest
0 голосов
/ 04 февраля 2020

Я добавил жизни в свою игру, и она работала нормально, используя только текст. Однако теперь, когда я изменил его на изображения, он не работает. Изображения (сердца x3) отображаются, но не уменьшаются, когда игрок сталкивается с монстром. ОБНОВЛЕНИЕ: полная игра l oop теперь включена!

class Player(object):
    def __init__(self, pos):
        self.rect = pygame.Rect(pos[0], pos[1]+32, 32, 32)
        self.image = playerImg
        self.lives = 3
def life_dis(screen,x,y,lives,img):
    for i in range(lives):
        img_rect = img.get_rect()
        img_rect.x = x+37*i
        img_rect.y = y
        screen.blit(img, img_rect)
def game_loop():
    global walls, players, monsters, finishes, currentLevel
    level = 1 #Starting level
    running = True
    while running:
        clock.tick(60)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
            if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
                pygame.quit()
                quit()

        screen.fill(blue)        
        level_dis(level)

        #Move the player if an arrow key is pressed
        key = pygame.key.get_pressed()
        if key[pygame.K_LEFT]:
            player.move(-2, 0)
        if key[pygame.K_RIGHT]:
            player.move(2, 0)
        if key[pygame.K_UP]:
            player.move(0, -2)
        if key[pygame.K_DOWN]:
            player.move(0, 2)

        #Move monster
        for monster in monsters:
            monster.move()

        #Moving to next level/win
        for player in players:
            for finish in finishes:
                if player.rect.colliderect(finish.rect):
                    if currentLevel < Highest_level:
                        currentLevel +=1
                        level +=1
                        walls, players, monsters, finishes = load_level(currentLevel)
                    else:
                        win()
                        level = 1
                        #lives = 3

        #Getting caught by the monster
        for player in players:
            for monster in monsters:
                if player.rect.colliderect(monster.rect):
                    load_current_level()
                    player.lives -=1
                    if player.lives == 0:
                        game_over()
                        level = 1
                        #lives = 3

        #Draw the scene
        screen.blit(background, (0,32))
        for wall in walls:
            #pygame.draw.rect(screen, green, wall.rect)
            screen.blit(wall.image, wall.rect)
        for player in players:
            #pygame.draw.rect(screen, orange, player.rect)
            screen.blit(player.image, player.rect)
        for monster in monsters:
            #pygame.draw.rect(screen, bright_green, monster.rect)
            screen.blit(monster.image, monster.rect)
        for finish in finishes:
            #pygame.draw.rect(screen, red, finish.rect)
            screen.blit(finish.image, finish.rect)
        life_dis(screen,500,0,player.lives,lifeImg)
        pygame.display.update()

Это фрагменты моего кода, показывающие, как я настроил «жизни». Я, вероятно, не объявил что-то или не в нужном месте! Я не думаю, что это обновление дисплея, так как игра должна закончиться, как только монстр получит вас 3 раза, но это не так. Заранее благодарен за любую помощь, и я могу предоставить весь код, если требуется.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2020

Я теперь решил это! Я удалил self.lives = 3 из класса игрока и вместо этого создал глобальную переменную lives = 3. Затем я изменил player.lives на lives, плюс назвал lives под глобальным в основной игре l oop, и теперь все работает отлично! Спасибо за предложения, поскольку они помогли мне решить эту проблему. Однако мне все равно было бы интересно узнать, почему это не сработало раньше. Если бы я сделал что-то не так или просто из-за того, что моя игра работает, это не сработало. Еще раз спасибо!

0 голосов
/ 05 февраля 2020

Поскольку вы говорите, что это работает в тексте, я подозреваю, что это проблема обновления экрана. Если ваши сердца мелькают на части экрана, которая не перерисовывается каждые l oop, старое изображение сердца останется на экране, даже если вы передадите pygame.diaplsy.update ().

Попробуйте использовать screen.fill (), прежде чем рисовать все на экране, чтобы сбросить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...