这次加了点个性化,不成熟的功能没发出来,改进改进再发吧
  • 板块灌水区
  • 楼主bluebear619
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/3/27 18:28
  • 上次更新2023/10/23 20:18:58
查看原帖
这次加了点个性化,不成熟的功能没发出来,改进改进再发吧
940602
bluebear619楼主2023/3/27 18:28
#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++){
			//	system("color B");
				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;
}
2023/3/27 18:28
加载中...