扫雷是可以理解为在一个大的方框内进行的小游戏
第一步:创建2个11*11数组,为什么创建2个数组?
如果是一个数组,那么在上面布置雷之后,需要将棋盘打印,那么一个数组很不方便,不然就把雷跟无雷的区域全部打印了出来
我们先初始化
为什么9*9的棋盘要用11*11的数组?
避免计算边缘雷的个数时发生数组越界,创建11*11的数组,可以只打印其中的9*9数组
为什么要用char类型?
第一个数组:如果一个棋盘用来布置雷区,另一个棋盘用来传输数据和打印,那么就方便很多,隐藏雷区,而雷区和非雷区可以用字符‘1’和字符‘0’表示,因为我们在输入一个位置后,需要显示周围有几个雷,那么字符‘1’跟数字1就可以灵活转换,比如字符‘1’减去‘0’就可以转化为数字1,同理字符‘2’减去字符‘0’就转化为了数字2
第二个数组:用“*”表示整个棋盘的初始化,给对方打印整个棋盘,供其选择,而‘*’是字符类型
数组1
char Arr[9][9]={0}
数组2
char Urr[9][9]={0}
第二步:
给这两个棋盘装填字符
第一个数组:先全部填充为字符0
第二个数组:全部填充为字符*
第三步:
布置雷区,生成随机位置在第一数组,将选中的10个位置从‘0’改为‘1’,,字符1就是雷
第四步:
先打印第二个数组,让对方选择位置
第五步:
排查雷区
这里先插入一个“输入”,然后在这个有效输入位置,计算周围雷的个数
怎么计算周围雷的个数?
采用计算坐标的形式,如:左边(x)(y-1) 右边(x)(y+1)
然后每个字符减去字符0,就变成了数字1或者0,然后就可以相加得到雷的个数,最后返回给对方输入的那个位置,进行赋值,这样就告诉了对方这个位置有几个雷
如何将第一个数组计算得到的数字转化到第二个数组?
第一个数组返回值得到一个数字,然后用对方输入的那个位置进行赋值接受,返回值加上字符0就转化为了字符1、2、3、4~,列如
int n = bor(Arr,row,low);//用n接收bor(Arr,row,low)//计算雷的个数
{return Arr[x-1][y]+Arr[x+1][y];
}对方输入的Run【x】【y】= n + ‘0’ ;//将对方输入的位置赋值成转化的字符
第六步:
再次打印第二个数组,让对方观察下一步的位置
另外,这个扫雷并不能与真正的扫雷相比,只是大概的一个框架,作用与三子棋差不多,用来检验之前学的知识