AI与游戏——吃豆人(3)基本的路径规划算法(上)
来源:互联网 发布:江宁区高新园网络问政 编辑:程序博客网 时间:2024/06/06 03:02
这次我们来讲一下代码中涉及的一些路径规划算法,在这个游戏中,路径规划虽然不属于人工智能但是确实实现AI算法不可或缺的基础方法,下面就来大致介绍一下有哪些主要的方法以及这些方法的实现。
(1)getApproximateNextMoveTowardsTarget:这个实现的是得到是起始点到目标点的大致的运动,为什么叫大致呢,因为这里没有考虑障碍物等因素。这个函数还可以用在A*算法上(A*算法后面会专门讲)。代码如下:
public MOVE getApproximateNextMoveTowardsTarget(int fromNodeIndex, int toNodeIndex, MOVE lastMoveMade, DM distanceMeasure) { MOVE move = null; double minDistance = Integer.MAX_VALUE; for (Entry<MOVE, Integer> entry : currentMaze.graph[fromNodeIndex].allNeighbourhoods.get( lastMoveMade).entrySet()) { double distance = getDistance(entry.getValue(), toNodeIndex, distanceMeasure); if (distance < minDistance) { minDistance = distance; move = entry.getKey(); } } return move; }
参数分别是:起始点,目标点,上一次运动方向,距离度量方法。这里有个上一次运动方向作为参数,说实话,这个for循环的条件语句可以说是非常难搞懂,其实allNeighbourhoods这里是一个MAP里面又嵌套了一个MAP,准确的说是 < MOVE, < MOVE, index > > 这种形式,第一个MOVE是可到达fromNode的移动,第二个是fromNode可以执行的移动以及执行该移动所到达的点,但是不包括前一个MOVE。举个例子,对于左上角坐标(0,0)的点,可以到达的移动为从(0,1)向左,从(1,0)向上,或在(0,0)保持不动,所以第一个MOVE为left,up,neutral三个(由于neutral只有特定情况才执行所以后面就不再考虑),而对于left,left->< down, (1,0) >,所以当遍历left的value的时候,就没有right这个值,只有向下走,同理,up->< right, (0,1) >。这样在选择路径时不用再考虑之前的移动。接着得到所有除了上一步的点之外其余可以行走的点,然后求与目标点的欧氏距离,距离最小的那个对应的MOVE即为所选。
(2)getNextMoveTowardsTarget:这个跟之前的差不多,不同的是这个考虑的MOVE考虑之前一步的MOVE了,也就是说,对于fromNode,所有可行走的方向都用于计算距离。上一个主要用于魔鬼的到达目标路线规划,这个一般用户吃豆人的。
for (Entry<MOVE, Integer> entry : currentMaze.graph[fromNodeIndex].neighbourhood.entrySet())
这里只给出不同的循环语句,可以看到从之前的allNeighbourhoods,变成了neighbourhood,后者是结构是< MOVE, INDEX >,为走法与可到达的点组成的MAP。
(3)getApproximateNextMoveAwayFromTarget:这个跟第一个也差不多,只不过之前求的是最小距离,这个求最大距离。
(4)getNextMoveAwayFromTarget:这个不解释了,想想也知道不同之处了。。。
以上都是得到大致方向的方法,那么有没有得到准确路径的方法呢,当然有,就先放到下一部分再说吧。
- AI与游戏——吃豆人(3)基本的路径规划算法(上)
- AI与游戏——吃豆人(3)基本路径规划算法(下)
- AI与游戏——吃豆人(5)树搜索算法(上)
- AI与游戏——吃豆人(1)代码简介
- AI与游戏——吃豆人(2)控制器简介
- AI与游戏——吃豆人(4)方法综述
- Cocos2d-x《雷电大战》(6) 智能敌机AI来袭--飞行路径算法设计与实现(上)
- Cocos2d-x《雷电大战》(6) 智能敌机AI来袭--飞行路径算法设计与实现(上)
- Cocos2d-x《雷电大战》(6) 智能敌机AI来袭–飞行路径算法设计与实现(上)
- 游戏AI之行为树(上)
- 嵌套模型(DAG上的动态规划)—动态规划入门(算法经典入门)
- 嵌套模型(DAG上的动态规划)—动态规划入门(算法经典入门)
- AI入门——阐述游戏AI设计的两个禁忌及解决方法(转)
- 即时战略游戏AI技术的发展——(一)
- dijkstra算法(路径规划)
- a*算法(路径规划)
- 规划(AI Planning)
- AI与游戏——引言
- HDU 6201 transaction transaction transaction(SPFA算法求最长路径)
- 实现DotA的技能冷却效果
- Spring Boot入门之 HelloWorld
- Eureka的高可用实战:服务提供者、服务消费者集群之间的调用方式
- centos7安装出现license information(license not accepted)解决办法
- AI与游戏——吃豆人(3)基本的路径规划算法(上)
- 【干货】Apache Hadoop 2.8 完全分布式集群搭建超详细过程,实现NameNode HA、ResourceManager HA高可靠性
- HDU 1018 Big Number(数学知识)
- 自定义场景和场景跳转
- Android开发者文档——————必看️️️️️️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️——链接
- 对Win10和Linux双系统进行备份
- 常用linux命令
- 数据归一化和两种常用的归一化方法
- Java 并发编程(四)线程同步关键字volatile和synchronized