全局變量定義地圖和一些判斷信息ios
建立三個地圖 分別表示 源地圖 顯示的效果地圖 和一個用來判斷點位是否被選中的地圖windows
玩家輸入要翻開的格子的行數和列數。用一個函數來翻開目標格子,若是是地雷遊戲失敗,能夠選擇是否從新遊戲而且刷新一個新的隨機地圖,不然用一個函數統計目標格子周圍的地雷數。若是周圍沒有地雷,則遞歸使用一個函數將附近周圍沒有地雷的格子所有打開,最後判斷是否遊戲勝利,勝利能夠選擇是否進入下一關,並增長難度。框架
本代碼我拿來測試了一下 將m地雷數和x關卡數設置的比較簡單 能夠自行修改關卡函數
(寫的並很差 沒有用到結構體和指針 能夠自行加工)測試
1 #include<iostream> 2 #include<windows.h> 3 using namespace std; 4 5 int i, j, stop = 0, m = 2, stop2 = 0,x=1; 6 //stop判斷遊戲是否失敗 m雷數 x關卡 stop2 判斷遊戲成功 7 char k[20][20];//地圖信息 8 int h=5,l=5;//地圖行列 9 char show[20][20] ;//地圖是否被翻開 10 char showmap[20][20];//輸出的地圖 11 12 13 14 void showMap(int i, int j)//輸出地圖 15 { 16 cout <<"關卡"<<x ; 17 cout <<' '; 18 cout <<"雷數"<<h; 19 cout << endl; 20 cout << ' '; 21 for (i = 0; i < h; i++) 22 cout << i << ' '; 23 cout << endl; 24 for (i = 0; i < h; i++) 25 { 26 cout << i; 27 cout <<' '; 28 for (j = 0; j < l; j++) 29 { 30 31 if (show[i][j] == 0)//沒翻開 32 printf("■"); 33 else if (show[i][j] == 2) //標記 34 { 35 printf("# "); 36 } 37 else 38 cout << showmap[i][j] << ' ';// 39 40 } 41 cout << endl; 42 }//框架 43 if (stop == 1)//判斷遊戲是否結束 44 { system("cls"); 45 cout << ' '; 46 for (i = 0; i < h; i++) 47 cout << i << ' '; 48 cout << endl; 49 for (i = 0; i < h; i++) 50 { 51 cout << i; 52 for (j = 0; j < l; j++) 53 { 54 if (k[i][j] == '*') 55 printf("* "); 56 else 57 printf("■"); 58 } 59 cout << endl; 60 } 61 cout << endl; 62 } 63 } 64 65 66 67 68 69 70 bool nominefindfs(int row, int col)//遍歷判斷空白 71 { 72 int roemove[8] = { 1,1,1,0,0,-1,-1,-1 }; 73 int colmove[8] = { 1,0,-1,1,-1,-1,0,1 }; 74 if (k[row][col] == '*') return false; 75 if (row < 0 || col < 0 || row >= 10 || col >= 10) return false; 76 77 showmap[row][col] = k[row][col]; 78 show[row][col] = 1; 79 if (k[row][col] != ' ') return false; 80 81 for (int i = 0; i < 8; i++) 82 { 83 int nextrow = row + roemove[i]; 84 85 int nextcol = col + colmove[i]; 86 87 if (nextrow >= 0 && nextrow < h && nextcol >= 0 && nextcol < l) 88 { 89 90 if (show[nextrow][nextcol] == 0 && k[nextrow][nextcol] != '*') 91 { 92 nominefindfs(nextrow, nextcol); 93 } 94 } 95 } 96 97 } 98 99 void change(int i, int j)//把選中的座標輸出 100 { 101 switch (k[i][j]) { 102 case ' ': 103 nominefindfs(i, j); 104 break; 105 case '*': 106 cout << '*'; 107 showmap[i][j] = '*'; 108 stop = 1; 109 break; 110 default: 111 showmap[i][j] = k[i][j]; 112 break; 113 } 114 } 115 int main() 116 { 117 system("color 0B"); 118 system("cls"); 119 stop = 0; stop2 = 0; 120 for (i = 0; i < h; i++) 121 for (j = 0; j < l; j++) 122 { 123 k[i][j]=' '; 124 show[i][j] = 0;//默認沒翻開 125 showmap[i][j] = ' '; 126 } 127 //數字問題 關卡 128 for (j = 0; j < h; j++) 129 { 130 k[rand() % h][rand() % h] = '*'; 131 } 132 133 int sum = 0; //統計周圍地雷數量 134 for (i = 0; i < h; i++) 135 for (j = 0; j < l; j++) 136 { 137 sum = 0; 138 if(k[i][j]!='*') 139 { 140 141 142 if (i - 1 >= 0 && j - 1 >= 0 && k[i - 1][j- 1] =='*') 143 sum++; 144 if (i - 1 >= 0 && k[i - 1][j] == '*') 145 sum++; 146 if (i - 1 >= 0 && j+ 1 < 10 && k[i - 1][j+ 1] == '*') 147 sum++; 148 if ( j- 1 >= 0 && k[i ][j- 1] == '*') 149 sum++; 150 if (j+ 1 < 10 && k[i][j+1] == '*') 151 sum++; 152 if (i + 1 < 10 && j- 1 >= 0 && k[i +1][j- 1] == '*') 153 sum++; 154 if (i + 1 < 10 && k[i+ 1][j] == '*') 155 sum++; 156 if (i +1 < 10 && j+ 1 < 10 && k[i + 1][j+ 1] == '*') 157 sum++; 158 } 159 160 switch(sum){ 161 case 1: 162 k[i][j]='1'; 163 break; // 可選的 164 case 2: 165 k[i][j]='2'; 166 break; // 可選的 167 case 3: 168 k[i][j]='3'; 169 break; // 可選的 170 case 4: 171 k[i][j]='4'; 172 break; // 可選的 173 case 5: 174 k[i][j]='5'; 175 break; // 可選的 176 case 6: 177 k[i][j]='6'; 178 break; // 可選的 179 case 7: 180 k[i][j]='7'; 181 break; // 可選的 182 case 8: 183 k[i][j]='8'; 184 break; // 可選的 185 default : // 可選的 186 break; 187 } 188 } 189 190 191 192 int temp,jx; 193 showMap(i, j); 194 while (1) 195 { 196 if (stop == 1)//判斷遊戲是否結束 197 { 198 cout << "遊戲失敗QAQ"; 199 cout<<endl; 200 cout <<"從新遊戲請輸入1..."; 201 cout<<endl; 202 cout <<"退出遊戲輸入任意數字..."; 203 cout<<endl; 204 cin>>jx; 205 if(jx==1)//判斷是否繼續遊戲 206 { 207 jx=0; 208 main(); 209 } 210 else 211 break; 212 } 213 214 if (stop2 == m) 215 { 216 cout << "遊戲成功QWQ!"; 217 cout<<endl; 218 cout <<"進入下一關請輸入1..."; 219 cout<<endl; 220 cout <<"退出遊戲輸入任意數字..."; 221 cout<<endl; 222 cin>>jx; 223 if(jx==1) 224 { 225 226 if(x==3) 227 { 228 system("cls"); 229 cout << "闖關成功!!!"; 230 cout<<endl; 231 232 break; 233 } 234 x++; 235 h+=2; 236 l+=2; 237 jx=9; 238 main(); 239 } 240 else 241 break; 242 243 } 244 cout << "---1.掃雷-------2.標記雷---"; 245 cin >> temp; 246 if (temp == 1) 247 { 248 cout << "請輸入座標"; 249 cin >> i; 250 cin >> j; 251 system("cls"); 252 show[i][j] = 1;//翻開 253 change(i, j); 254 showMap(i, j); 255 256 } 257 else 258 { 259 cout << "請輸入座標"; 260 cin >> i; 261 cin >> j; 262 system("cls"); 263 show[i][j] = 2;//標記 264 showMap(i, j); 265 stop2++; 266 } 267 268 } 269 return 0; 270 }