Visual Studio实现迷宫

这篇博客介绍了如何利用深度优先搜索和广度优先搜索算法来生成迷宫地图,并实现了玩家和电脑两种游戏模式。在C++中,通过递归和队列数据结构,分别展示了这两种方法的实现细节,包括地图初始化、路径探索和可视化更新等关键步骤。此外,还提供了游戏难度和地图大小的选择菜单,以及玩家和电脑的移动控制。
摘要由CSDN通过智能技术生成

利用深度优先及广度优先随机生成迷宫并实现玩家和电脑两种模式

头文件及宏定义

#include <iostream>
#include<stdio.h>
#include<windows.h>
#include<time.h>
#include<conio.h>


#define _CRT_SECURE_NO_WARNINGS
#define N 2	//关卡数目
#define M N*50	//地图大小	M*M
#define MAX 300//栈和队列的大小
#define UPDATETIME 30//刷新的时间间隔

变量及函数声明

int level = 0;//游戏等级
int Map[M + 1][M + 1] = {
    0 };
int count;//地图大小
int isHaveFind = 0;
int my_x, my_y;  //我的位置
void Initialize(int count);     //初始化地图
void Create1Power(int x, int y);   //递归深度优先
void Create2Power(int x,int y);    //广度优先
int InArea(int x, int y);        //判断是否在合法位置
void print(int x, int y);        //打印函数
int Run();                       //运行游戏
int Update(int id);
void menu();                    //菜单,选择难度和大小
void Pos(int x, int y);      //设置光标位置,决定要在什么位置输出
int Resort(int x, int y);   //电脑生成路线
int IsHaveNeighbor(int x, int y);//判断是否有邻居

设置方向数组,便于后面加减

int dir[4][2] = {
   
	{
   -1,0},
	{
   1,0},
	{
   0,-1},
	{
   0,1}
};

定义枚举类型

enum state
{
   
	wall,
	empty,
	self,
	end,
	testFlag
};

定义info与枚举一一对应

char info[][3] = {
   
	"■",//墙壁
	"  ",//空地
	"⊙",//玩家
	"☆",//终点
	"◇",//测试图案
	"○",//我也不知道会不会有用,先放着
};

深度优先:

void Create1Power(int x, int y)
{
   
	//这里我们不再依次选取四个方向探索,而是从剩余的方向里选出一个方向探索
	int i;
	while (IsHaveNeighbor(x, y))
	{
   
		i = rand() % 4;
		if (InArea(x + 2 * dir[i][0], y + 2 * dir[i][1]) &&
			Map[x + 2 * dir[i][0]][y + 2 * dir[i][1]] == empty)
		{
   
			Map[x + dir[i][0]][y + dir[i][1]] = testFlag;
			Map[x + 2 * dir[i][0]][y + 2 * dir[i][1]] = testFlag;
			//可视化
			print(x + dir[i][0], y + dir[i][1]);
			Sleep(UPDATETIME);
			Create1Power(x + 2 * dir[i][0], y + 2 * dir[i][1]);
		}
	}
}

广度优先:

typedef struct que
{
   
	int xList[MAX];
	int yList[MAX];
	int front, rear;
}Que;
void 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值