【C语言】实现扫雷游戏

2024-02-27 1284阅读

温馨提示:这篇文章已超过432天没有更新,请注意相关的内容是否还可用!

文章目录

  • 前言
  • 一、扫雷游戏的分析和设计
    • 1.1扫雷游戏的功能说明
    • 1.2数据结构的分析
    • 1.3文件结构设计
    • 二、扫雷游戏的代码实现
    • 总结

      前言

      详细介绍扫雷游戏的思路和实现过程,并用随机数实现埋雷。


      一、扫雷游戏的分析和设计

      1.1扫雷游戏的功能说明

      • 使用控制台实现经典的扫雷游戏

      • 游戏可以通过菜单实现继续玩或者退出游戏

      • 扫雷的棋盘是9*9的格⼦

      • 默认随机布置10个雷

      • 可以排查雷

      ◦ 如果位置不是雷,就显示周围有几个雷

      ◦ 如果位置是雷,就炸死游戏结束

      ◦ 把除10个雷之外的所有雷都找出来,排雷成功,游戏结束

      1.2数据结构的分析

      扫雷的过程中,布置的雷和排查出的雷的信息都需要存储,所以我们需要⼀定的数据结构来存储这些信息。 因为我们需要在9×9的棋盘上布置雷的信息和排查雷,我们首先想到的就是创建⼀个9×9的数组来存放信息。

      如果这个位置布置雷,我们就存放1,没有布置雷就存放0。

      【C语言】实现扫雷游戏

      假设我们排查(2,5)这个坐标时,我们访问周围的⼀圈8个黄色位置,统计周围雷的个数是1。

      【C语言】实现扫雷游戏

      假设我们排查(8,6)这个坐标时,我们访问周围的⼀圈8个黄色位置,统计周围雷的个数时,最下面的三个坐标就会越界,为了防止越界,我们在设计的时候,给数组扩大⼀圈,雷还是布置在中间的9×9的坐标上,周围⼀圈不去布置雷就行,这样就解决了越界的问题。所以我们将存放数据的数组创建成11*11是比较合适。

      【C语言】实现扫雷游戏

      • 再继续分析,我们在棋盘上布置了雷,棋盘上雷的信息(1)和非雷的信息(0),假设我们排查了某一个位置后,这个坐标处不是雷,这个坐标的周围有1个雷,那我们需要将排查出的雷的数量信息记录存储,并打印出来,作为排雷的重要参考信息的。那这个雷的个数信息存放在哪里呢?如果存放在布置雷的数组中,这样雷的信息和雷的个数信息就可能或产生混淆和打印上的困难。

      • 这里我们肯定有办法解决,比如:雷和非雷的信息不要使用数字,使用某些字符就行,这样就避免冲突了,但是这样做棋盘上有雷和非雷的信息,还有排查出的雷的个数信息,就比较混杂,不够方便。

      • 这里我们采用另外⼀种方案,我们专门给⼀个棋盘(对应⼀个数组mine)存放布置好的雷的信息,再给另外⼀个棋盘(对应另外⼀个数组show)存放排查出的雷的信息。这样就互不干扰了,把雷布置到mine数组,在mine数组中排查雷,排查出的数据存放在show数组,并且打印show数组的信息给后期排查参考。

      • show数组开始时初始化为字符 ‘*’,为了保持两个数组的类型⼀致,可以使用同⼀套函数处理,mine数组最开始也初始化为字符’0’,布置雷改成’1’。如下如:

        mine数组:

        【C语言】实现扫雷游戏

        show数组:

        【C语言】实现扫雷游戏

        对应的数组为:

        【C语言】实现扫雷游戏


        1.3文件结构设计

        我们设计三个文件:

        【C语言】实现扫雷游戏


        二、扫雷游戏的代码实现

        game.h:

        #include 
        #include 
        #include 
        #define EASY_COUNT 10
        #define ROW 9
        #define COL 9
        #define ROWS ROW+2
        #define COLS COL+2
        //初始化棋盘
        void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);
        //打印棋盘
        void DisplayBoard(char board[ROWS][COLS], int row, int col);
        //布置雷
        void SetMine(char board[ROWS][COLS], int row, int col);
        //排查雷
        void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
        

        game.c:

        #include "game.h"
        void InitBoard(char board[ROWS][COLS], int rows, int cols, char set) 
        {
         	int i = 0;
         	for (i = 0; i 
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]