recording
#include<iostream>
#include<time.h>
using namespace std;
//定义一个二维数组为扫雷做准备,随机布雷,
int boomMap[10][10] = //创建一个二维数组
{
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
};
//在点击开始后,随机将一些数变成雷(1),将雷周围的数字由其周围雷数改为相应的数字
//写一个函数用来生成雷,参数为需要的雷数
void boomInit(int boomNum)
{
for(int i = 0;i<boomNum;i++)
{
//随机两个数
int row = rand()%10;
int col = rand()%10;
//定义一个临时数组来存储之前随机的两个数
int tempArray[20][2];
for(int ti=0;ti<i+1;ti++)//遍历该临时数组
{
if(tempArray[ti][0]==row&&tempArray[ti][1]==col)//这次随机的两个数与之前随机的数两两分别比较,要求不同时相等
{
i--;//如果同时相等则i减一
break;//跳出当前for语句
}else{//如果不同时相等
//将这两个数存入临时数组中
tempArray[i][0]=row;
tempArray[i][1]=col;
//将雷将入该数组对应位置
boomMap[row][col]=1;
break;//跳出当前for语句
}
}
}
}
//定义一个函数参数为一个元素的下标,判断该元素周围有几个雷
int boomJudge(int row,int col)
{
int count = 0;//定义一个变量存有几个雷
//遍历该数周围一圈
for(int i=row-1;i<=row+1;i++)
{
for(int j=col-1;j<=col+1;j++)
{
if((i!=row||j!=col)&&(boomMap[i][j]==1||boomMap[i][j]==3))//判断是否为雷
{
count++;//为雷则计数加一
}
}
}
return count;//返回雷数
}
//定义一个函数翻开指定元素
void cellOpen(int row,int col)
{
if(boomMap[row][col]<2)//判断选择的元素是否被翻开(小于2则没有被翻开)
{
boomMap[row][col] += 2;//是则给该元素值加2以翻开此元素
}
}
//定义一个函数用来形成地图形式,和变换
void mapInit()
{
//遍历数组
for(int i =0;i<10;i++)
{
for(int j = 0;j<10;j++)
{
//判断数组元素值以给出不同的方案内容
switch(boomMap[i][j]<2)//判断的值只有1或0
{
case 1://第一种
cout<<"■";//输出该符号以表示当前元素未被翻看
break;//跳出当前switch
case 0://第二种
switch(boomMap[i][j])//在该值不小于2时,看该值等于几
{
case 2://为2
if(boomJudge(i,j)==0)//判断下标为i,j的元素周围有无雷
{
cout<<" ";//无则输出空格
}else//有则
{
cout<<boomJudge(i,j)<<" ";//输出该函数的返回值
}
break;//跳出当前switch语句
case 3://为3
cout<<"¤";//输出炸弹
break;//跳出当前switch
}
break;//跳出当前switch
}
}
cout<<endl;//换行输出
}
}
//定义一个函数来判断选择翻开的元素是否为炸弹,如果不是则判断其周围有几个炸弹,参数为元素下标
int gameJudge()//定义一个函数判断游戏什么时候结束
{
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
if(boomMap[i][j]==3)
{
cout<<"gameover"<<endl;
return 1;//结束函数
}
}
}
return 0;
}
int main()
{
srand(time(nullptr));
boomInit(10);
int row,col;
for(int i=0;;i++)
{
mapInit();
if(gameJudge())//判断是否猜雷
{
break;//是则跳出循环结束程序
}
cin>>row>>col;
cellOpen(row,col);
recursion(row,col);
}
system("pause");
return 0;
}