C语言实现扫雷游戏

    首先,参考我之前写的《C语言实现三子棋游戏》《浅谈用C语言实现猜数字游戏》,里面详细写到了实现游戏函数之前要打印的菜单之类的前置部分,这里就不再过多的阐述,我们知道,要创造一个游戏之前肯定要打印一个菜单提示玩家,此时我们可以随便在game函数里面设置一个打印函数,测试一下当前的菜单有没有错,写一部分测一部分养成好习惯,程序设计以及测试运行如下:

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

void menu()
{
printf("***********************************\n");
printf("************  1.play  *************\n");
printf("************  0.exit  *************\n");
printf("***********************************\n");
}


void game()
{
printf("扫雷\n");

}


void test()
{
    int input = 0;
    do
    {
        menu();
        printf("请选择:>");
        scanf("%d", &input);
        switch(input)
        {
          case 1:
           game();
            break;
          case 0:
           printf("退出游戏\n");
            break;
          default:
           printf("选择错误,请重新输入\n");
            break;
        }
    }
     while(input);
}


int main()
{
test();
return 0;
}

   那么现在我们就开始来写游戏的主逻辑也就是在game.c里面写代码。在开始写代码之前,我们可以通过扫雷游戏成品来做一定的思考,这样我们写出来的代码才是通过思考后得出来的好代码,我们在浏览器可以随便找到一个扫雷小程序,如下图操作所示:

   当我们按下其中的一个方块,如图中显示2,这就代表着以2为中心,周围单位距离为1个方块的这个范围内一共有两2雷,也就是2周围的8个小方块里面有2个雷,一次类推如果写的是3,证明周围8个位置有3个雷,如果像下图这样:

   那就证明3周围7个方块有3个雷,因为2是我们已经排除了的一个位置,大概规则玩法就是如此,排雷的基本思想就是我们选择一个坐标,如果这个坐标不是雷,我们就不会给炸,游戏继续进行,那么回到我们自己的思考,如果我们要创造一个扫雷游戏,那么最先开始的我们就要在自己设计的棋盘里面布置雷,比如现在设计一个9x9的棋盘,布置10个雷,要记录雷的位置,那么其实就相当于利用一个9x9的二维数组来存储数据,如图所示布置10个雷:

   但是如果我们要标识是雷,与不是雷这个情况,我们可以用上0或者1来记录,1是雷,0不是,他们可以是整型,也可以是字符类型,等会会给大家讲到选择哪种类型。

  接下来继续我们的思考,假设我们用1在这些地方布置了雷,如下图所示:

   那么如果现在要排查图中红色标识的这个位置,如下图这样画:

   那么这里就会出现矛盾了,当我们选择图中红色标识的位置的时候,可以看到它的周围只有一个雷,我们知道扫雷游戏的规则是只要选中的位置不是雷的话,会变成对应的数字来提示玩家这个位置周围有多少个雷,那么此时我们选中图中红色标识的这个位置,其对应位置上的1到底是告诉我们周围有多少个雷的意思还是告诉我们这个位置是雷呢,所以这里就冲突了,有的人可能就会说,那么把0和1换成符号表示此处有雷或者无雷即可,这样的方法确实可以,但是我们不采用,原因等一会会说到,那么我们现在用另一种解决方法,这里我们选择再画一个一模一样大小棋盘:

   右边的就是我们新画的棋盘,放的就是排查出的信息,也就是玩家点击任意方块随之打印呈现在他眼前的信息,告诉他选择的位置对应周围的雷数,那么左边的棋盘就是我们程序员布置好雷的信息,这样像刚才冲突1的这种情况就解决了。

  然后,右边的这个呈现在玩家眼前的棋盘

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值