我正在使用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()只接受两个参数(一个给定)
不知道如何实现这一点。
我在给take_turn打电话
if game_state == 'playing' and player_action != 'didnt-take-turn':
for object in objects:
if object.ai:
object.ai.take_turn()发布于 2013-09-18 11:03:34
一个简单的解决方案是跟踪玩家的位置,这是怪物最后一次看到玩家。
当球员离开视线时,只需移动到最后一个位置即可。
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)这当然很简单(而且是可利用的),但是你会明白的。进一步的步骤可能是创建某种类型的超时和/或跟踪播放器的声音/气味或任何与视场无关的东西。
发布于 2013-11-11 23:22:05
气味追踪是控制怪物运动的一种非常有效的方法;我在我的C++ roguelike项目中使用了一个变体,它设置了一个“气味跟踪”,它可以通过回溯或多次遍历自己的气味来“混淆”一个怪物。
我只拥有使用C++的经验,但是如果您搜索'libtcod C++教程‘,它应该会在最初的几个结果中带来带有气味例程的页面。这应该很容易就能得到大致的想法。
祝好运!
https://stackoverflow.com/questions/18818933
复制相似问题