计算机软件技术实习 迷宫游戏(一)
主要内容
1.迷宫游戏是非常经典的游戏,在该题中要求随机生成一个迷宫,并求解迷宫。
2.要求查找并理解迷宫生成的算法,并尝试用两种不同的算法来生成随机的迷宫。
3.要求迷宫游戏支持玩家走迷宫,和系统走迷宫路径两种模式。玩家走迷宫,通过键盘方向键控制,并在行走路径上留下痕迹;系统提示迷宫路径要求基于A*算法实现,输出玩家当前位置到迷宫出口的最优路径。设计交互友好的游戏图形界面。
需解决的问题
迷宫图形界面的显示
随机迷宫生成
“玩家”的移动
迷宫自动寻路
相关知识和方法
1.prime最小生成树算法生成随机型迷宫
1.1 连通图
在图论中,连通图基于连通的概念。在一个无向图 G 中,若从顶点i到顶点j有路径相连(当然从j到i也一定有路径),则称i和j是连通的。如果 G 是有向图,那么连接i和j的路径中所有的边都必须同向。如果图中任意两点都是连通的,那么图被称作连通图。如果此图是有向图,则称为强连通图(注意:需要双向都有路径)。图的连通性是图的基本性质。
1.2 (最小)生成树
基本释义:
首先定义一个无向连同带权图
G=(V,E,W) w(e)∈W是边e的权 (其中V表示顶点集合,E表示边集,W表示权)
G的一颗生成树T是包含G的所有顶点的树,树中各边的权之和W(T)称为树的权,具有最小权的生成树称为G的最小生成树
实例
G=(V,E,W) ,V={1,2,3,4,5,6}
E={{1,2},{1,3},{1,4},{2,3},{2,5},{3,4},{3,5},{3,6},{4,6},{5,6}} 如下图所示
最小生成树(权值最小)下图所示
生成树的性质:
设G是n阶的连通图
T是G的生成树当且仅当T无圈且有n-1条边(无圈:没有回路) 如下图
如果T是G的生成树,e∈T,那么T∪{e}含一个圈c 如下图
去掉c的任意一条边,就得到G的另外一棵树T' 如下图
1.3 prime算法
普里姆算法在找最小生成树时,将顶点分为两类,一类是在查找的过程中已经包含在树中的(假设为 A 类),剩下的是另一类(假设为 B 类)。
对于给定的连通网,起始状态全部顶点都归为 B 类。在找最小生成树时,选定任意一个顶点作为起始点,并将之从 B 类移至 A 类;然后找出 B 类中到 A 类中的顶点之间权值最小的顶点,将之从 B 类移至 A 类,如此重复,直到 B 类中没有顶点为止。所走过的顶点和边就是该连通图的最小生成树。
例如,通过普里姆算法查找上图的最小生成树的步骤为:
假如从顶点A出发,顶点 B、C、D 到顶点 A 的权值分别为 2、4、2,所以,对于顶点 A 来说,顶点 B 和顶点 D 到 A 的权值最小,假设先找到的顶点 B:
继续分析顶点 C 和 D,顶点 C 到 B 的权值为 3,到 A 的权值为 4;顶点 D 到 A 的权值为 2,到 B 的权值为无穷大(如果之间没有直接通路,设定权值为无穷大)。所以顶点 D 到 A 的权值最小:
最后,只剩下顶点 C,到 A 的权值为 4,到 B 的权值和到 D 的权值一样大,为 3。所以该连通图有两个最小生成树:
2.A*算法
2.1 广度(宽度)优先搜索算法(BFS)
广度(宽度)优先搜索算法(BFS)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。
2.2 A*算法
项目的关键是基于A算法生成迷宫路径,所以我们先要搞懂什么是A算法已经怎样来实现A算法。
与广度优先遍历不一样的是,A算法在每一轮循环的时候,不会去探索所有的边界方块,而会去选择当前"代价最小"的方块进行探索,这就具有了方向性。这里的"代价"我们分为:预估代价和当前代价。
当前代价(F-cost)**从起点A移动到终点B的移动代价,沿着到达该方格而生成的路径。
预估代价(G-cost):从起点A移动到终点B的估算成本。这个通常被称为试探法,有点让人混淆。为什么这么叫呢,因为这是个猜测。直到我们找到了路径我们才会知道真正的距离,因为途中有各种各样的东西(比如墙壁,水等)。最常用到的预估代价有欧拉距离跟曼哈顿距离,为了效率,我们通常使用曼哈顿距离。
总代价:总代价=当前代价+预估代价
A*算法流程
1. 把起点加入 open list 。
2. 重复如下过程:
a. 遍历 open list ,查找 F 值最小的节点,把它作为当前要处理的节点。
b. 把这个节点移到 close list 。
c. 对当前方格的 8 个相邻方格的每一个方格:
◆ 如果它是不可抵达的或者它在 close list 中,忽略它。否则,做如下操作。
◆ 如果它不在 open list 中,把它加入 open list ,并且把当前方格设置为它的父亲,记录该方格的 F,G 和 H 值。
◆ 如果它已经在 open list 中,检查这条路径 ( 即经由当前方格到达它那里 ) 是否更好,用 G 值作参考。更小的 G 值表示这是更好的路径。如果是这样,把它的父亲设置为当前方格,并重新计算它的 G 和 F 值。如果你的 open list 是按 F 值排序的话,改变后你可能需要重新排序。
d. 停止,当你:
◆ 把终点加入到了 open list 中,此时路径已经找到了,或者
◆ 查找终点失败,并且 open list 是空的,此时没有路径。
3. 保存路径。从终点开始,每个方格沿着父节点移动直至起点,这就是你的路径。
参考资料
普里姆算法(Prim算法)求最小生成树
http://data.biancheng.net/view/40.html
A星算法详解
https://blog.csdn.net/hitwhylz/article/details/23089415
生成树
https://blog.csdn.net/qq_39248122/article/details/91873840
计算机软件技术实习 迷宫游戏(一)相关推荐
- 计算机软件技术实习项目二(一) 贪吃蛇项目准备
计算机软件技术实习项目二(一) 贪吃蛇项目准备 文章目录 计算机软件技术实习项目二(一) 贪吃蛇项目准备 一.贪吃蛇介绍 二.开发工具 三.实现原理 1.消息与消息队列 2.消息映射 3.设备环境 4 ...
- 计算机软件技术实习02
计算机软件技术实习 第二周学习记录 实验1--支持算术表达式求解的计算器 前言 上周说到,我选择用MFC来完成本次实验.那么,现在我来总结一下本周的学习成果. 退格功能的实现 由于我设置的文本框是通过 ...
- 计算机软件技术实习预习日志
计算机软件技术实习预习日志 目录 计算机软件技术实习预习日志 文章目录 实验项目 一.实验要求 二.开发工具 三.实验原理 1.后缀表达式计算法 前缀表达式 中缀表达式 后缀表达式 中缀表达式转换为后 ...
- 计算机软件技术实习 项目一 简单计算器的实现(实验准备)1-(1)
目录 一.需求分析 二.重难点 三.编程语言 四.开发工具/平台 一.需求分析 1. 能通过设计的按钮控件输入并实现算术表达式,表达式在文本框中显示,运算结果输出显示: 2.保存和浏览历史运算记录: ...
- 计算机软件技术实习01
计算机软件技术实习 第一周学习记录 实验1--支持算术表达式求解的计算器 前言 这是我第一次真正接触到计算机软件技术的实战内容,说实话我觉得这次的实习任务对我来说非常具有挑战性,有很多知识都是我目前还 ...
- 22-23学年计算机软件技术实习1——计算器
目录 学习目标 1.1准备工作 1.1.1搭建QT开发环境 1.2用户界面UI设计 1.2.1显示模块 1.2.2按键模块 1.3功能实现 1.3.1输入输出反馈 1.3.2退格与清除功能 1.3.3 ...
- 计算机软件技术实习实验一
实验内容: (1) 学习图形界面的设计,创建基于对话框的应用程序,添加按钮.编辑框等控件: (2) 能通过设计的按钮控件输入并实现简单算术运算,要求表达式在编辑框中显示, 能将运算结果,输出在编辑框内 ...
- 计算机软件技术实习:计算器(1)
1.1 所用知识点 Java Swing 界面编程 计算器逻辑运算实现 1.2 基本思路 (1)设置计算器显示窗口 (2)数学运算基本法则:先乘除后加减 (a)正确处理输入字符串判断后进行一一计算 ( ...
- 计算机软件实习日志(三)基于 A*搜索算法迷宫游戏开发
文章目录 界面展示 前言 一.实验要求? 二.实验准备 三.设计思路 1.A*算法的理解 算法描述 简化搜索区域 简化地图 概述算法步骤 进一步解释 具体寻路过程 F值计算方式: 2.开发思路 使用Q ...
最新文章
- ubuntu lamp配置多域名服务器
- 证券一哥炼成记——郭树清
- linux fedora kde桌面设置全局显示字体大小
- coding pages绑定freenom.com域名
- 把经典的ABAP webdynpro应用配置到SAP Fiori Launchpad里
- 前端学习(2140):webpack的安装
- linux C语言调用Intel处理器CPUID指令的实例
- 无法安装操作系统,An unexpected error(0) occurred at line 1768 in f:\nt2\base\boot\setup\arcdisp.c....
- 各地的磁倾角_中国各地磁偏角
- win10下 你需要来自trustedinstaller的权限 修改权限
- Eclipse启动出错误:An error has occurred.See the log file。。。。
- 计算机及数码产品营销课后题,职业教育课程改革创新系列教材:计算机及数码产品营销...
- Makefile与前缀后缀相关函数suffix、basename、addsuffix、addprefix
- 自然语言处理--加载使用facebook的预训练 fastText 模型wiki-news-300d-1M.vec
- Html读取本地文件夹下图片并显示的示例代码
- 英语语法 定冠词与专有名词
- android os 1.5 下载地址,技德Remix OS 1.5发布 适配Android 5.0
- 改版后的PMP值得考吗?
- RET RETF IRET IRETD 指令的不同
- 制造业MES生产管理系统程序代码 MES源码