用easyx图形库做一个简单的c++小游戏–迷宫游戏
开发环境:visual c++6.0
库:easyx图形库 下载地址>>> https://easyx.cn/downloads/
里面用到了文件操作的知识,就是把迷宫的地图根据0,1的格式写入txt文件中,然后再导入迷宫地图。
成果展示:
附上代码:
first_maze.txt文件
第一行是迷宫的列数与行数。第二行开始是迷宫的地图,其中的1代表墙壁,0代表道路。
16 18
0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0
0 0 1 0 0 1 1 0 1 0 1 1 0 1 0 0
0 0 1 0 1 0 1 0 0 0 1 0 0 1 0 0
0 0 0 0 1 0 1 0 0 0 1 0 1 1 0 0
0 0 0 0 1 0 1 1 1 1 0 0 1 1 0 0
1 1 1 1 1 0 1 0 0 0 1 0 1 0 0 0
0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0
1 1 0 0 1 0 1 0 1 0 1 0 0 0 1 0
0 0 0 1 1 0 1 0 1 0 1 0 0 0 1 0
0 0 1 0 0 0 1 0 1 0 1 1 1 1 0 0
0 1 1 0 1 0 1 0 1 0 0 0 0 1 0 0
0 0 1 0 1 1 1 0 1 0 1 1 1 1 1 0
0 0 1 1 1 1 1 0 1 0 0 1 1 1 0 0
0 0 1 0 0 0 1 0 1 0 0 0 1 0 0 1
0 0 0 0 1 0 0 0 1 1 0 0 1 0 1 1
0 0 0 1 1 1 1 1 0 1 0 0 0 0 0 1
0 0 1 1 1 1 1 1 0 1 1 0 0 0 1 1
0 1 1 0 0 0 0 1 0 1 1 1 0 1 1 1
cpp文件
#include <iostream>
#include <fstream>
#include <conio.h>
#include <windows.h>
#include <graphics.h> //easyx图形库
using namespace std;
int n,m,s[50][50],x,y;
int way=0;//确定方向
int main(){
cout<<"操作介绍:a向左,d向右,w向上,s向下"<<endl;
cout<<"------------------------------------按任意键进入游戏---------------------------------";
getch();
ifstream in;
in.open("first_maze.txt"); //打开文件
in>>m>>n;//m代表列16,n代表行18
for(int i=0;i<=n+1;i++){//多加1,形成墙壁
for(int j=0;j<=m+1;j++){
s[j][i]=1;
}//for
}//for
for(i=1;i<=n;i++){//导入文件中的地图
for(int j=1;j<=m;j++){
in>>s[j][i];
}//for
}//for
in.close(); //关闭文件
x=1;
y=1;
initgraph(180,180);
BeginBatchDraw();//开始绘图
while(1){
Sleep(50);
way=0;
setfillcolor(WHITE);
solidrectangle(0,0,200,200);
if(GetKeyState(65)<0&&s[x-1][y]==0)way=1;//a,向左
if(GetKeyState(68)<0&&s[x+1][y]==0)way=2;//d,向右
if(GetKeyState(83)<0&&s[x][y+1]==0)way=3;//s,向下
if(GetKeyState(87)<0&&s[x][y-1]==0)way=4;//w,向上
if(way==1)x--;
if(way==2)x++;
if(way==3)y++;
if(way==4)y--;
for(int i=y-4;i<y+4;i++){
for(int j=x-4;j<x+4;j++){
if(s[j][i]==1){
setfillcolor(BLACK); //绘制墙壁
solidrectangle((j-x+4)*20,(i-y+4)*20,(j-x+5)*20,(i-y+5)*20);
}//if
if(i==18&&j==1){
setfillcolor(GREEN); //绘制终点
solidrectangle((j-x+4)*20,(i-y+4)*20,(j-x+5)*20,(i-y+5)*20);
}//if
if(i==y&&j==x){
setfillcolor(RED); //绘制人物
solidrectangle((j-x+4)*20,(i-y+4)*20,(j-x+5)*20,(i-y+5)*20);
}//if
}//for
}//for
FlushBatchDraw();
if(x==1&&y==18){
Sleep(1000);
break;
}
}//while
setfillcolor(WHITE);
solidrectangle(0,0,200,200);
settextcolor(BLACK);
settextstyle(20,0,"楷体");
setbkmode(TRANSPARENT);
outtextxy(0,60,"恭喜你闯关成功");
FlushBatchDraw();
Sleep(2000);
return 0;
}
END!