废话:
今天是周日,是一个令人非常开心的日子。
虽然楼下已经被一层层的铁门给围住,是不是地还有救护车的声音。但是,为了8.21的那场CSDN的考试,我还是早在7点钟就起来打游戏···哦不是刷水题····不对不对,是学习C++ ~~
······(懒得说了,就是没提交成功,50多分变成了0)
游戏名称:
扫雷小游戏3.0
游戏玩法:
在扫雷小游戏 1.0 版本上加了标记功能,只需在输入的坐标后加上1或0,表示是标记这个点还是翻开这个点
更新内容:
- 屏幕展现优化(差不多)
- 代码优化
- 新增标记功能(1或0)
- 新增剩余雷的数量显示(每标记一次雷数量减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;
}
小小的请求:
点个赞再走嘛~~
结束啦~~~