c++扫雷程序

修改自这里QwQ

  1 #include<bits/stdc++.h>
  2 #include<ctime>
  3 #include<windows.h>
  4 #include<stdio.h>
  5 #include<conio.h>
  6 using namespace std;
  7 const int p[8][2]= {{0,1},{1,0},{-1,0},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1}};
  8 char c;
  9 char xmp[21][21];
 10 int mp[21][21],n,m,k;
 11 bool mpb[21][21],bo[21][21];
 12 void dfs0(int x,int y) {
 13     mpb[x][y]=1;
 14     for(int i=0; i<8; i++) {
 15         if(x+p[i][0]<1 || x+p[i][0]>n || y+p[i][1]<1 || y+p[i][1]>m)continue;
 16         if(mp[x+p[i][0]][y+p[i][1]]==0) {
 17             xmp[x+p[i][0]][y+p[i][1]]='0';
 18             if(!mpb[x+p[i][0]][y+p[i][1]])dfs0(x+p[i][0],y+p[i][1]);
 19         }
 20         if(mp[x+p[i][0]][y+p[i][1]]>0 && mp[x+p[i][0]][y+p[i][1]]<9) {
 21             xmp[x+p[i][0]][y+p[i][1]]=mp[x+p[i][0]][y+p[i][1]]+'0';
 22         }
 23     }
 24     return;
 25 }
 26 void bai(int x,int y) {
 27     system("cls");
 28     if(bo[x][y])return;
 29     bo[x][y]=1;
 30     system("color C");
 31     for(int k=1; k<=19; k++) {
 32         Sleep(260);
 33         system("cls");
 34         for(int i=1; i<=n; i++) {
 35             for(int j=1; j<=m; j++) {
 36                 cout<<xmp[i][j]<<" ";
 37                 if(xmp[i][j]=='*')xmp[i][j]='_';
 38             }
 39             cout<<endl<<endl;
 40         }
 41         int j=y+k;
 42         for(int i=x-k; i<=x+k; i++) {
 43             if(i<1 || i>n || j<1 || j>m)continue;
 44             if(mp[i][j]==-1) {
 45                 xmp[i][j]='*';
 46                 for(int l=0; l<8; l++) {
 47                     xmp[i+p[l][0]][j+p[l][1]]='_';
 48                 }
 49             }
 50         }
 51         j=y-k;
 52         for(int i=x-k; i<=x+k; i++) {
 53             if(i<1 || i>n || j<1 || j>m)continue;
 54             if(mp[i][j]==-1) {
 55                 xmp[i][j]='*';
 56                 for(int l=0; l<8; l++) {
 57                     xmp[i+p[l][0]][j+p[l][1]]='_';
 58                 }
 59             }
 60         }
 61         int i=x+k;
 62         for(int j=x-k; j<=x+k; j++) {
 63             if(i<1 || i>n || j<1 || j>m)continue;
 64             if(mp[i][j]==-1) {
 65                 xmp[i][j]='*';
 66                 for(int l=0; l<8; l++) {
 67                     xmp[i+p[l][0]][j+p[l][1]]='_';
 68                 }
 69             }
 70         }
 71         i=x-k;
 72         for(int j=x-k; j<=x+k; j++) {
 73             if(i<1 || i>n || j<1 || j>m)continue;
 74             if(mp[i][j]==-1) {
 75                 xmp[i][j]='*';
 76                 for(int l=0; l<8; l++) {
 77                     xmp[i+p[l][0]][j+p[l][1]]='_';
 78                 }
 79             }
 80         }
 81     }
 82     system("pause");
 83     system("color 7");
 84 }
 85 void win() {
 86     for(int k=1; k<=n; k++) {
 87         Sleep(150);
 88         system("cls");
 89         for(int i=1; i<=m; i++) {
 90             if(mp[k-1][i]!=-1) {
 91                 xmp[k-1][i]=mp[k-1][i]+'0';
 92             } else xmp[k-1][i]='*';
 93             xmp[k][i]=45;
 94         }
 95         for(int i=1; i<=n; i++) {
 96             for(int j=1; j<=m; j++) {
 97                 cout<<xmp[i][j]<<" ";
 98             }
 99             cout<<endl<<endl;
100         }
101     }
102     system("cls");
103     cout<<"游戏成功,总共用时:"<<rand()<<""<<"(我才不会告诉你我不会计时呢)"<<endl<<endl;
104     system("pause");
105     system("cls");
106 }
107 void game() {
108     while(1) {
109         system("cls");
110         cout<<"请输入长: ( >=5,<=20 )"<<endl;;
111         cin>>m;
112         if(m<5 || m>20) {
113             cout<<"您输入的数太大或太小了!重新输入"<<endl;
114             Sleep(1200);
115         } else break;
116     }
117     while(1) {
118         system("cls");
119         cout<<"请输入宽: ( >=5,<=12 )"<<endl;
120         cin>>n;
121         if(n<5 || n>12) {
122             cout<<"您输入的数太大或太小了!重新输入"<<endl;
123             Sleep(1200);
124         } else break;
125     }
126     while(1) {
127         system("cls");
128         cout<<"请输入雷数: ( >=5,<="<<n*m-5<<""<<endl;
129         cin>>k;
130         if(k<5 || k>n*m-5) {
131             cout<<"您输入的数太大或太小了!重新输入";
132             Sleep(1200);
133         } else break;
134     }
135     system("cls");
136     for(int i=1; i<=3; i++) {
137         cout<<"正在初始化.";
138         Sleep(280);
139         cout<<".";
140         Sleep(280);
141         cout<<".";
142         Sleep(280);
143         system("cls");
144     }
145     srand((unsigned)time(NULL));
146     memset(mp, 0, sizeof mp);
147     for(int i=1; i<=k; i++) {
148         int x=rand()%n+1,y=rand()%m+1;
149         if(mp[x][y]==-1) {
150             i--;
151             continue;
152         } else mp[x][y]=-1;
153     }
154     for(int i=1; i<=n; i++)
155         for(int j=1; j<=m; j++) {
156             if(mp[i][j]==-1)continue;
157             for(int k=0; k<8; k++) {
158                 if(mp[i+p[k][0]][j+p[k][1]]==-1)mp[i][j]++;
159             }
160         }
161     char s[21][21];
162     for(int i=1; i<=20; i++) {
163         for(int j=1; j<=20; j++) {
164             s[i][j]=' ';
165             xmp[i][j]=22;
166         }
167     }
168     int x=1,y=1,sum=0;
169     bool o=0,f=0;
170     while(1) {
171         sum=0;
172         system("cls");
173         s[x][y]='<';
174         for(int i=1; i<=n; i++) {
175             for(int j=1; j<=m; j++) {
176                 if(xmp[i][j]==127)sum++;
177                 cout<<xmp[i][j]<<s[i][j];
178             }
179             cout<<endl<<endl;
180         }
181         cout<<"剩余雷数: "<<k-sum;
182         if(o) {
183             Sleep(2000);
184             bai(x,y);
185             system("cls");
186             cout<<"游戏失败!";
187             Sleep(2500);
188             system("cls");
189             return;
190         }
191         c=getch();
192         switch(c) {
193             case 'w': {
194                 s[x][y]=' ';
195                 if(x-1<1)x=n;
196                 else x--;
197                 break;
198             }
199             case 's': {
200                 s[x][y]=' ';
201                 if(x+1>n)x=1;
202                 else x++;
203                 break;
204             }
205             case 'a': {
206                 s[x][y]=' ';
207                 if(y-1<1)y=m;
208                 else y--;
209                 break;
210             }
211             case 'd': {
212                 s[x][y]=' ';
213                 if(y+1>m)y=1;
214                 else y++;
215                 break;
216             }
217             case 'j': {
218                 if(mp[x][y]==-1) {
219                     if(!f) {
220                         f=1;
221                         cout<<endl<<"您的rp太低,这是个雷!(仅仅提醒第一次)";
222                         Sleep(2000);
223                     } else {
224                         xmp[x][y]='*';
225                         o=1;
226                     }
227                 }
228                 if(mp[x][y]==0) {
229                     xmp[x][y]='0';
230                     dfs0(x,y);
231                 }
232                 if(mp[x][y]>=1 && mp[x][y]<=9) {
233                     xmp[x][y]=mp[x][y]+'0';
234                 }
235                 bool bo=0;
236                 for(int i=1; i<=n; i++) {
237                     for(int j=1; j<=m; j++) {
238                         if(mp[i][j]==-1)continue;
239                         if(xmp[i][j]!=mp[i][j]+'0') {
240                             bo=1;
241                             break;
242                         }
243                         if(i==n && j==m) {
244                             win();
245                             return;
246                         }
247                     }
248                     if(bo)break;
249                 }
250                 break;
251             }
252             case 'k': {
253                 if(xmp[x][y]==22) {
254                     xmp[x][y]=127;
255                     break;
256                 }
257                 if(xmp[x][y]==127) {
258                     xmp[x][y]='?';
259                     break;
260                 }
261                 xmp[x][y]=22;
262                 break;
263             }
264             case 'l': {
265                 win();
266                 break;
267             }
268         }
269     }
270 }
271 int main() {
272     HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
273     CONSOLE_CURSOR_INFO CursorInfo;
274     GetConsoleCursorInfo(handle,&CursorInfo);//获取控制台光标信息
275     CursorInfo.bVisible = false; //隐藏控制台光标
276     SetConsoleCursorInfo(handle, &CursorInfo);//设置控制台光标状态
277 
278     cout<<"                           ----欢迎您来到扫雷----";
279     Sleep(2500);
280     system("cls");
281     for(int i=1; i<=2; i++) {
282         cout<<"加载中.";
283         Sleep(300);
284         cout<<".";
285         Sleep(300);
286         cout<<".";
287         system("cls");
288     }
289     string s[4]= {""," "," "," "};
290     int now=1;
291     while(1) {
292         s[now]+='<';
293         cout<<"自定义游戏"<<s[1]<<endl<<"作者      "<<s[2]<<endl<<"帮助      "<<s[3]<<endl<<endl<<"ws上下控制,j确定";
294         c=getch();
295         system("cls");
296         switch(c) {
297             case 'w': {
298                 s[now]=' ';
299                 if(now-1<0)now=3;
300                 else now--;
301                 break;
302             }
303             case 's': {
304                 s[now]=' ';
305                 if(now+1>3)now=1;
306                 else now++;
307                 break;
308             }
309             case 'j': {
310                 if(now==1) {
311                     game();
312                 }
313                 if(now==2) {
314                     system("cls");
315                     cout<<"gqz"<<endl<<"洛谷/steam id:s5_gan"<<endl<<"qq:540568193"<<endl<<"微信:s540568193"<<endl<<endl;
316                     system("pause");
317                     system("cls");
318                 }
319                 if(now==3) {
320                     system("cls");
321                     cout<<"wasd控制选中的单元格"<<endl<<"j翻开单元格,k标记单元格"<<endl<<"如果您运气实在太差,翻出的是无法判断雷的图"<<endl<<"接下来看脸"<<endl<<endl;
322                     system("pause");
323                     system("cls");
324                 }
325                 break;
326             }
327         }
328     }
329     return 0;
330 }

猜你喜欢

转载自www.cnblogs.com/zcxqiangwudi/p/9372409.html