在RPG游戏中我们经常会看到一些迷宫,我之前玩仙剑一的时候就经常在几个迷宫里绕来绕去也绕不出来,玩仙三由于游戏视角可以转,更是费劲。这里我们使用深度优先算法达到遍历一个迷宫的目的。

首先定义一个有序元组A:{左,上,右,下}表示遍历的顺序,这个顺序将用来生成搜索树的子节点,当然顺序是可以变的,如果地图是45度角的,也可以定义非正方向,总之能表示一个顺序就好。

然后针对每个分叉节点,定义候选方向为B:{x|x∈A ∩x方向有路可走∩ x≠当前方向},算法每次得到按照A排序的B集合,然后从B中取第一个方向进行,一直到B=Φ。当B=Φ时回溯到上一个节点,然后得到当前节点的B集,从中选择优先级低于当前方向的方向继续前进.如此可以遍历整个迷宫。

本算法的问题在于迷宫必须是非成环的,像仙剑三到大渡口的迷宫就是有环的,所形成的就不是搜索树而是搜索图,另一个问题是如果完全执行算法最后会停在入口的位置,所以见到出口您就出吧,见好就收。

举一个例子。

如上图所示的迷宫A集合{左,上,右,下},B集合依次如下所示:

{右}

{下}

{右}

{右,下}选则右

{上}

{右}回退一个

{上}回退一个

{右,下}选择下

{右}

{下}见好就收吧,出迷宫去喽

搜索树如图所示,每个子节点集合就是B

|

|

/  \

右   下

|    |

上   右

|    |

右   下

当然实际的迷宫构成的搜索树会很复杂,但是深度优先的思路还是一致的.

转载于:https://www.cnblogs.com/sdqxcxh/archive/2010/08/13/1798995.html

深度优先搜索算法在RPG游戏迷宫中的应用相关推荐

  1. 人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[0]——月晕础润

    开场诗: 不儒不道又不仙,非神非圣也非贤.轻吐心头寻常语, 开辟文武一片天. 自表诗: 北冥沉渊有鲲鹏, 吞噬金乌戮真龙.一日扶摇凌天起,三千世界可横行. 小子"鹏凌三千",欲将心 ...

  2. 算法详解之深度优先搜索算法

    14天阅读挑战赛 文章目录 1.深度优先搜索(Depth-First Search,DFS)介绍 2.深度优先搜索算法思想 3.深度优先搜索算法步骤: 4.深度优先搜索算法的应用 1.深度优先搜索(D ...

  3. 黑白迷宫问题——深度优先搜索算法

    2021年,九月,小w发现自己位于一个巨大的由黑格和白格组成的n行m列的迷宫中. 小w只能从白格走到黑格或从黑格走到白格, 小w找到了ljf,她想知道自己从每一个格子出发不回头可以走多少个格子. 但是 ...

  4. opencv制作微信小游戏 最强连一连 辅助(2)--dfs深度优先搜索算法

    深度优先搜索算法还是大二上数据结构的时候学的,工作以后都忘得差不多了.赶紧回来温习一下吧. 深度优先搜索的算法的 入参是一个地图(一般可以用二维数组表示)和一个起始点. 比如 这个就是一个5*5的二维 ...

  5. 学习在Unity中创建一个动作RPG游戏

    游戏开发变得简单.使用Unity学习C#并创建您自己的动作角色扮演游戏! 你会学到什么 学习C#,一种现代通用的编程语言. 了解Unity中2D发展的能力. 发展强大的和可移植的解决问题的技能. 了解 ...

  6. Unity完全学习教程-从初学者到C#中的RPG游戏开发

    打造3款游戏&学习Unity实用方式!从基础开始,以一个RPG游戏结束.使用Unity 2020和C# 你会学到: 通过创建酷游戏的实用方法 游戏开发的基础和核心概念 创建一个拥有大量功能的角 ...

  7. 求素数mdp c语言问题,C语言使用深度优先搜索算法解决迷宫问题(堆栈)

    本文实例讲述了C语言使用深度优先搜索算法解决迷宫问题.分享给大家供大家参考,具体如下: 深度优先搜索 伪代码 (Pseudocode)如下: 将起点标记为已走过并压栈; while (栈非空) { 从 ...

  8. 使用深度优先搜索算法解决迷宫问题

    英文 | https://bytefish.medium.com/use-depth-first-search-algorithm-to-solve-a-maze-ae47758d48e7 翻译 | ...

  9. 了解RPG游戏中剧情播放器的制作原理及流程

    http://www.iamsevent.com/post/44.html 本章源码下载:http://www.iamsevent.com/zb_users/UPLOAD/dramaPlayer/My ...

最新文章

  1. 好文转贴(3) —— 每个应用程序都有一个恐怖地下室 & 两个最容易被人忽略的基本代码优化技术...
  2. vue项目的实用配置
  3. 09-CNN手写数字识别
  4. php暂停循环,在特定数量的递归循环后,PHP停止执行
  5. .net性能测试和优化1 基本概念
  6. IIC控制设计读写EEPROM
  7. 2017蓝桥杯C++B:日期问题(日期转字符串)
  8. 如何使用Tuxera NTFS for Mac禁用特定NTFS分区
  9. 笔记7:winfrom的一些知识点(一)
  10. 今晚8点 | 矛与盾的对决——神经网络后门攻防
  11. php 微信公众号超链接,微信公众帐号开发教程第8篇-文本消息中使用网页超链接_PHP教程...
  12. 【洛谷 P3191】 [HNOI2007]紧急疏散EVACUATE(二分答案,最大流)
  13. “以卡养卡”是个技术活,一般人玩不了,不一般的人玩的溜
  14. android怎么开机画面,安卓手机开机画面怎么修改?
  15. python删除重复文件代码
  16. mysql算gps距离_mysql JS 计算两GPS坐标的距离函数:
  17. 贝塞尔曲线 三维 拼接 matlab,贝塞尔曲线公式
  18. 安装麦咖啡8.7出现--错误1920
  19. DVWA靶场-sql盲注
  20. 计算机开机错误62,联想电脑开机显示Error 1962 no operating system解决方法

热门文章

  1. 讯飞语音识别_讯飞输入法持续功能创新 语音输入最受用户认可
  2. 边城高级中学2021届高考成绩查询,湖南省花垣县边城高级中学2021届高三第二学期学科素养测试英语试题及答案.doc...
  3. linux 网络配置 阮一峰,计算机是怎样启动的? - 阮一峰的网络日志.pdf
  4. linux firefox xvfb,自动化测试之linux+xvfb+selenium+firefox+python测试环境搭建与测试
  5. 宏定义来实现一个结构体成员相对于该结构体首地址的偏移量
  6. java应用窗口大小_java 如何让程序窗口随屏幕大小改变 | 学步园
  7. basequickadapter详解_在kotlin中如何使用BaseQuickAdapter适配器
  8. android radiobutton 分组,Android 第十课——UI RadioButton
  9. java ee有哪些工具_JavaEE开发中最常用到的技术和工具汇总
  10. 数字图像处理——第七章 小波和多分辨处理