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