深度优先搜索算法在RPG游戏迷宫中的应用
在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游戏迷宫中的应用相关推荐
- 人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[0]——月晕础润
开场诗: 不儒不道又不仙,非神非圣也非贤.轻吐心头寻常语, 开辟文武一片天. 自表诗: 北冥沉渊有鲲鹏, 吞噬金乌戮真龙.一日扶摇凌天起,三千世界可横行. 小子"鹏凌三千",欲将心 ...
- 算法详解之深度优先搜索算法
14天阅读挑战赛 文章目录 1.深度优先搜索(Depth-First Search,DFS)介绍 2.深度优先搜索算法思想 3.深度优先搜索算法步骤: 4.深度优先搜索算法的应用 1.深度优先搜索(D ...
- 黑白迷宫问题——深度优先搜索算法
2021年,九月,小w发现自己位于一个巨大的由黑格和白格组成的n行m列的迷宫中. 小w只能从白格走到黑格或从黑格走到白格, 小w找到了ljf,她想知道自己从每一个格子出发不回头可以走多少个格子. 但是 ...
- opencv制作微信小游戏 最强连一连 辅助(2)--dfs深度优先搜索算法
深度优先搜索算法还是大二上数据结构的时候学的,工作以后都忘得差不多了.赶紧回来温习一下吧. 深度优先搜索的算法的 入参是一个地图(一般可以用二维数组表示)和一个起始点. 比如 这个就是一个5*5的二维 ...
- 学习在Unity中创建一个动作RPG游戏
游戏开发变得简单.使用Unity学习C#并创建您自己的动作角色扮演游戏! 你会学到什么 学习C#,一种现代通用的编程语言. 了解Unity中2D发展的能力. 发展强大的和可移植的解决问题的技能. 了解 ...
- Unity完全学习教程-从初学者到C#中的RPG游戏开发
打造3款游戏&学习Unity实用方式!从基础开始,以一个RPG游戏结束.使用Unity 2020和C# 你会学到: 通过创建酷游戏的实用方法 游戏开发的基础和核心概念 创建一个拥有大量功能的角 ...
- 求素数mdp c语言问题,C语言使用深度优先搜索算法解决迷宫问题(堆栈)
本文实例讲述了C语言使用深度优先搜索算法解决迷宫问题.分享给大家供大家参考,具体如下: 深度优先搜索 伪代码 (Pseudocode)如下: 将起点标记为已走过并压栈; while (栈非空) { 从 ...
- 使用深度优先搜索算法解决迷宫问题
英文 | https://bytefish.medium.com/use-depth-first-search-algorithm-to-solve-a-maze-ae47758d48e7 翻译 | ...
- 了解RPG游戏中剧情播放器的制作原理及流程
http://www.iamsevent.com/post/44.html 本章源码下载:http://www.iamsevent.com/zb_users/UPLOAD/dramaPlayer/My ...
最新文章
- 好文转贴(3) —— 每个应用程序都有一个恐怖地下室 & 两个最容易被人忽略的基本代码优化技术...
- vue项目的实用配置
- 09-CNN手写数字识别
- php暂停循环,在特定数量的递归循环后,PHP停止执行
- .net性能测试和优化1 基本概念
- IIC控制设计读写EEPROM
- 2017蓝桥杯C++B:日期问题(日期转字符串)
- 如何使用Tuxera NTFS for Mac禁用特定NTFS分区
- 笔记7:winfrom的一些知识点(一)
- 今晚8点 | 矛与盾的对决——神经网络后门攻防
- php 微信公众号超链接,微信公众帐号开发教程第8篇-文本消息中使用网页超链接_PHP教程...
- 【洛谷 P3191】 [HNOI2007]紧急疏散EVACUATE(二分答案,最大流)
- “以卡养卡”是个技术活,一般人玩不了,不一般的人玩的溜
- android怎么开机画面,安卓手机开机画面怎么修改?
- python删除重复文件代码
- mysql算gps距离_mysql JS 计算两GPS坐标的距离函数:
- 贝塞尔曲线 三维 拼接 matlab,贝塞尔曲线公式
- 安装麦咖啡8.7出现--错误1920
- DVWA靶场-sql盲注
- 计算机开机错误62,联想电脑开机显示Error 1962 no operating system解决方法
热门文章
- 讯飞语音识别_讯飞输入法持续功能创新 语音输入最受用户认可
- 边城高级中学2021届高考成绩查询,湖南省花垣县边城高级中学2021届高三第二学期学科素养测试英语试题及答案.doc...
- linux 网络配置 阮一峰,计算机是怎样启动的? - 阮一峰的网络日志.pdf
- linux firefox xvfb,自动化测试之linux+xvfb+selenium+firefox+python测试环境搭建与测试
- 宏定义来实现一个结构体成员相对于该结构体首地址的偏移量
- java应用窗口大小_java 如何让程序窗口随屏幕大小改变 | 学步园
- basequickadapter详解_在kotlin中如何使用BaseQuickAdapter适配器
- android radiobutton 分组,Android 第十课——UI RadioButton
- java ee有哪些工具_JavaEE开发中最常用到的技术和工具汇总
- 数字图像处理——第七章 小波和多分辨处理