生成迷宫/C++

小时候,都喜欢玩迷宫,现在的电脑上还可以玩3D类迷宫。
那么每次开始游戏时,迷宫里密密麻麻的道路是怎么生成的呢?
在代码里面,我们把它们想象成一堆像素小格子,当两个格子连在一起,就像一堵墙,那一圈格子就是一间小房间,房间有门,对应的门就没有墙壁。所以生成迷宫地图,就是一个挖墙造门的过程。
在这里插入图片描述

思路:
1.首先假设迷宫场地是充满墙壁没有道路的。我们的工作其实就是把迷宫“挖”出来。不妨把开始时的迷宫看成一些小的“房间”,每个“房间”四面都被墙壁包围。画迷宫的过程实际就是从一个房间随机走到另一个房间,走的过程中把墙壁“挖掉”。定义一个类,这个类的每个对象代表迷宫里的一个格子,里面存放了这块墙壁或房间是否被挖过,以及它是否是一个“房间”。选好一个房间作为起点(我选的左上角),然后开始随机挖。

2.到达一个房间时判断四周房间的情况。按照四个方向判断。如果其中一个方向的隔壁房间挖过了,就不要把这个方向记录下来。如果四周都不能挖了,就一路退回之前能挖的地方。再次随机一个新方向,继续挖。(有点类似走迷宫的过程)

程序中记录道路用了C++STL里的栈。

#include <iostream>
#include <ctime>
#include <cstdlib>
#include <stack>
#include <vector>
#define M 25   //迷宫的规模
using namespace std;class Grid{
public:bool cell, dig;
};
//迷宫格子类型,记录了是否被挖过
Grid maze[M][M];
stack<int> row_s, col_s;
//用来存放路径的栈
void Init(){for(int i=0; i<M; i++){for(int j=0; j<M; j++){maze[i][j].dig=false;if(i%2!=0 && j%2!=0)maze[i][j].cell=true;}}row_s.push(1);    col_s.push(1);srand(time(0));
}
//初始化迷宫格子
int DirRand(){vector <int> dirlist;        //用来记录可选择的方向int result=0;int row=row_s.top(), col=col_s.top();//0 up, 1 down, 2 left, 3 rightif(row-2>0 && !maze[row-2][col].dig) dirlist.push_back(0);if(row+2<M-1 && !maze[row+2][col].dig) dirlist.push_back(1);if(col-2>0 && !maze[row][col-2].dig) dirlist.push_back(2);if(col+2<M-1 && !maze[row][col+2].dig) dirlist.push_back(3);if(dirlist.size()==0) result=-1;else result=dirlist[rand()%((int)dirlist.size())];return result;
}
//判断周围情况,没有可挖的格子时返回-1
void GenMaze(){while(!row_s.empty() && !col_s.empty()){int dir=DirRand();int row=row_s.top(), col=col_s.top();if(dir!=-1){     //前进if(dir==0){maze[row-2][col].dig=maze[row-1][col].dig=true;row_s.push(row-2);  col_s.push(col);}else if(dir==1){maze[row+2][col].dig=maze[row+1][col].dig=true;row_s.push(row+2);  col_s.push(col);}else if(dir==2){maze[row][col-2].dig=maze[row][col-1].dig=true;row_s.push(row);    col_s.push(col-2);}else if(dir==3){maze[row][col+2].dig=maze[row][col+1].dig=true;row_s.push(row);    col_s.push(col+2);}}else{row_s.pop();    col_s.pop();        //后退}}
}void OutMaze(){      //输出迷宫for(int i=0; i<M; i++){for(int j=0; j<M; j++){if(maze[i][j].cell || maze[i][j].dig)cout<<"  ";else cout<<"##";        //为了保证对齐,墙壁和道路宽都是2个字符}cout<<endl;}
}int main(){Init();GenMaze();OutMaze();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449117.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

selenium操作浏览器的前进和后退

前进关键字&#xff1a;driver.forward() 后退关键字&#xff1a;driver.back() 测试对象&#xff1a;1、https://www.baidu.com/ 2、https://www.sogou.com/ 实例代码&#xff1a; 1 # 导入测试所需的库或者模块2 from selenium import webdriver3 import unittest4 import ti…

阿里云 ECS服务器 开放 8080 端口 -- 图解

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 由于 kong-dashboard 的端口是映射到 8080 的&#xff0c;服务已启动成功却一直访问不了&#xff0c;最后才想起端口没有开放 ... 1. 登…

.NET高级代码审计(第三课)Fastjson反序列化漏洞

0X00 前言 Java中的Fastjson曾经爆出了多个反序列化漏洞和Bypass版本&#xff0c;而在.Net领域也有一个Fastjson的库&#xff0c;作者官宣这是一个读写Json效率最高的的.Net 组件&#xff0c;使用内置方法JSON.ToJSON可以快速序列化.Net对象。让你轻松实现.Net中所有类型(对象,…

IDEA:No SLF4J providers were found.

如果您是用IDEA 的 maven 写的 将slf4j的导入包 更改 为下列代码 <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.8.0-beta2</version></dependency><dependency><groupId&…

没变强是因为你太舒服(图)

职业生涯很长&#xff0c;对企业而言&#xff0c;它需要你成为一个专才&#xff0c;但从职业发展来看&#xff0c;你需要成为一个全才&#xff0c;方能适应社会的变化。 阻碍你成为全才的不良习惯有很多&#xff0c;有时候我们喜欢趋利避害&#xff0c;拖延症更是让自己定下来…

解决:DuplicateMappingException: Table [xx] contains physical column name referred to by multiple ... .

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 报错如题&#xff1a; Caused by: org.hibernate.DuplicateMappingException: Table [xxx] contains physical column name [comment] …

路由进阶

1>路由组件传参 在组件中使用 $route 会使之与其对应路由形成高度耦合&#xff0c;从而使组件只能在某些特定的 URL 上使用&#xff0c;限制了其灵活性。 解决方法: 1.1若是动态匹配页面&#xff0c;只需要在路由参数中加入props:true即可。 import Home from "/views/…

物联网摄像机通讯_网络调试助手

1&#xff0c;文档目的&#xff1a; 了解对于物联网网关与摄像机协议联动&#xff0c;进行报警抓图&#xff0c;智能检测&#xff0c;OSD叠加&#xff0c;语音播报控制等联动及数据交互。 适用产品&#xff1a;物联网网关 &#xff08;OSD是屏幕显示技术的一种&#xff09; 2…

TOJ 3046: 招商银行网络系统

3046: 招商银行网络系统 Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal Submit: 12 Accepted:3 Description 虽然招商银行的网络安全已经做得非常完善&#xff0c;但是天有不测风云&#xff0c;招商银行内部网络系统的一台服务器意外感…

vue打包成app后,背景图片不显示

问题&#xff1a; 在使用npm run build 打包后&#xff0c; 如果在页面中使用img标签引入&#xff0c;打包后的路径是由index.html开始访问的&#xff0c;真正访问的是Static/img/图片名&#xff0c; 是正确的&#xff0c; 但是写在css 中的background: url("../../assets…

Docker 环境下如何 安装 Zookeeper

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 第一步&#xff1a;首先下载Zookeeper的镜像文件&#xff1a; 从仓库中pull 这个zookeeper镜像&#xff1a;docker pull jplock/zookeep…

office教程:教你Excel 怎么样使用信息函数

Excel如何使用信息函数信息函数专门用来返回某些指定单元格或区域的信息&#xff0c;例如获取文件路径、单元格格式信息或操作环境信息等。一&#xff0c;使用CELL函数返回引用单元格信息工作表中的每一个单元格都有对应的单元格格式、位置和内容等信息&#xff0c;在Excel中可…

二叉查找树,红黑树

漫画算法&#xff1a;什么是红黑树&#xff1f;&#xff08;适合初学红黑树小白简单易懂&#xff09; 2018年09月14日 09:55:54 苏杭-Java工程师 阅读数&#xff1a;494———————————— 二叉查找树&#xff08;BST&#xff09;具备什么特性呢&#xff1f; 1.左子树上所…

【算法】快排

快速排序 其利用的思想就是分治思想&#xff0c;最开始先从数组中随机选择一个元素p&#xff08;为什么随机下面解释&#xff09;&#xff0c;然后以这个元素对数组中的元素进行分类&#xff0c;数组左侧都是小于p的元素&#xff0c; 右侧都是大于等于p的元素。这样就让数组分成…

19_05_01校内训练[polygon]

题意 把一个边长为1的正n边形放到一个正m边形中&#xff0c;要求m边形完全覆盖n边形&#xff0c;可以有交点&#xff0c;并且中心重合。求正m边形的最小边长&#xff0c;至少精确到6位。要求logn计算。 思考 先考虑m|n的情况。 我们知道&#xff0c;正m边形的边长与可行区域&am…

[转]numpy中的np.max 与 np.maximum区别

转自&#xff1a;https://blog.csdn.net/lanchunhui/article/details/52700895 转载于:https://www.cnblogs.com/xianhan/p/10609319.html

win10 php7+apache2.4的配置以及遇到的问题及解决

首先进入PHP官网下载php7的版本,我下的是PHP7.1.28,在PHP的下载页面注意划红线和绿线的地方(我画的) 1.画了红线的意思是请使用由apache lounge提供的编译文件,也就是点进蓝色Apache lounge这里下载. 2.画了绿色的线的意思是用Apache的话你必须使用Thread Safe(线程安全)的PHP…

AI一周热闻:华为豪掷3.3亿剑桥买地,自建光芯片工厂;比特大陆IPO失败,组织架构调整...

导读 华为豪掷3.3亿剑桥买地&#xff0c;自建光芯片工厂苹果春季发布会无硬件发布&#xff0c;转型之心迫切比特大陆IPO失败&#xff0c;组织架构调整&#xff0c;王海超任CEO特斯拉起诉小鹏汽车员工窃取商业机密英伟达发布GauGAN&#xff0c;线条色块秒变逼真图像用机器学习防…

虚拟环境vitualenv的使用

Python3开发之虚拟环境virtualenv与virtualenvwrapper 在使用 Python 开发的过程中&#xff0c;工程一多&#xff0c;难免会碰到不同的工程依赖不同版本的库的问题&#xff1b; 亦或者是在开发过程中不想让物理环境里充斥各种各样的库&#xff0c;引发未来的依赖灾难。 此时&am…

银行各类理财收益渐涨 各类宝钱景尚不明朗

这个春天&#xff0c;投资似乎进入了一个好事多磨的阶段。央行一反先前支持的态度&#xff0c;开始对互联网理财念起了“紧箍咒”。一时间&#xff0c;各种“宝”的命运变得扑朔迷离起来。尽管各种“宝”声明&#xff1a;不受央行政策影响。而投资者内心的担忧&#xff0c;恐怕…