天天看点

用easyx图形库做一个简单的c++小游戏---迷宫游戏

用easyx图形库做一个简单的c++小游戏–迷宫游戏

开发环境:visual c++6.0

库:easyx图形库 下载地址>>> https://easyx.cn/downloads/

里面用到了文件操作的知识,就是把迷宫的地图根据0,1的格式写入txt文件中,然后再导入迷宫地图。

成果展示:

用easyx图形库做一个简单的c++小游戏---迷宫游戏

附上代码:

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!