我正在使用libtcod和python制作一个roguelike;如果你在他们的视野中,我跟踪怪物的教程只会跟着你。显然这是不够的;因为这意味着你可以转弯,他们不会跟着你走 我试过这样的事情;
class BasicMonster:
def take_turn(self, seen):
self.seen = False
monster = self.owner
if lib.map_is_in_fov(fov_map, monster.x, monster.y):
self.seen == True
if self.seen == True:
self.move_towards(player.x, player.y)
无济于事。它提出了
TypeError:
take_turn()
只需要2个参数(给定1个)
不确定如何实施。
我正在打电话给我在
下打电话给take_turnif game_state == 'playing' and player_action != 'didnt-take-turn':
for object in objects:
if object.ai:
object.ai.take_turn()
答案 0 :(得分:1)
一个简单的解决方案是在怪物最后一次看到玩家时跟踪玩家的位置。
当玩家离开视线时,只需移动到最后一个位置。
class BasicMonster:
def __init__(self):
self.last_player_pos = None
def take_turn(self):
monster = self.owner
if libtcod.map_is_in_fov(fov_map, monster.x, monster.y):
# store position we last saw the player
self.last_player_pos = player.x, player.y
#move towards player if far away
# ... rest of code here ...
else:
if self.last_player_pos:
monster.move_towards(*self.last_player_pos)
这当然非常简单(并且可以利用),但你会明白这一点。进一步的步骤可能是通过声音/气味或与FOV无关的任何事物创造某种超时和/或跟踪玩家。
答案 1 :(得分:1)
气味追踪是控制怪物运动的一种非常有效的方法;我在我的C ++ roguelike项目中使用了一个变体来设置一个“气味踪迹”,这使得通过回溯或多次走过你自己的气味来“混淆”怪物成为可能。
我只有C ++的经验,但是如果你搜索'libtcod C ++教程',它应该在前几个结果中带有带有气味例程的页面。获得总体思路应该很容易。
祝你好运!