修改自这里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 }