【蒟蒻の小玩意】扫雷 最新版
  • 板块灌水区
  • 楼主CPE1303
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/7/24 10:19
  • 上次更新2024/7/24 10:40:49
查看原帖
【蒟蒻の小玩意】扫雷 最新版
1100578
CPE1303楼主2024/7/24 10:19

555前一篇文章被人举报了能不能别举报了嗨嗨哟

扫雷最新版本来了

#include<bits/stdc++.h>
using namespace std;
int Map[101][101],cover[101][101];
int n,m,x,y,a,b,cz,lose=0,cnt,cnt2;
void safe(int a,int b) {
	cover[a-1][b-1]=0;
	cover[a-1][b]=0;
	cover[a-1][b+1]=0;
	cover[a][b-1]=0;
	cover[a][b+1]=0;
	cover[a+1][b-1]=0;
	cover[a+1][b]=0;
	cover[a+1][b+1]=0;
//	if(Map[a-1][b-1]==0)safe(a-1,b-1);
//	if(Map[a-1][b]==0)safe(a-1,b);
//	if(Map[a-1][b+1]==0)safe(a-1,b+1);
//	if(Map[a][b-1]==0)safe(a,b-1);
//	if(Map[a][b-1]==0)safe(a,b+1);
//	if(Map[a+1][b-1]==0)safe(a+1,b-1);
//	if(Map[a+1][b]==0)safe(a+1,b);
//	if(Map[a+1][b+1]==0)safe(a+1,b+1);
}
int main() {
	cout<<"请输入棋盘的长宽和雷的数量(长宽均小于100)"<<endl;
	cin>>n>>m>>x;
	cnt=n*m;
	if(m*n<=x) {
		cout<<"Error:雷数大于等于总方格数"<<endl;
		return 0;
	}
	for(int i=0; i<=n; i++) {
		for(int j=0; j<=m; j++) {
			Map[i][j]=0;
			cover[i][j]=1;
		}
	}
	cout<<"请问你要手动布雷还是自动布雷?(输入1或2)"<<endl;
	cin>>y;
	if(y==1){
		for(int i=0; i<x; i++) {
			cout<<"请输入第"<<i+1<<"颗雷的位置(行/列)"<<endl;
			cin>>a>>b;
			if(Map[a][b]==-1) {
				cout<<"Error:此处已有雷,请换个位置"<<endl;
				i--;
			}
			Map[a][b]=-1;
		}
	}
	else{
		srand((unsigned)time(NULL));
		for(int i=0; i<x; i++) {
			a=rand()%n+1;
			b=rand()%m+1;
			if(Map[a][b]==-1) {
				i--;
			}
			else Map[a][b]=-1;
		}
	}
	for(int i=1; i<=n; i++) {
		for(int j=1; j<=m; j++) {
			if(Map[i][j]!=-1) {
				if(Map[i-1][j-1]==-1)Map[i][j]++;
				if(Map[i-1][j]==-1)Map[i][j]++;
				if(Map[i-1][j+1]==-1)Map[i][j]++;
				if(Map[i][j-1]==-1)Map[i][j]++;
				if(Map[i][j+1]==-1)Map[i][j]++;
				if(Map[i+1][j-1]==-1)Map[i][j]++;
				if(Map[i+1][j]==-1)Map[i][j]++;
				if(Map[i+1][j+1]==-1)Map[i][j]++;
			}
		}
	}
	cout<<"   ";
	for(int i=1; i<=n; i++) {
		cout<<i;
		if(i<10)cout<<" ";
	}
	cout<<endl<<endl;
	for(int i=1; i<=n; i++) {
		cout<<i;
		if(i<10)cout<<"  ";
		else cout<<" ";
		for(int j=1; j<=m; j++) {
			cout<<"? ";
		}
		cout<<endl;
	}
	while(lose==0) {
		cout<<"请输入操作(输入数字):"<<endl<<"1.翻看"<<endl<<"2.标记(标记为#)"<<endl<<"3.撤销标记"<<endl<<"输入其它数字均作为3处理"<<endl;
		cin>>cz;
		if(cz==1) {
			cout<<"请输入要翻看的格子(行/列)"<<endl;
			cin>>a>>b;
			if(cover[a][b]==0)cout<<"此处已翻开"<<endl;
			else if(cover[a][b]==2)cout<<"此处被标记"<<endl;
			else{
				cover[a][b]=0;
				if(Map[a][b]==0)safe(a,b);
				cnt--;
			}
		}
		else if(cz==2) {
			cout<<"请输入要标记的格子(行/列)"<<endl;
			cin>>a>>b;
			if(cover[a][b]==0)cout<<"此处已翻开"<<endl;
			if(cover[a][b]==2)cout<<"此处已标记"<<endl;
			else{
				cover[a][b]=2;
				cnt--;
				cnt2++;
			}
		}
		else {
			cout<<"请输入要撤销标记的格子(行/列)"<<endl;
			cin>>a>>b;
			if(cover[a][b]==0){
				cout<<"此处已翻开"<<endl; 
			}
			else if(cover[a][b]==1){
				cout<<"此处没有标记"<<endl;
			}
			else{
				cover[a][b]=1;
				cnt++;
			}
		}
		cout<<"   ";
		for(int i=1; i<=n; i++) {
			cout<<i;
			if(i<10)cout<<" ";
		}
		cout<<endl<<endl;
		for(int i=1; i<=n; i++) {
			cout<<i;
			if(i<10)cout<<"  ";
			else cout<<" ";
			for(int j=1; j<=m; j++) {
				if(cover[i][j]==0) {
					if(Map[i][j]==-1) {
						cout<<"! ";
						lose=1;
					} else if(Map[i][j]==0)cout<<"  ";
					else cout<<Map[i][j]<<" ";
				} else if(cover[i][j]==2)cout<<"# ";
				else cout<<"? ";
			}
			cout<<endl;
		}
		if(lose==1) {
			cout<<"你 失 败 了";
			return 0;
		}
		if(cnt==0&&cnt2==x) {
			cout<<"你 赢 了";
			return 0;
		}
	}
}
2024/7/24 10:19
加载中...