#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 ...