扫雷正式版
2026-08-02 20:37:04
发布于:浙江
输入一个数表示雷的个数回车,输入三个数,前两个是坐标,第三个是(1,2)1是选择,2是插旗
#include<bits/stdc++.h>
using namespace std;
int dx[8]={-1,-1,-1,0,0,1,1,1};
int dy[8]={-1,0,1,-1,1,-1,0,1};
char a[100][100];
char mp[100][100];
int vis[100][100];
bool isWin()
{
for(int i=1;i<=10;i++)
{
for(int j=1;j<=10;j++)
{
if(a[i][j] == '*')
{
if(mp[i][j] != 'P')
return false;
}
else
{
if(mp[i][j] == 'P' || mp[i][j] == '#')
return false;
}
}
}
return true;
}
int f(int x,int y){
int c=0;
for(int i=0;i<8;i++){
int nx=x+dx[i];
int ny=y+dy[i];
if(a[nx][ny]=='*'){
c++;
}
}
return c;
}
void dfs(int x,int y){
vis[x][y]=1;
if(f(x,y)==0){
mp[x][y]='0';
for(int i=0;i<8;i++){
int nx=dx[i]+x;
int ny=dy[i]+y;
if(!vis[nx][ny]&&a[nx][ny]!='*'&&nx>=1&&nx<=10&&ny>=1&&ny<=10){
dfs(nx,ny);
}
}
}
else{
mp[x][y]=f(x,y)+'0';
return ;
}
}
int main(){
srand(time(0));
for(int i=1;i<=10;i++){
for(int j=1;j<=10;j++){
a[i][j]='.';
mp[i][j]='#';
}
}
int s;
cin>>s;
int mine_cnt=0;
while(mine_cnt < s){
int xa=rand()%10+1;
int ya=rand()%10+1;
if(a[xa][ya]!='*'){ // 当前位置没有地雷再放
a[xa][ya]='*';
mine_cnt++;
}
}
while(1!=-1){
for(int yyyyy=1;yyyyy<=2;yyyyy++){
for(int i=1;i<=10;i++){
for(int j=1;j<=10;j++){
cout<<mp[i][j];
}
cout<<"\n";
}
int o,p,j;
cin>>o>>p>>j;
if(j==1){
if(a[o][p]!='*'){
dfs(o,p);
}
else {
cout<<"你输了\n";
for(int i=1;i<=10;i++){
for(int j=1;j<=10;j++){
cout<<a[i][j];
}
cout<<"\n";
}
return 0;
}
}
if(j==2){
mp[o][p]='P';
}
if(isWin())
{
cout<<"恭喜!扫雷胜利!\n";
system("pause");
return 0;
}
system("cls");
}
}
}
这里空空如也


















有帮助,赞一个