您的位置:广东在线游戏网 > 游戏攻略 > 求大神用C++编写一个迷宫游戏程序-如何用C++编写一个迷宫游戏,高分求代码!!!!!!!!!!!!!

求大神用C++编写一个迷宫游戏程序-如何用C++编写一个迷宫游戏,高分求代码!!!!!!!!!!!!!

作者:广东在线游戏网日期:

返回目录:游戏攻略





是不是一本教材上的例子?
MAZE RUNNER?

#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <time.h>
using namespace std;
#define Height 25//高度,必须为奇数
#define Width 25 //宽度,必须为奇数
#define Wall 1 //用1表示墙
#define Road 0 //用0表示路
#define Start 2
#define End 3
#define up 72
#define down 80
#define left 75
#define right 78
#define flag 5
int map[Height+2][Width+2];
int x=2,y=1; //玩家当前位置,刚开始在入口处

class Migong
{
public:
void gotoxy(int x,int y); //移动坐标的函数声明
void shengcheng(int x,int y); //随机生成e79fa5e98193e78988e69d83333迷宫的函数声明
void display(int x,int y); //显示迷宫的函数声明
void chushi(); //初始化迷宫的函数声明
};

class Wanjia:public Migong //玩家类由迷宫类派生来
{
public:

void gonglue(int x,int y);
void shang(int x,int y);
void xia(int x,int y);
void zuo(int x,int y);
void you(int x,int y);
void game(); //游戏运行包括移动的函数声明
};

void Migong::gotoxy(int x,int y) //移动坐标 这是使光标 到(x,y)这个位置的函数.调用 COORD 需要#include.
{
COORD coord;
coord.X=x;
coord.Y=y;
SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord );
}

void Migong::shengcheng(int x,int y) //随机生成迷宫
{
int c[4][2]={0,1,1,0,0,-1,-1,0}; //四个方向 //数组c 0 1 向右
// 1 0 向下
// -1 0 向上
// 0 -1 向左

int i,j,t;
//将方向打乱
for(i=0;i<4;i++)
{
j=rand()%4; //随机生成j
t=c[i][0];c[i][0]=c[j][0];c[j][0]=t; //将c[i][0]和c[j][0]交换
t=c[i][1];c[i][1]=c[j][1];c[j][1]=t; //类似上
}
map[x][y]=Road; //当前位置设为路
for(i=0;i<4;i++) //沿四个方向设置
if(map[x+2*c[i][0]][y+2*c[i][1]]==Wall) //沿c[i][0]、c[i][1]方向前2步如果是墙
{
map[x+c[i][0]][y+c[i][1]]=Road; //让该方向前一步设为路
shengcheng(x+2*c[i][0],y+2*c[i][1]); //在该方向前两步继续生成地图 因为这里是递归函数,当执行到最后一点发现都不能走的时候,
//会返回到上一个函数,也就是上一个点,再次判断是否可以产生地图 ,知道地图上所有点被遍历完。
}
}
void Migong::display(int x,int y) //显示迷宫
{
gotoxy(2*y-2,x-1);
switch(map[x][y])
{
case Start:
cout<<"入";break; //显示入口
case End:
cout<<"出";break; //显示出口
case Wall:
cout<<"■";break; //显示墙
case Road:
cout<<" ";break; //显示路
case up:
cout<<"↑";break; //在攻略中的标记 下同
case down:
cout<<"↓";break;
case left:
cout<<"←";break;
case right:
cout<<"→";break;
case flag:
cout<<" ";break; //标记,防止攻略遍历时候无线循环
}
}

void Migong::chushi()
{
int i,j;
srand((unsigned)time(NULL)); //初始化随机种子
for(i=0;i<=Height+1;i++)
for(j=0;j<=Width+1;j++)
if(i==0||i==Height+1||j==0||j==Width+1) //初始化迷宫 默认四周是路
map[i][j]=Road;
else map[i][j]=Wall;
shengcheng(2*(rand()%(Height/2)+1),2*(rand()%(Width/2)+1)); //从随机一个点开始生成迷宫,该点行列都为偶数
for(i=0;i<=Height+1;i++) //边界处理 把最开始默认为路的堵上,以免跑出迷宫
{
map[i][0]=Wall;
map[i][Width+1]=Wall;
}
for(j=0;j<=Width+1;j++) //边界处理
{
map[0][j]=Wall;
map[Height+1][j]=Wall;
}
map[2][1]=Start; //给定入口
map[Height-1][Width]=End; //给定出口
for(i=1;i<=Height;i++) //i初始为1,结束为height,以免画出外围
for(j=1;j<=Width;j++) //画出迷宫 同上
display(i,j);
}

void Wanjia::game()
{
int x=2,y=1; //玩家当前位置,刚开始在入口处
int c; //用来接收按键
while(1)
{
gotoxy(2*y-2,x-1);
cout<<"☆"; //画出玩家当前位置
if(map[x][y]==End) //判断是否到达出口
{
gotoxy(30,24); //到达此坐标
cout<<"到达终点,按任意键结束";

getch();
break;
c=getch();
}
if(c!=-32)
{
c=getch();
switch(c)
{
case 72: //向上走
if(map[x-1][y]!=Wall)
{
display(x,y);
x--;

}
break;
case 80: //向下走
if(map[x+1][y]!=Wall)
{
display(x,y);
x++;

}
break;
case 75: //向左走
if(map[x][y-1]!=Wall)
{
display(x,y);
y--;

}
break;
case 77: //向右走
if(map[x][y+1]!=Wall)
{

display(x,y);
y++;

}
break;
case 112: //按下P
gonglue(2,1);break; //如果按下P执行攻略函数
}
}
}
}
void Wanjia::shang(int x,int y)
{
if(map[x][y]==End) //判断是否到达出口
{
gotoxy(52,20); //到达此坐标
cout<<"到达终点,按任意键结束";

getch();
exit(0);
}
if(map[x-1][y]!=Wall&&map[x-1][y]!=up&&map[x-1][y]!=down&&map[x-1][y]!=left&&map[x-1][y]!=right&&map[x-1][y]!=flag)
{ //当移动后的下一个位置没有被走过且不是墙

map[x][y]=up;
display(x,y);
x--;
gonglue(x,y); //递归,攻略下一个点
}
}
void Wanjia::xia(int x,int y)
{
if(map[x][y]==End) //判断是否到达出口
{
gotoxy(52,20); //到达此坐标
cout<<"到达终点,按任意键结束";

getch();
exit(0);
}
if(map[x+1][y]!=Wall&&map[x+1][y]!=up&&map[x+1][y]!=down&&map[x+1][y]!=left&&map[x+1][y]!=right&&map[x+1][y]!=flag) //当移动后的下一个位置没有被走过且不是墙
{

map[x][y]=down;
display(x,y);
x++;
gonglue(x,y); //递归,攻略下一个点
}
}
void Wanjia::zuo(int x,int y)
{
if(map[x][y]==End) //判断是否到达出口
{
gotoxy(52,20); //到达此坐标
cout<<"到达终点,按任意键结束";
getch();
exit(0);
}
if(map[x][y-1]!=Wall&&map[x][y-1]!=up&&map[x][y-1]!=down&&map[x][y-1]!=left&&map[x][y-1]!=right&&map[x][y-1]!=flag) //当移动后的下一个位置没有被走过且不是墙
{

map[x][y]=left;
display(x,y);
y--;

gonglue(x,y); //递归,攻略下一个点
}
}
void Wanjia::you(int x,int y)
{
if(map[x][y]==End) //判断是否到达出口
{
gotoxy(52,20); //到达此坐标
cout<<"到达终点,按任意键结束";
getch();
exit(0);
}
if(map[x][y+1]!=Wall&&map[x][y+1]!=up&&map[x][y+1]!=down&&map[x][y+1]!=left&&map[x][y+1]!=right&&map[x][y+1]!=flag) //当移动后的下一个位置没有被走过且不是墙
{

map[x][y]=right;
display(x,y);
y++;
gonglue(x,y); //递归,攻略下一个点
}
}
void Wanjia::gonglue (int x,int y)
{
gotoxy(2*y-2,x-1);
cout<<"☆"; //画出玩家当前位置
if(map[x][y]==End) //判断是否到达出口
{
gotoxy(52,20); //到达此坐标
cout<<"到达终点,按任意键结束";
getch();
exit(0);
}
shang(x,y); //上下左右
xia(x,y);
zuo(x,y);
you(x,y);
map[x][y]=flag; //当上下左右都无法走的时候,即为死路,因为递归函数开始向后,所以讲死路点值置为flag,变成无形之墙。
display(x,y);
}

int main()
{
cout<<" 移动迷宫 "<<endl;
cout<<"--------------------"<<endl;
cout<<"欢迎来到移动迷宫游戏"<<endl;
cout<<"--------------------"<<endl;
cout<<"游戏说明:给定一出口和入口"<<endl;
cout<<"玩家控制一个五角星(☆)从入口走到出口"<<endl;
cout<<"系统会记录你所走的步数"<<endl;
cout<<"按回车进入游戏";
cout<<"(按下P键可以获得攻略。)";
getch();
system("cls"); //清屏函数 ,清除开始界面
Wanjia w1;
w1.chushi();
w1.game(); //开始游戏
// w1.gonglue(2,1); //功略显示
getch();
return 0;
}

————————————————
版权声明:本文为CSDN博主「失落之风」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41572774/java/article/details/84035598
喜欢的源码拿走,小赞赞留下,蟹蟹。

相关阅读

关键词不能为空

标签导航

数码巧克力出品手机游戏 数码巧克力手机游戏 数码巧克力的介绍 哪位大虾玩过好玩的数码巧克力的游戏,发点给我吧!谢谢了,大神... 暗黑2安达利尔和暗黑3里面的安德莉亚是一个人么 暗黑2里面 暗黑破坏神是 破坏之王 巴尔是毁灭之王 莫非斯托... 暗黑3每一幕最终BOSS的名字、出处 求主角把暗黑里的蜘蛛女王安达利尔收了后宫的小说,随身游戏在异... wow灾难法衣套装在哪掉 魔兽世界术士509邪煞5件套怎么获得? 魔兽世界邪蛛的燃烧法衣怎么获得 wow邪烟套装6件分别在刷什么副本获得? 风神到底是吃力量还是吃物理攻击 DNF风神是加力量好还是加物理攻击好 王者荣耀刺客带暴击还是物理攻击好 dnf加攻击力好还是加力量好 求大神用C++编写一个迷宫游戏程序 c++编写一个迷宫游戏,求完整代码最好能有适当的注释 用C++语言编写一个迷宫游戏,要求如下 求个用C++编写的走迷宫小游戏 童年的游戏 作文 急!!!!!!!!!!!!!!!!!!!!... 关于童年游戏的作文600字左右 童年游戏作文500字 难忘的童年游戏 作文 500字 愤怒的小鸟里的所有的鸟名称 愤怒的小鸟里各种鸟的名字 愤怒的小鸟都叫什么名字 DNF全职业二觉宠物大全 全职业二觉宠物有哪些 dnf二觉宠物哪个萌 DNF女格斗家二觉宠物哪个好 二觉宠物属性介绍 dnf二觉 宠物 值得购买吗? 如果值得 买哪个礼包性价比高... 求一个现实中整人的小游戏 求一个整人游戏的网址 整人迷宫游戏 有一个游戏是整人的,是什么游戏? 求停电少女と羽虫のオーケストラ资源~!! 何よりみんなで五泊六日过ごしたのがとても楽しかったです 寺岛拓笃的音乐作品 下野纮的音乐作品 dnf风暴女皇堆力量还是智力好 dnf暴风女皇需要独立攻击力还是物理攻击力?合天空套是随便合... 地下城女鬼剑剑皇堆什么?力量还是高攻,需不需要堆独立,属强堆... DNF暴风女皇终极装备及武器、首饰暴力刷图加点 求迷画之塔3 完整无BUG版,谢谢 求谜画之塔3无bug版下载链接 急求迷画之塔3中文无bug版,谢谢!123277746@qq... 求《迷画之塔》2,3&#8203;无bug版 DNF2017毒王改版后强不强 DNF2017毒王改版技能详... dnf毒王技能的排列顺序,高手帮忙给一下建议 Dnf毒王职业技能介绍 DNF毒王任何加技能过程 求一个描写儿时游戏的作文100字 童年趣事的作文比100字关于玩游戏的 儿时玩过的游戏作文60字