社区讨论

自制扫雷

灌水区参与者 13已保存回复 31

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
31 条
当前快照
1 份
快照标识符
@lzs7nc33
此快照首次捕获于
2024/08/13 17:18
2 年前
此快照最后确认于
2024/08/13 20:07
2 年前
查看原帖
很烂,应为我善 帮我找找bug 酸Q了
CPP
#include <bits/stdc++.h>
using namespace std;
//default_random_engine e{random_device{}()};
//mt19937_64 eng{random_device{}()};
int a,z[21][21],x[21][21],l,nl,jx,jy,ms=1,c[21][21],w=1;
int fx[9]={0,-1,-1,-1,0,1,1,1,0},ffx[5]={0,0,1,0,-1};
int fy[9]={0,-1,0,1,1,1,0,-1,-1},ffy[5]={0,1,0,-1,1};
void shi(int cx,int cy)
{
	c[cx][cy]=1;
	for(int i=1;i<=4;i++){
		int tx=cx+ffx[i],ty=cy+ffy[i];
		if(z[tx][ty]==1&&c[tx][ty]==0&&tx>0&&ty>0&&tx<21&&ty<21)shi(tx,ty);}
}
//char xh[21]={⑴,⑵,⑶,⑷,⑸,⑹,⑺,⑻,⑼,⑽,⑾,⑿,⒀,⒁,⒂,⒃,⒄,⒅,⒆,⒇};

void out(int s)
{
	switch(s){
		case 1:
			cout<<"⑴";break;
		case 2:
			cout<<"⑵";break;
		case 3:
			cout<<"⑶";break;
		case 4:
			cout<<"⑷";break;
		case 5:
			cout<<"⑸";break;
		case 6:
			cout<<"⑹";break;
		case 7:
			cout<<"⑺";break;
		case 8:
			cout<<"⑻";break;
		case 9:
			cout<<"⑼";break;
		case 10:
			cout<<"⑽";break;
		case 11:
			cout<<"⑾";break;
		case 12:
			cout<<"⑿";break;
		case 13:
			cout<<"⒀";break;
		case 14:
			cout<<"⒁";break;
		case 15:
			cout<<"⒂";break;
		case 16:
			cout<<"⒃";break;
		case 17:
			cout<<"⒄";break;
		case 18:
			cout<<"⒅";break;
		case 19:
			cout<<"⒆";break;
		case 20:
			cout<<"⒇";break;
			
	}
}

void dx()
{
	for(int i=1;i<=20;i++){
	for(int j=1;j<=20;j++){
		if(z[i][j]==1){
			for(int q=1;q<=8;q++){
				int tx=i+fx[q];
				int ty=j+fy[q];
				if(z[tx][ty]==0&&tx>0&&ty>0&&tx<21&&ty<21)x[i][j]++;}}}}
}

int main()
{
	cout<<"请输入雷出现的概率(n分之1):";
//	  const std::string RED = "\033[31m";      // 红色文本
//    const std::string GREEN = "\033[32m";    // 绿色文本
//    const std::string YELLOW = "\033[33m";   // 黄色文本
//    const std::string BLUE = "\033[34m";     // 蓝色文本
//    const std::string RESET = "\033[0m";     // 重置颜色
	srand(time(0));
	cin>>a;
//	uniform_int_distribution<int> d(0,a);
	cout<<"  ";
	for(int i=1;i<=20;i++)out(i);
	cout<<endl;
	for(int i=1;i<=20;i++){out(i);
	for(int j=1;j<=20;j++){
		z[i][j]=rand()%a;
		if(z[i][j]!=0)z[i][j]=1;
		else l++;
		cout<<"■";
	}
//	cout<<"  ";
//	for(int j=1;j<=20;j++)
//		cout<<setw(2)<<z[i][j];
	cout<<endl;
	}
	
	dx();
			
	while(nl<l)
	{
		cout<<"当前模式(输入俩21调整模式):翻  "; 
		cin>>jx>>jy;
		if(jx==21||jy==21)ms=2;
		if(ms==1){
		if(z[jx][jy]==0){cout<<"GAMEOVER";w=0;break;}
		shi(jx,jy);}
		else if(ms==2){
		cout<<"当前模式:标  "; 
		cin>>jx>>jy;
		if(z[jx][jy]==1){cout<<"GAMEOVER";w=0;break;}
		c[jx][jy]=3;nl++;}
		cout<<"  ";
		for(int i=1;i<=20;i++)out(i);
		cout<<endl;
		for(int i=1;i<=20;i++){out(i);
		for(int j=1;j<=20;j++){
			if(c[i][j]==1){
				if(x[i][j]==0)cout<<"  ";
				else cout<<setw(2)<<x[i][j];}
			else if(c[i][j]==3)cout<<"★";
			else cout<<"■";
		}if(i==1)cout<<"   剩余:"<<l-nl;cout<<endl;}
	    ms=1; 
	}
	if(w)
		cout<<"You win";
	//■
}

回复

31 条回复,欢迎继续交流。

正在加载回复...