社区讨论
自制扫雷
灌水区参与者 13已保存回复 31
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 31 条
- 当前快照
- 1 份
- 快照标识符
- @lzs7nc33
- 此快照首次捕获于
- 2024/08/13 17:18 2 年前
- 此快照最后确认于
- 2024/08/13 20:07 2 年前
很烂,应为我善
帮我找找bug
酸Q了
CPP#include <bits/stdc++.h>
using namespace std;
//default_random_engine e{random_device{}()};
//mt19937_64 eng{random_device{}()};
int a,z[21][21],x[21][21],l,nl,jx,jy,ms=1,c[21][21],w=1;
int fx[9]={0,-1,-1,-1,0,1,1,1,0},ffx[5]={0,0,1,0,-1};
int fy[9]={0,-1,0,1,1,1,0,-1,-1},ffy[5]={0,1,0,-1,1};
void shi(int cx,int cy)
{
c[cx][cy]=1;
for(int i=1;i<=4;i++){
int tx=cx+ffx[i],ty=cy+ffy[i];
if(z[tx][ty]==1&&c[tx][ty]==0&&tx>0&&ty>0&&tx<21&&ty<21)shi(tx,ty);}
}
//char xh[21]={⑴,⑵,⑶,⑷,⑸,⑹,⑺,⑻,⑼,⑽,⑾,⑿,⒀,⒁,⒂,⒃,⒄,⒅,⒆,⒇};
void out(int s)
{
switch(s){
case 1:
cout<<"⑴";break;
case 2:
cout<<"⑵";break;
case 3:
cout<<"⑶";break;
case 4:
cout<<"⑷";break;
case 5:
cout<<"⑸";break;
case 6:
cout<<"⑹";break;
case 7:
cout<<"⑺";break;
case 8:
cout<<"⑻";break;
case 9:
cout<<"⑼";break;
case 10:
cout<<"⑽";break;
case 11:
cout<<"⑾";break;
case 12:
cout<<"⑿";break;
case 13:
cout<<"⒀";break;
case 14:
cout<<"⒁";break;
case 15:
cout<<"⒂";break;
case 16:
cout<<"⒃";break;
case 17:
cout<<"⒄";break;
case 18:
cout<<"⒅";break;
case 19:
cout<<"⒆";break;
case 20:
cout<<"⒇";break;
}
}
void dx()
{
for(int i=1;i<=20;i++){
for(int j=1;j<=20;j++){
if(z[i][j]==1){
for(int q=1;q<=8;q++){
int tx=i+fx[q];
int ty=j+fy[q];
if(z[tx][ty]==0&&tx>0&&ty>0&&tx<21&&ty<21)x[i][j]++;}}}}
}
int main()
{
cout<<"请输入雷出现的概率(n分之1):";
// const std::string RED = "\033[31m"; // 红色文本
// const std::string GREEN = "\033[32m"; // 绿色文本
// const std::string YELLOW = "\033[33m"; // 黄色文本
// const std::string BLUE = "\033[34m"; // 蓝色文本
// const std::string RESET = "\033[0m"; // 重置颜色
srand(time(0));
cin>>a;
// uniform_int_distribution<int> d(0,a);
cout<<" ";
for(int i=1;i<=20;i++)out(i);
cout<<endl;
for(int i=1;i<=20;i++){out(i);
for(int j=1;j<=20;j++){
z[i][j]=rand()%a;
if(z[i][j]!=0)z[i][j]=1;
else l++;
cout<<"■";
}
// cout<<" ";
// for(int j=1;j<=20;j++)
// cout<<setw(2)<<z[i][j];
cout<<endl;
}
dx();
while(nl<l)
{
cout<<"当前模式(输入俩21调整模式):翻 ";
cin>>jx>>jy;
if(jx==21||jy==21)ms=2;
if(ms==1){
if(z[jx][jy]==0){cout<<"GAMEOVER";w=0;break;}
shi(jx,jy);}
else if(ms==2){
cout<<"当前模式:标 ";
cin>>jx>>jy;
if(z[jx][jy]==1){cout<<"GAMEOVER";w=0;break;}
c[jx][jy]=3;nl++;}
cout<<" ";
for(int i=1;i<=20;i++)out(i);
cout<<endl;
for(int i=1;i<=20;i++){out(i);
for(int j=1;j<=20;j++){
if(c[i][j]==1){
if(x[i][j]==0)cout<<" ";
else cout<<setw(2)<<x[i][j];}
else if(c[i][j]==3)cout<<"★";
else cout<<"■";
}if(i==1)cout<<" 剩余:"<<l-nl;cout<<endl;}
ms=1;
}
if(w)
cout<<"You win";
//■
}
回复
共 31 条回复,欢迎继续交流。
正在加载回复...