1

我正在使用 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_turn

if game_state == 'playing' and player_action != 'didnt-take-turn': 
    for object in objects: 
        if object.ai: 
            object.ai.take_turn()
4

2 回答 2

1

气味追踪是控制怪物移动的一种非常有效的方法;我在我的 C++ roguelike 项目中使用了一个变体,它设置了一个“气味轨迹”,它可以通过多次回溯或走过自己的气味来“迷惑”怪物。

我只有 C++ 方面的经验,但如果您搜索“libtcod C++ 教程”,它应该会在前几个结果中显示带有气味例程的页面。它应该很容易得到一般的想法。

祝你好运!

于 2013-11-11T23:22:05.393 回答
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 无关的东西来跟踪玩家。

于 2013-09-18T11:03:34.727 回答