`
cenphoenix
  • 浏览: 160583 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

游戏算法整理 算法三:寻路算法新思维

阅读更多

目前常用寻路算法是A*方式,原理是通过不断搜索逼近目的地的路点来获得。

 

如果通过图像模拟搜索点,可以发现:非启发式的寻路算法实际上是一种穷举法,通过固定顺序依次搜索人物周围的路点,直到找到目的地,搜索点在图像上的表现为一个不断扩大的矩形。如下:





 很快人们发现如此穷举导致搜索速度过慢,而且不是很符合逻辑,试想:如果要从(0,0)点到达(100,0)点,如果每次向东搜索时能够走通,那么干吗还要搜索其他方向呢?所以,出现了启发式的A*寻路算法,一般通过 已经走过的路程 + 到达目的地的直线距离 代价值作为搜索时的启发条件,每个点建立一个代价值,每次搜索时就从代价低的最先搜索,如下:



 

综上所述,以上的搜索是一种矩阵式的不断逼近终点的搜索做法。优点是比较直观,缺点在于距离越远、搜索时间越长。

 

现在,我提出一种新的AI寻路方式——矢量寻路算法

 

通过观察,我们可以发现,所有的最优路线,如果是一条折线,那么、其每一个拐弯点一定发生在障碍物的突出边角,而不会在还没有碰到障碍物就拐弯的情况:如下图所示:

 

我们可以发现,所有的红色拐弯点都是在障碍物(可以认为是一个凸多边形)的顶点处,所以,我们搜索路径时,其实只需要搜索这些凸多边形顶点不就可以了吗?如果将各个顶点连接成一条通路就找到了最优路线,而不需要每个点都检索一次,这样就大大减少了搜索次数,不会因为距离的增大而增大搜索时间。

 

这种思路我尚未将其演变为算法,姑且提出一个伪程序给各位参考:

1.                建立各个凸多边形顶点的通路表TAB,表示顶点A到顶点B是否可达,将可达的顶点分组保存下来。如: ( (0,0) (100,0) ),这一步骤在程序刚开始时完成,不要放在搜索过程中空耗时间。

2.              开始搜索A点到B点的路线

3.              检测A点可以直达凸多边形顶点中的哪一些,挑选出最合适的顶点X1。

4.              检测与X1相连(能够接通)的有哪些顶点,挑出最合适的顶点X2。

5.   X2是否是终点B?是的话结束,否则转步骤4(X2代入X1)

 

如此下来,搜索只发生在凸多边形的顶点,节省了大量的搜索时间,而且找到的路线无需再修剪锯齿,保证了路线的最优性。

 

这种方法搜索理论上可以减少大量搜索点、缺点是需要实现用一段程序得出TAB表,从本质上来说是一种空间换时间的方法,而且搜索时A*能够用的启发条件,在矢量搜索时依然可以使用。

 

 

 


 
 

 

 

 

  • 大小: 7.2 KB
  • 大小: 6 KB
  • 大小: 6 KB
  • 大小: 5.9 KB
  • 大小: 6.3 KB
分享到:
评论

相关推荐

    寻路算法新思维.doc

    寻路算法新思维.doc

    c语言实现迷宫问题:创建迷宫,自动寻路

    10. **迷宫游戏1、迷宫游戏2**:这些可能是两个不同的迷宫游戏实现,可能包含不同的难度级别或不同的寻路算法。 通过这个项目,学习者不仅可以深入理解C语言的编程实践,还能掌握迷宫问题的解决策略,包括DFS和递归...

    十几个经典算法研究(编程学习)

    除了上述基础算法,还有一些高级算法,如KMP字符串匹配、A*寻路算法、贪心算法等,它们在特定场景下表现出色。例如,KMP算法可以高效地进行字符串查找,避免了冗余比较;A*算法则结合了贪婪策略和启发式信息,用于...

    妙趣横生的算法PDF

    或者通过寻路游戏来演示搜索算法,如何在复杂环境中找到最优解。 PDF中的内容可能还涉及算法的时间复杂度和空间复杂度分析,这是评估算法效率的重要指标。时间复杂度描述了算法运行所需的时间与输入数据量的关系,...

    A星算法详解

    - 在Unity游戏引擎中,A*算法常用于角色的自动寻路,特别是在复杂的游戏环境中。 - 可以创建一个Grid或者NavMesh来表示游戏世界的可行走区域,并为每个单元格赋予合适的代价。 - 使用A*算法计算角色从当前位置到...

    jfc.zip_智能matlab_蚁群算法方程

    蚁群算法(Ant Colony Optimization, ACO)源于生物学中的蚂蚁寻路行为。在寻找食物过程中,蚂蚁会在路径上留下信息素,其他蚂蚁会根据这些信息素的浓度选择路径,从而形成一种集体智能。在数学优化中,这种机制被...

    C#写的推箱子游戏,不含源码

    寻路算法是计算机科学中解决路径规划问题的一种方法,它在游戏开发中尤为重要,因为游戏中的角色或物体需要找到从起点到终点的最佳路径。在推箱子游戏中,玩家需要操作角色将箱子推到指定位置,而角色和箱子的移动...

    塔防游戏简单逻辑

    1. **路径规划**:A*寻路算法(A* Pathfinding)常用于确定敌人从起点到终点的最佳路径。它结合了启发式信息(如距离目标的估计)和实际代价,确保敌人能够高效地沿着最短路线前进。 2. **敌人行为**:敌人AI通常...

    2021最新整理-NOIP信息学奥赛历年提高组初赛试题及答案.zip

    3. **逻辑思维**:通过编写程序解决逻辑推理问题,如数字序列规律、迷宫寻路等。 4. **数学知识**:组合数学、数论、几何等数学知识在编程中的应用。 5. **编程语言**:主要考察C++语言,包括语法、输入输出、文件...

    开源塔防游戏

    例如,A*寻路算法用于计算最短路径,优先队列用于处理敌人生成。 5. **音频处理**:游戏音效的添加能提升游戏体验,学习如何集成和控制Android的音频播放库,实现背景音乐和各种音效的播放。 6. **网络同步**:...

    随机迷宫(源码)

    5. **游戏逻辑**:包括角色移动、寻路算法、胜利条件判断等。寻路算法如A*或Dijkstra算法可以帮助角色找到迷宫出口。 6. **资源管理**:包括图像、音频和数据文件的加载和释放,有效管理内存以适应有限的移动设备...

    Go语言基础、进阶、提高课程--第九节 开发独立游戏,Go语言学习者应该掌握哪些知识1

    2. **算法能力**:虽然小游戏对算法的要求相对较低,但基本的算法知识如排行榜和寻路算法仍然是必要的。 3. **创新思维**:开发者需具备创新性,创建独特玩法的游戏,避免简单的复制和模仿。 4. **美术设计**:...

    c 小游戏源代码 C语言经典小游戏

    5. **算法**:游戏中经常涉及各种算法,如A*寻路算法、深度优先搜索或广度优先搜索用于解决游戏逻辑问题。 6. **错误处理**:良好的错误处理可以提高游戏的稳定性和用户体验,源代码中会包含对异常情况的处理。 7....

    JAVA小游戏,飞机多子弹

    算法则用于处理复杂的游戏逻辑,如碰撞检测算法(如扫査法、轴对齐包围盒),以及优化性能的算法(如A*寻路算法)。 7. **资源管理**:游戏可能涉及音效、图像等资源。Java提供`javax.sound`包处理音频,`ImageIO`...

    c语言游戏代码集

    8. **算法与数据结构**:游戏中的碰撞检测、寻路算法等可能运用到排序、搜索、图论等算法。 9. **时间函数**:比如time()和sleep(),用于控制游戏节奏,实现定时器或延时效果。 10. **错误处理**:良好的程序应该...

    C语言课程设计大作业 - 马里奥游戏.zip

    C语言作为一种基础且强大的编程语言,是许多计算机科学教育中的必修课,而利用C语言来实现游戏开发则能充分锻炼编程思维、数据结构以及算法应用等多方面技能。 首先,马里奥游戏的基础架构包括游戏循环、角色控制、...

    Silverlight实现的MoveBox游戏_movebox.zip

    这可能涉及到深度优先搜索(DFS)、广度优先搜索(BFS)或A*寻路算法。开发者需要根据游戏规则设计合适的算法,确保玩家的每一步操作都能得到正确的响应。 6. **用户交互**:Silverlight提供事件处理机制,使得游戏...

    自制走迷宫游戏.zip

    这涉及到路径规划算法,如深度优先搜索(DFS)或广度优先搜索(BFS),甚至是A*寻路算法。这些算法能够帮助我们生成和解决迷宫问题,确保游戏的挑战性和可玩性。 Cocos2d是一个强大的2D游戏开发框架,它提供了丰富...

    如何用C语言编写游戏.doc

    - **算法应用**:游戏中可能涉及各种算法,如路径查找(A*算法)、寻路算法、碰撞检测算法、人工智能行为算法等。 通过以上步骤,我们可以逐步构建一个简单的C语言游戏,并在此基础上不断扩展和完善,形成复杂的...

    java游戏开发小猪豆

    例如,A*寻路算法可以帮助小猪找到豆子的最短路径,而数组或集合则可以用来存储和管理游戏元素。 6. **游戏循环**:游戏的核心是主循环(Game Loop),它不断更新游戏状态,处理用户输入,并绘制新帧。Java的while...

Global site tag (gtag.js) - Google Analytics