所以我在Pygame中创建了一个基本的PacMan游戏,并试图弄清楚如何创建一些“智能”游戏。幽灵运动。我不希望鬼魂过于聪明,让游戏变得太难,但我也不希望他们随意移动,让玩家更轻松。
这是我的鬼类的第一部分,运动方法。我目前正在搞乱玩家在幽灵左边的部分。关于我如何让幽灵移动的任何想法有点聪明?它经常碰到墙壁
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')
任何想法都将不胜感激!! 谢谢!
答案 0 :(得分:1)
看起来你正试图在特定的时间后改变鬼魂方向。 这可能会有效,但大多数情况下幽灵都无法改变方向,因为当时有一堵墙挡住它进入新的方向。
另一种方法是计算它移动了多少个图块,然后在下一个交叉点随机选择一个可能的方向。
这意味着你需要一种方法来了解你有哪些可能的方向,或者从四种可能的方向中选择一种方法,如果它被阻止你将其从当前可能的选择中删除并选择另一种方法。
从那里开始,你将能够构建你需要的AI。
例如,如果幽灵“看到”玩家,它可能会开始追逐它。为了让幽灵看到玩家,他们必须在同一行或列上,幽灵在玩家所在的方向移动,并且两者之间没有墙。一段时间后(这意味着移动了一定数量的瓷砖后),它将恢复为随机移动。