c 小遊戲 掃雷

2021-09-27 12:28:25 字數 3902 閱讀 5734

#include#include#include#include#include#include#includeusing namespace std;

#define maxn 35

#define midx 10

#define midy 40

#define cg 25

#define ck 80

int g,k,lnum,wnum;//g為地圖高,k為地圖,lnum為地圖中的雷數,wnum為剩餘的小旗數

int nx,ny;//現在游標所在的位置

bool qr=0,lose=0,is_flag_true[maxn][maxn];//qr為確認模式是否開啟,lose為是否輸,第三個是這個位置上的旗是否放對

char map[maxn][maxn],tmap[maxn][maxn];//第乙個是只有雷和空地的地圖,第二個是玩家能看到的地圖

int map1[maxn][maxn],mapc[maxn][maxn];//map1為數字的地圖,其中0代表空地,-1為雷,1-8為周圍雷的個數

//mapc為當前格仔的顏色

int col[10]=;//col[i]表示windows掃雷中i的顏色,col[0]為空格的顏色

int d[10][4]=,,,,,,,,};//8個方向

bool zb;//作弊是否開啟

/*各種函式*/

void color(int);//顏色

void gto(int,int);//游標位置

void make();//製作隨機地圖

void print();//列印地圖等

bool check(int,int);//判斷座標是否合法

bool is_win();//判斷是否贏

bool is_lose();//是否輸

void dfs(int,int);//用深搜來開啟方塊

void st(int,int);//試探,即windows掃雷中的左右鍵同時按

void flag(int,int);//小旗

void bj(int,int);//標記

void swt();//確認模式

void again();//重新開始

void zb();//作弊模式

void mainmain();//主函式

void print_real_map();//列印最終的地圖

void begin();//各種操作

int main()

void color(int a)

void gto(int x,int y)

void make()

//隨機放雷

for(int i=1;i<=g;i++)

for(int j=1;j<=k;j++)

}for(int i=1;i<=g;i++)

for(int j=1;j<=k;j++)

if(mapc[i][j]==0)//空地

mapc[i][j]=240;

}void print()

gto(2,0);

nx=2,ny=0;

color(15);

printf("@");

color(15);

gto(2,2*k+5);printf("-----規則-----");

gto(3,2*k+5);printf("wasd:選擇位置");

gto(4,2*k+5);printf("空格:開啟");

gto(5,2*k+5);printf("1鍵:試探周圍8個方塊,如果其中有雷則不會開啟,無");

gto(6,2*k+5);printf(" 雷或旗幟標對了則會將周圍無雷的位置開啟,");

gto(7,2*k+5);printf(" 如果試探時周圍有標錯的旗幟,則會遊戲失敗");

gto(8,2*k+5);printf(" 必須額外確認一次,以便檢視周圍被試探的區域");

gto(9,2*k+5);printf("2鍵:放置/取消小旗(f)");

gto(10,2*k+5);printf("3鍵:放置/取消標記(?)");

gto(11,2*k+5);printf("4鍵:開啟/關閉確認模式,即每次操作需再按一次確認");

gto(12,2*k+5);printf("5鍵:開啟/關閉作弊模式,即顯示原本地圖");

gto(13,2*k+5);printf("0鍵:重新開始");//列印規則

gto(g+4,0);printf("-----操作提示-----\n");

printf("請選擇方塊進行操作");

gto(1,2*k+10);color(12);printf("剩餘小旗數:%d",wnum=lnum);

}bool check(int x,int y)

bool is_lose()

void dfs(int x,int y)

gto(x,y);color(255);

tmap[x-1][y+1]=' ';

printf(" ");//因為下面判斷了雷,上面判斷了數字,這裡就一定是空地

for(int i=1;i<=8;i++)

}void st(int x,int y)

}gto(g+5,0),color(15),printf("請確認 ");

//試探必須額外確認一次,規則上有說

char c=getch();

if(c=='1')

}for(int i=1;i<=8;i++)

for(int i=1;i<=8;i++)}}

void flag(int x,int y)

else//否則就放置小旗

gto(1,2*k+10);color(12);printf("剩餘小旗數: ");

gto(1,2*k+22);printf("%d",wnum);//更新小旗數

}void bj(int x,int y)//和放小旗差不多,只是不用更新is_flag_true

else

gto(x+1,y-1),color(240),printf("?");

tmap[x][y]='?';mapc[x][y]=240;}}

void swt()

void zb()

zb=0;

}else//否則列印作弊地圖

}zb=1;}}

void again()

void begin()//各種操作

else if(c=='s'&&check(nx+1,ny))

else if(c=='a'&&check(nx,ny-1))

else if(c=='d'&&check(nx,ny+1))

//上下左右移動

else

dfs(nx,ny);}}

else

dfs(nx,ny);}}

else if(c=='1')

else st(nx,ny);

for(int i=1;i<=8;i++)}}

else if(c=='2'&&(tmap[nx-1][ny+1]>'9'||tmap[nx-1][ny+1]<'1'))

else flag(nx,ny);

}else if(c=='3'&&(tmap[nx-1][ny+1]>'9'||tmap[nx-1][ny+1]<'1'))

else bj(nx,ny);

}else if(c=='4')

else swt();

}else if(c=='5')

else zb();

}else if(c=='0')

else again();}}

}void mainmain()

make();

print();

while(1)}}

}void print_real_map()

}}

C 小遊戲 掃雷

標頭檔案 define crt secure no warnings 1 ifndef game h define game h include include include include define row 9 define col 9 define rows row 2 define co...

c 小遊戲 掃雷

include include include include include include includeusing namespace std define maxn 35 define midx 10 define midy 40 define cg 25 define ck 80 int ...

c 小遊戲 掃雷

include include include include include include includeusing namespace std define maxn 35 define midx 10 define midy 40 define cg 25 define ck 80 int ...