天天看點

用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!