#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
const int nans[8][2]={{1,0},{0,1},{-1,0},{0,-1},{1,-1},{-1,-1},{-1,1},{1,1}};
const int awsd[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
int n,l;
string jud,str,cb="■";
string qp[1010][1010];
bool un[1010][1010]={0};
map<pair<int,int>,bool>pd;
void dfs(int x,int y){
pd[make_pair(x,y)]=1;
int ans=0;
for(int i=0;i<8;i++){
int a=x+nans[i][0],b=y+nans[i][1];
if(un[a][b])ans++;
}
l--;
qp[x][y]=ans+'0';
if(ans>0)return;
for(int i=0;i<4;i++){
int p=x+awsd[i][0],q=y+awsd[i][1];
if(p<1||q<1||p>n||q>n||pd[make_pair(p,q)])continue;
dfs(p,q);
pd[make_pair(p,q)]=1;
}
return;
}
int main(){
int x,y;
MessageBox(0,"友情提示:指令A为排查,指令B为标记,暂无其他指令,目前只能通过输入坐标来操作,以后会改进哒o(* ̄▽ ̄*)o ","Welcome!",MB_ICONASTERISK);
MessageBox(0,"现在可以自定义卡背了,本来还加了一个自定义颜色,但是system里用不了转义字符,一个一个来组合方式太多,干脆删咯((′-_-)-_-)-_-)","Welcome!",MB_ICONASTERISK);
cout<<"是否自定义卡背?(T/F)"<<endl;
cin>>jud;
while(jud!="T"&&jud!="F"){cout<<"指令无效,请重新输入!"<<endl;cin>>jud;}
if(jud=="T"){
cout<<"请输入一个占两个字节的字符串(保证不为空,同时x,∧,※为关键字):"<<endl;
cin>>cb;
while(cb.length()>2||cb[0]==' '||cb=="∧"||cb=="x "||cb=="※"){
cout<<"输入非法,请重新输入!"<<endl;
cin>>cb;
}
}
cout<<"请输入方阵边长:";
cin>>n;
l=n*n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
qp[i][j]=cb;
srand((unsigned)time(NULL));
for(int i=1;i<=l/6;i++){
int a=rand()%n+1,b=rand()%n+1;
if(!un[a][b])un[a][b]=1;
else i--;
}
while(true){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<qp[i][j];
if((qp[i][j]!=cb&&qp[i][j]!="∧")||(qp[i][j]==cb&&cb.length()<2))cout<<" ";
}
cout<<i<<endl;
}
for(int i=1;i<=n;i++){
cout<<i;
if(i<10)cout<<' ';
}
cout<<endl<<l<<endl;
if(l<=n*n/6)break;
cout<<"请输入指令:";
cin>>jud;
if(jud=="A"){
cout<<"请输入你要排查的坐标:";
cin>>y>>x;
system("cls");
if(pd[make_pair(x,y)]){
cout<<"("<<y<<","<<x<<")"<<"已排除!"<<endl;
Sleep(1000);
system("cls");
continue;
}
if(x<1||y<1||x>n||y>n){
cout<<"("<<y<<","<<x<<")"<<"越界!"<<endl;
Sleep(1000);
system("cls");
continue;
}
if(un[x][y]){
system("color BC");
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==x&&j==y){
cout<<"※";
continue;
}
if(un[i][j]){
cout<<"x"<<' ';
continue;
}
dfs(i,j);
cout<<qp[i][j]<<' ';
}
Sleep(100);
cout<<endl;
}
cout<<"Game Over!";
MessageBox(0,"噫!好,你中了!","Game Over",MB_ICONWARNING);
return 0;
}
dfs(x,y);
}
else if(jud=="B"){
cout<<"请输入你要标记的坐标:";
cin>>y>>x;
system("cls");
if(pd[make_pair(x,y)]){
cout<<"("<<y<<","<<x<<")"<<"已排除,无需标记"<<endl;
Sleep(1000);
system("cls");
continue;
}
qp[x][y]="∧";
}
else MessageBox(0,"指令无效!","Error",MB_ICONWARNING),system("cls");
}
cout<<"Perfect!!!";
MessageBox(0,"Congratulations!","Pass",0);
return 0;
}