我用Python编写Roguelike,我需要一个特定的怪物跟随脚本

时间:2013-09-16 00:32:01

标签: python roguelike libtcod

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

2 个答案:

答案 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 ++教程',它应该在前几个结果中带有带有气味例程的页面。获得总体思路应该很容易。

祝你好运!