C语言扫雷小游戏萌新版(2)

  Hello大家好!今天接着上一篇文章来讲~~~我们上一篇着重讲的是前半部分,但是扫雷小游戏个人认为虽然全部都是重点,但是最重点的是放雷和排雷的代码的编写!这里我们以基础9*9为标准,放10个雷。这样,在game.h中我们可以先进行如下操作:(代码不是连续的,只供理解,具体代码参考萌新版1)

#define EASY_COUNT 10   //定义了代表10的字符
void SetMine(char board[ROWS][COLS],int row,int col)  //布置雷

    布置10个雷,我们使用while循环,即进一次循环随机布置一个雷。注意随机哦~随机用rand生成的。rand()%9+1就可以表示1~9的行、列的具体位置了。我们需要每控制一次就count--,而不是在while循环里面count--;之后在game.h里面添加相应的头文件。如果在此时我们进行测试,雷的位置会直接显示在大屏幕上。接下来,我们就需要编写排查雷FindMine的代码了。

  while(1)设置循环的条件。在每次进行排查雷的时候,我们可以都进行一个提示标语,提示我们输入正确的坐标。在这里我们可以设置坐标(x,y)的条件,即

if(x>=1&&x<=9&&y>1&&y<=9)//输入合法坐标
{
   if(mine[x][y])=='1')
      printf("很遗憾,你被炸死了\n");
}
else printf("输入坐标非法,请重新输入\n");

  上面显示的是被炸死的情况和输入非法坐标的情况。当输入没有被炸死的情况的时候,我们第一是要求显示x,y坐标周围的八个坐标中有几个雷。这里我们可以设置一个新函数GetMineCount,在选的周围的八个位置中的坐标所含有的炸弹次数加起来;我们知道字符0所对应的ASKII码值是48,以此类推我们可以算出坐标周围炸弹的数量(因为我们所设置的炸弹的字符为1)。最关键的点在于,这种类似于九宫格的坐标我们需要会算。就是以中间的为初始的坐标,向周围来拓展。

//下面是八个坐标加起来的值
int GetMineCount(char mine[ROWS][COLS],int x, int y)
{
	return mine[x - 1][y] +
		mine[x - 1][y - 1] +
		mine[x][y - 1] +
		mine[x + 1][y - 1] +
		mine[x + 1][y] +
		mine[x + 1][y + 1] +
		mine[x][y + 1] +
		mine[x - 1][y + 1]-8*'0';
}

  这样,代码还存在一个漏洞:我们只有在炸到雷的地方才能break,排查完雷没有地方可以点的时候(只剩雷)这样是没办法停止游戏。这里我们可以再FindMine里面int win,我们排查一次雷就可以win++,直到全部的雷排查完,可以显示出排雷成功~还存在的一个漏洞是由于刚开头,我们的随机数随机生成的,可能当开始就会点到雷哦qwq

  然后这样之后,我们要屏蔽到之前的DisplayBoard,这样就屏蔽掉最开始显示的有雷的界面了,就可以直接开始游戏了~

  • 19
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值