```cpp
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
int n,a[105],b[105],x;
char c[105];
void upd()
{
system("cls");
for(int i=1;i<=n;i++)
cout<<i<<":\t"<<c[i]<<" "<<b[i]<<endl;
}
void end()
{
system("cls");
for(int i=1;i<=n;i++)
{
cout<<i<<":\t";
if(a[i]==0)
cout<<"X\t";
else
cout<<"BOMB\t";
cout<<b[i]<<endl;
}
}
bool win()
{
for(int i=1;i<=n;i++)
{
if(a[i]==0&&c[i]=='P')
return 0;
if(a[i]==1&&c[i]!='P')
return 0;
}
return 1;
}
int main()
{
srand(time(0));
cout<<"选择格子行数:1-100(行)【选择0为随机行数】"<<endl;
cin>>n;
if(n==0)
n=rand()%99+1;
cout<<"选择炸弹密度:1-100(%)【选择0为随机密度】"<<endl;
cin>>x;
if(x==0)
x=rand()%99+1;
for(int i=1;i<=n;i++)
{
int r=rand()%99+1;
if(r<=x)
a[i]=1;
c[i]='?';
}
for(int i=1;i<=n;i++)
{
for(int j=i-1;j<=i+1;j++)
{
if(a[j]==1)
b[i]++;
}
}
while(1)
{
upd();
cout<<"输入1标记,输入2排雷"<<endl;
cin>>x;
if(x==1)
{
while(1)
{
cout<<"输入你要(取消)标记的格子行数(输入0跳过)"<<endl;
int y;
cin>>y;
if(y==0)
break;
if(c[y]=='?')
c[y]='P';
else
c[y]='?';
}
upd();
}
else
{
while(1)
{
cout<<"输入你要排雷的格子行数(输入0跳过)"<<endl;
int y;
cin>>y;
if(y==0)
break;
if(a[y]==1)
{
cout<<endl<<"GAME OVER"<<endl;
Sleep(1000);
end();
return 0;
}
else
c[y]='X';
}
upd();
}
if(win()==1)
{
cout<<endl<<"YOU WIN"<<endl;
Sleep(2000);
end();
return 0;
}
}
return 0;
}
```
by xiaolaoshu @ 2022-07-22 19:16:31
不清楚这类适不适合发,但我觉得对做题有用
by xiaolaoshu @ 2022-07-22 19:17:26
[可疑] 引用 windows.h
[可疑] 调用系统函数
by charleshe @ 2022-07-22 19:18:06
就用了清屏和Sleep
中国人不骗中国人
by xiaolaoshu @ 2022-07-22 19:19:57
@[xiaolaoshu](/user/327971) 确实,是清屏
(但感觉应该和题目没关系)
by char_cha_ch @ 2022-07-22 19:24:04