C++迷宫游戏模板

今天我们来看看迷宫游戏如何做

步骤
绘制地图
控制玩家移动
主函数部分

第一部分:绘制地图

想绘制一张地图,首先要明确地图中的符号
比如我的:
0:墙
2:玩家
3:空道路
6:终点

int mapn[10][7]={//注意:定义的大小要和绘制的地图一样
	0,0,0,0,0,0,0,
	0,3,3,3,3,3,6,
	0,3,3,3,0,3,0,
	0,3,0,3,0,0,0,
	0,3,3,3,3,0,0,
	0,3,3,3,0,3,0,
	0,3,3,3,3,0,0,
	0,3,3,3,0,0,0,
	0,3,2,3,3,3,0,
	0,0,0,0,0,0,0
};//地图部分
void show(int h,int l){
	system("cls");//每次要清屏
	for(int i=0;i<h;++i){
		for(int j=0;j<l;++j){
			switch(mapn[i][j]){
				case 0:cout<<"*";break;
				case 2:cout<<"@";break;
				case 3:cout<<" ";break;
				case 6:cout<<"#";break;
				//符号可自定
			}//一个个遍历
		}cout<<endl;
	}
}//绘制部分

地图可自由发挥


第二部分:控制玩家移动

主要思路是:得到一个字符,然后对字符进行遍历,然后对位置进行更新,还需要将玩家的位置进行记录
注意:要对是否会碰到边或终点进行判断

int x,y;//x:行,y:列
void game(){
	char c=getch();//头文件 conio.h
	switch(c){
		case 'a':
			if(mapn[x][y-1]==0)break;//如果碰到边就不执行
			if(mapn[x][y-1]==6)sl=1;//如果碰到终点就记录
			y--;
			mapn[x][y]=2;
			mapn[x][y+1]=3;
			break;
		case 's':
			if(mapn[x+1][y]==0)break;
			if(mapn[x+1][y]==6)sl=1;
			mapn[x][y]=3;
			x++;
			mapn[x][y]=2;
			break;
		case 'd':
			if(mapn[x][y+1]==0)break;
			if(mapn[x][y+1]==6)sl=1;
			y++;
			mapn[x][y]=2;
			mapn[x][y-1]=3;
			break;
		case 'w':
			if(mapn[x-1][y]==0)break;
			if(mapn[x-1][y]==6)sl=1;
			x--;
			mapn[x][y]=2;
			mapn[x+1][y]=3;
			break;
	}
}//移动函数

第三部分:主函数部分

功能部分都以编写完毕,现在来看主函数部分:
主要是一个死循环再加一个移动和一个输出

int main(){
	int h=10,l=7;//行,列
	show(h,l);//先输出地图
	while(1){
		if(kbhit()){//当按下按键 头文件:conio.h
			game();
			show(h,l);//移动后再显示
		}
		if(sl){//如果赢了就做反应
			system("cls");
			cout<<"YOU WIN!\n";
			system("pause");
			exit(0);//==return 0;
		}
	}
}//主函数

好了讲解完毕
完整模板代码如下

#include<bits/stdc++.h>
#include<conio.h>
using namespace std;
int x=8,y=2;//玩家的位置:行和列 
bool sl=0;//是否胜利 
int mapn[10][7]={//注意:定义的大小要和绘制的地图一样
	0,0,0,0,0,0,0,
	0,3,3,3,3,3,6,
	0,3,3,3,0,3,0,
	0,3,0,3,0,0,0,
	0,3,3,3,3,0,0,
	0,3,3,3,0,3,0,
	0,3,3,3,3,0,0,
	0,3,3,3,0,0,0,
	0,3,2,3,3,3,0,
	0,0,0,0,0,0,0
};//地图部分
void show(int h,int l){
	system("cls");//每次要清屏
	for(int i=0;i<h;++i){
		for(int j=0;j<l;++j){
			switch(mapn[i][j]){
				case 0:cout<<"*";break;
				case 2:cout<<"@";break;
				case 3:cout<<" ";break;
				case 6:cout<<"#";break;
				//符号可自定
			}//一个个遍历
		}cout<<endl;
	}
}//绘制部分
void game(){
	char c=getch();//头文件 conio.h
	switch(c){
		case 'a':
			if(mapn[x][y-1]==0)break;//如果碰到边就不执行
			if(mapn[x][y-1]==6)sl=1;//如果碰到终点就记录
			y--;
			mapn[x][y]=2;
			mapn[x][y+1]=3;
			break;
		case 's':
			if(mapn[x+1][y]==0)break;
			if(mapn[x+1][y]==6)sl=1;
			mapn[x][y]=3;
			x++;
			mapn[x][y]=2;
			break;
		case 'd':
			if(mapn[x][y+1]==0)break;
			if(mapn[x][y+1]==6)sl=1;
			y++;
			mapn[x][y]=2;
			mapn[x][y-1]=3;
			break;
		case 'w':
			if(mapn[x-1][y]==0)break;
			if(mapn[x-1][y]==6)sl=1;
			x--;
			mapn[x][y]=2;
			mapn[x+1][y]=3;
			break;
	}
}//移动函数
int main(){
	int h=10,l=7;//行,列
	show(h,l);//先输出地图 
	while(1){
		if(kbhit()){//当按下按键 头文件:conio.h
			game();
			show(h,l);//移动后再显示
		}
		if(sl){//如果赢了就做反应
			system("cls");
			cout<<"YOU WIN!\n";
			system("pause");
			exit(0);//return 0;
		}
	}
}//主函数

点个赞再走呗QWQ
蒟蒻定当感激不尽

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值