Cur*_*ker 8 c# algorithm artificial-intelligence path-finding
我知道我的问题看起来很模糊,但我想不出更好的方式来表达它,所以我将首先解释我正在尝试做什么.
我目前正在开展一个项目,我已经获得了一张地图,我正在编写一个应该能够在地图上导航的"小动物"; 生物有各种其他功能,但那些与当前问题无关.整个程序和解决方案都是用C#编写的.
我可以控制生物的速度,并通过返回当前的X和Y位置来检索它在地图上的当前位置,我还可以在它与阻挡它的地形碰撞时设置它的方向.
我唯一的问题是我无法想到一种智能地在地图上导航的方法; 到目前为止,我一直把它放在小动物与地形碰撞时所面对的方向上,这绝不是在地图上移动的好方法!
我不是游戏程序员,这是一个软件任务,所以我对AI技术没有任何线索.
这里是地图和小动物图像的链接:
我绝不在寻找任何人给我一个完整的解决方案,只是推动地图导航的大方向.
如果你所拥有的环境的唯一知识就是你的生物的位置和它的速度,那么你能做的最好的就是我认为的墙壁跟随算法.如果您可以检测到环境中的其他一些内容,那么您还有更多选择.
一些比较流行的算法类型是......
潜在场是一种奇特的方式,说每个障碍或墙都有"排斥力",而每个目标都有"吸引力".力的强度基于物体的距离和物体的"严重性".(熔岩坑比崎岖不平的道路要严重得多)在构建力场之后,天真的算法归结为遵循阻力最小的路径.更好的版本可以检测局部最小值和最大值并逃脱这些井.
    Critter
    -----\    /-------\
          \  /         \ 
           \/           \
   Local Minima Trap     \
                          \
                           \
                             Goal
我会使用以目标为导向的方法。你的问题表明我们的目标是探索地图并避开障碍物,所以这就是我们的目标。但我们如何探索整个地图呢?我们探索尚未探索的事物。
从一开始,你就只有一个未探索的区域,即你所在的广场。地图的其余部分被标记为未探索。你选择一个未探索的地点,并将探索它作为你的目标。但你如何到达那里呢?您创建一个子目标来探索它旁边的位置。你该如何做到这一点 - 探索旁边的方块,依此类推,直到你的原始目标被分解为一系列探索,从当前方块开始并导航到目标方块。
当您遇到障碍并发现地图的功能时,某些子目标可能需要更改。例如,当你撞到墙上时,探索该广场的子目标必须被删除,并且你创建一个新计划来寻找替代路线。这称为回溯。
基本上这就是高级描述。我希望它有帮助!