首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我正在用Python编写一个Roguelike程序,我需要一个特定的Monster脚本

我正在用Python编写一个Roguelike程序,我需要一个特定的Monster脚本
EN

Stack Overflow用户
提问于 2013-09-16 00:32:00
回答 2查看 1.3K关注 0票数 1

我正在使用libtcod和python制作一个roguelike;我所遵循的教程只在您在它们的视野中时才会跟踪您。显然,这是不够的;因为它意味着你可以转弯,而他们不会跟随你的拐角处。

我试过这样的方法;

代码语言:javascript
复制
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打电话

代码语言:javascript
复制
if game_state == 'playing' and player_action != 'didnt-take-turn': 
    for object in objects: 
        if object.ai: 
            object.ai.take_turn()
EN

回答 2

Stack Overflow用户

发布于 2013-09-18 11:03:34

一个简单的解决方案是跟踪玩家的位置,这是怪物最后一次看到玩家。

当球员离开视线时,只需移动到最后一个位置即可。

代码语言:javascript
复制
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)

这当然很简单(而且是可利用的),但是你会明白的。进一步的步骤可能是创建某种类型的超时和/或跟踪播放器的声音/气味或任何与视场无关的东西。

票数 1
EN

Stack Overflow用户

发布于 2013-11-11 23:22:05

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

我只拥有使用C++的经验,但是如果您搜索'libtcod C++教程‘,它应该会在最初的几个结果中带来带有气味例程的页面。这应该很容易就能得到大致的想法。

祝好运!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18818933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档