今天我们来看看迷宫游戏如何做
步骤 |
---|
绘制地图 |
控制玩家移动 |
主函数部分 |
第一部分:绘制地图
想绘制一张地图,首先要明确地图中的符号
比如我的:
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
蒟蒻定当感激不尽