扫雷小游戏 3.0 版本

废话:

今天是周日,是一个令人非常开心的日子。
虽然楼下已经被一层层的铁门给围住,是不是地还有救护车的声音。但是,为了8.21的那场CSDN的考试,我还是早在7点钟就起来打游戏···哦不是刷水题····不对不对,是学习C++ ~~
······(懒得说了,就是没提交成功,50多分变成了0)

游戏名称:

扫雷小游戏3.0

游戏玩法:

在扫雷小游戏 1.0 版本上加了标记功能,只需在输入的坐标后加上1或0,表示是标记这个点还是翻开这个点

更新内容:

  1. 屏幕展现优化(差不多)
  2. 代码优化
  3. 新增标记功能(1或0)
  4. 新增剩余雷的数量显示(每标记一次雷数量减1)

更新代码:

初始雷数输出:
cout<<"剩余雷数:"<<boon<<endl<<endl;

剩余雷数输出:
cout<<"剩余雷数:"<<boon-biaojishu<<endl<<endl;

被标记时的函数:

if(biaoji==1)//如果标记当前这个点 
	{	
		biaojishu++;//标记数++
		
		if(a[x][y].chu=='F')//已经被标记过了 
		{
			biaojishu--;
		}
		
		cout<<"剩余雷数:"<<boon-biaojishu<<endl<<endl;//输出剩余雷数:
		
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=n;j++)
			{
				if(i==x&&j==y)
				{
					cout<<'F';//被标记展现
				}
				else
				{
					cout<<a[i][j].chu;
				}
			}
			
			cout<<endl;
		}
						
		a[x][y].chu='F';//赋值
	}

新增变量:
int biaoji,biaojishu;//判断是否标记,被标记的数量

更新后总代码:

#include<bits/stdc++.h>

using namespace std;


//结构体/ 
struct aa{
	
	int lei,fan;//雷,初始,范围 
	
	char chu; 
	
}a[20][20];


//变量/
int bo,bo2,ans;//雷的数量 

int n,boon;

int biaoji,biaojishu;//判断是否标记,被标记的数量 

int tot=1;

int liansheng=0;//连胜次数 


//初始化函数/ 
void dingyi()
{
	srand((unsigned)time(NULL));
	
	for(int i=0;i<=n;i++)
	{
		for(int j=0;j<=n;j++)
		{
			a[i][j].chu='x';//初始 
		}
	}
	
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{		
			a[i][j].lei=rand()%2;//雷 
			
			if(ans==boon)
			{
				a[i][j].lei=0;
			}
			
			if(a[i][j].lei==1)
			{
				ans++;
			}
		}
	}
	
	bool ss=0;
	
	if(ans<boon)
	{
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=n;j++)
			{		
				if(a[i][j].lei==0)
				{
					a[i][j].lei=1;
					
					ans++;
				}
				
				if(ans==boon)
				{
					ss=1;
					break;
				}
			}
			
			if(ss==1)
			{
				break;
			}
		}
	}
	
	for(int i=1;i<=n;i++)//范围 
	{
		for(int j=1;j<=n;j++)
		{
			if(a[i-1][j].lei==1)
			{
				a[i][j].fan++;
			}
			
			if(a[i][j-1].lei==1)
			{
				a[i][j].fan++;
			}
			
			if(a[i+1][j].lei==1)
			{
				a[i][j].fan++;
			}
		
			if(a[i][j+1].lei==1)
			{	
				a[i][j].fan++;
			}
				
			if(a[i-1][j-1].lei==1)
			{
				a[i][j].fan++;
			}
				
			if(a[i+1][j+1].lei==1)
			{
				a[i][j].fan++;
			}
				
			if(a[i+1][j-1].lei==1)
			{
				a[i][j].fan++;
			}
				
			if(a[i-1][j+1].lei==1)
			{
				a[i][j].fan++;
			}
		}
	} 
}


//初始化函数(输出)/ 
void shuchu()
{
	cout<<"剩余雷数:"<<boon<<endl<<endl;
	
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cout<<a[i][j].chu;
		}
		
		cout<<endl;
	}
}


//寻找函数/ 
void xunzhao(int x,int y,int biaoji)
{
	if(biaoji==1)//如果标记当前这个点 
	{	
		biaojishu++;
		
		if(a[x][y].chu=='F')//已经被标记过了 
		{
			biaojishu--;
		}
		
		cout<<"剩余雷数:"<<boon-biaojishu<<endl<<endl;
		
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=n;j++)
			{
				if(i==x&&j==y)
				{
					cout<<'F';
				}
				else
				{
					cout<<a[i][j].chu;
				}
			}
			
			cout<<endl;
		}
						
		a[x][y].chu='F';
	}
	else
	{ 
		bo=0;
	
		if(a[x][y].lei==1)//踩到雷 
		{
			for(int i=1;i<=n;i++)
			{
				for(int j=1;j<=n;j++)
				{
					cout<<a[i][j].lei;
				}
			
				cout<<endl;
			}
		
			cout<<"\n\nQWQ\n";
		
			bo=1;
			
			return ;
		}
		else
		{		
			if(a[x][y].lei==0)
			{
				if(a[x][y].chu=='F')//翻开被标记的这个点,不是雷,标记数++ 
				{
					biaojishu--;
				}
				
				cout<<"剩余雷数:"<<boon-biaojishu<<endl<<endl;
				
				for(int i=1;i<=n;i++)
				{
					for(int j=1;j<=n;j++)
					{
						if(i==x&&j==y)
						{
							cout<<a[i][j].fan;
						}
						else
						{
							cout<<a[i][j].chu;
						}
					}
				
					cout<<endl;
				}
			
				a[x][y].chu=a[x][y].fan+'0';	
			
				ans--;
			
				if(ans==0)
				{
					cout<<"\n\nwin!!!\n\n";
				
					bo2=1;
				}
			}
		}
	} 
}


//执行函数/ 
void zhixing()
{
	int z=0;
	
	ans=0;

	cout<<"请输入矩阵边长:";
					
	cin>>n;
					
	cout<<"请输入雷的数量:";
					
	cin>>boon;
					
	cout<<"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
				
	dingyi(); 
					
	shuchu();
					
	int x,y;
				
	ans=n*n-ans;
		
	while(bo==0)
	{
		cin>>x>>y>>biaoji;
			
		cout<<"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
			
		xunzhao(x,y,biaoji);
			
		if(bo==1)
		{
			tot=0;
			
			return;	
		}
		else
		{
			if(bo2==1)
			{
				cout<<"是否继续?0/1"<<endl;
					
				cin>>z;
				
				tot=z;
				
				liansheng++;
				
				break;
			}
		}
	}
}


//主函数/ 
int main()
{  
	while(tot==1)
	{
		zhixing();
	}
	
	cout<<"你的连胜次数为:"<<liansheng<<"次"<<endl; 
	
	return 0;
}

小小的请求:

点个赞再走嘛~~

结束啦~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

harmis_yz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值