扫雷小游戏2.0
详情请见:主页->专栏->小游戏->扫雷小游戏1.0->游戏操作
昨天才说大概要8.21之后更新,但由于我提高组模拟赛爆0 ak了入门组模拟赛,所以 提前了······(提高组的模拟赛题都没读就结束了)
void dingyi()
{
srand((unsigned)time(NULL));//随机化
for(int i=0;i<=n;i++)//n*n的矩阵
{
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 xunzhao(int x,int y)
{
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)
{
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;//z为胜利时输入的变量,与后文tot作用相同
ans=0;
cout<<"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";//清屏
cout<<"请输入矩阵边长(2~8):";//自定义
cin>>n;
cout<<"请输入雷的数量(1<=s;
cin>>boon;
cout<<"\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;
cout<<"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
xunzhao(x,y);
if(bo==1)//如果输了
{
tot=0;//不再继续游戏
return;
}
else
{
if(bo2==1)//如果赢了
{
cout<<"是否继续?0/1"<<endl;//询问是否继续
cin>>z;//输入z
tot=z;//将z赋值给tot
liansheng++;//连胜次数++
break;//退出循环
}
}
}
}
int main()
{
while(tot==1)//只要tot=1就继续游戏
{
zhixing();//执行游戏
}
cout<<"\n\n\n\n\n 你的连胜次数为:"<<liansheng<<"次"<<endl; //输出连胜次数
return 0;
}
bo2//判断是否胜利
n//矩阵边长
boon//雷的数量
tot//判断是否继续游戏
liansheng//连胜次数
(这些只是新增变量中比较重要的变量,不是全部的变量)
1.矩阵边长不得超过19,如想将边长定义得更大需修改:
struct aa{
int lei,fan;//雷,初始,范围
char chu;
}a[20][20];<-把这里扩大即可
2.雷的数量不得超过矩阵的面积,不然会卡掉!!!
#include
using namespace std;
struct aa{
int lei,fan;//雷,初始,范围
char chu;
}a[20][20];
int bo,bo2,ans;//雷的数量
int n,boon;
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()//初始化输出
{
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)
{
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)
{
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;
}
}
}
}
int tot=1;
int liansheng=0;//连胜次数
void zhixing()//执行
{
int z=0;
ans=0;
cout<<"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
cout<<"请输入矩阵边长(2~8):";
cin>>n;
cout<<"请输入雷的数量(1<=s;
cin>>boon;
cout<<"\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;
cout<<"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
xunzhao(x,y);
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;
}
各位学霸dalao们点个赞、关注一下再走嘛~~~
如果可以,打赏一下
(3.0版本大概在8.21或者9月以后更新)
结束啦~~~