Попытка сделать основное движение противника в игре pacman, используя pygame - PullRequest
0 голосов
/ 29 мая 2018

Итак, я создаю базовую игру PacMan в Pygame и пытаюсь понять, как создать несколько «интеллектуальных» движений призраков.Я не хочу, чтобы призраки были слишком умными, делающими игру слишком сложной, но я также не хочу, чтобы они просто двигались случайным образом, облегчая для игрока.

Вот первая частьмой призрачный класс, с методом движения.В настоящее время я возиться с частью, где игрок находится слева от призрака.Любые идеи о том, как я мог заставить призрака двигаться несколько разумно?Это сталкивается со стенами много

class Ghost(pygame.sprite.Sprite):

    def __init__(self, game, x, y, color):
        self.groups = game.all_sprites

        pygame.sprite.Sprite.__init__(self, self.groups)

        self.game = game
        self.image = sprite_sheet('ghost_spritesheet.png').get_image(0, 0, 24, 24)

        self.x = x * TILESIZE
        self.y = y * TILESIZE


        self.rect = self.image.get_rect()

        self.vx, self.vy = 0, 0

        self.spritesheet_index = 0

        self.first_time = pygame.time.get_ticks()
        self.short_delay = 40
        self.long_delay = 1000
        self.move_list = ['none']
        self.direction = ''

        self.color = color


        self.list_of_directions = ['right', 'left', 'up', 'down']

        self.direction_first_time = pygame.time.get_ticks()


    def get_direction(self):
        self.direction_second_time = pygame.time.get_ticks()

        if self.game.player.rect.x < self.rect.x:

            if self.direction_second_time - self.direction_first_time > self.long_delay: #simply creating a delay to make sure the ghost isn't constantly changing direction

                self.move_list.append(random.choice(['left', 'up', 'down']))

                self.direction_first_time = pygame.time.get_ticks()



        if self.game.player.rect.x > self.rect.x:
            self.move_list.append('right')

        if self.game.player.rect.y < self.rect.y:
            self.move_list.append('up')

        if self.game.player.rect.y > self.rect.y:
            self.move_list.append('down')

ЛЮБЫЕ идеи будут с благодарностью!Спасибо!

1 Ответ

0 голосов
/ 30 мая 2018

Похоже, вы пытаетесь изменить направление призрака через определенное время.Это может сработать, но в большинстве случаев может случиться так, что призрак не сможет изменить направление, потому что в это время есть стена, блокирующая его движение в новом направлении.

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

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

Начните оттуда, и вы сможете построить необходимый ИИ.

Например, если призрак«видит» игрока, он может начать преследовать его.Чтобы призрак мог видеть игрока, необходимо, чтобы он находился в одном ряду или столбце, призрак двигался в направлении, где находится игрок, и между ними нет стен.Через некоторое время (что означает, что после количества перемещенных плиток) оно вернется к случайному движению.

...