游戏AI的随机游走+探索算法。场景瓷砖

时间:2012-10-04 20:06:22

标签: c# algorithm navigation pathing navmesh

我正在尝试在基于场景平铺的游戏中提出一种随机行走算法。 步行者需要能够随机导航,直到探索完所有图块或直到找到下一个图块。

到目前为止,如果演员踩到它,我就会探索过这块瓷砖。

然后它找到下一个图块中心的路径。

但是它失败的地方通常认为它已经完成了探索,或者没有更多的瓷砖了。

是否有任何地方可以寻找一些例子,就好像我要粘贴源一样,它会很长。

2 个答案:

答案 0 :(得分:1)

我几年前在Mac上做过这样的一个,然后用“FLAGS”解决了这个问题,以确定是否已发生任何事情/条件已满足......

If FlagFinal=1 then (exit) else ...

我游戏中的大部分内容都是用旗帜完成的。

因此,当在磁贴中遇到随机的陌生人时,会检查其他标志是否为1。 所以...如果FlagCow = 0则在MeetMilkMaid上然后(请问)其他(做奖励)。

希望这有帮助。

答案 1 :(得分:0)

嗯...如果你的意思是真正的随机行走,那么获取所有瓷砖的列表,随机化它,然后将随机化的项目添加到堆栈(或队列)。当你走到它时,将每个瓷砖从堆栈中弹出。

Tile[] _tiles;
//... some code here to load the tiles

Tile[] _randomizedTiles;
//... some code here to randomize the tiles

Stack<Tile> _tilesToExplore = new Stack<Tile>( _randomizedTiles );

while ( _tilesToExplore.Count > 0 ){
    var l_nextTile = _tilesToExplore.Pop();
    //... some code to walk to the tile
}

如果您的意思是伪随机“徘徊”,那么您可以使用List<Tile>修改此方法。使用您自己的自定义解决方案来挑选下一个磁贴(而不是从堆栈中弹出),同时从Tile中删除List。只要List不为空,就保持循环。

如果您有更高级的方案(您可能事先不知道磁贴,或者磁贴可能无法访问),那么您可能会发现此CodeProject文章(和演示代码)很有用:
A* algorithm implementation in C#

更多信息
Randomize a List in C#
Stack class (MSDN)