C语言---扫雷游戏的实现

2024-06-01 1026阅读

1.扫雷游戏的分析和设计

需要创建3个文件夹

C语言---扫雷游戏的实现
(图片来源网络,侵删)

test.c----扫雷游戏的测试

game.c----扫雷游戏的实现

game.h----扫雷游戏的实现

雷的信息使用二维数组存放

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

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

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

• 默认随机布置10个雷

• 可以排查雷

 ◦ 如果位置不是雷,就显⽰周围有⼏个雷
 ◦ 如果位置是雷,就炸死游戏结束
 ◦ 把除10个雷之外的所有⾮雷都找出来,排雷成功,游戏结束

扫雷的过程中,布置的雷和排查出的雷的信息都需要存储,所以我们需要⼀定的数据结构来存储这些信息

创建两个数组,一个存放雷,1是雷,0不是雷

第二个数组就存放排查出的雷的信息,避免太过混乱,

越界访问会导致程序崩溃

把存放雷的数组扩大一圈,防止越界,上下左右多一行和列,

1.使用两个二维数组来实现

2.如果棋盘的大小是99,数组的大小就给1111

因为要扩大一圈后的大小就是11*11

3.数组使用字符数组就行

2.扫雷游戏的代码实现

game.h

#pragma once
#include //直接把头文件放在.h文件里面
#include 
#include 
#pragma once
#define ROW 9//行
#define COL 9//列
#define ROWS ROW+2//11
#define COLS COL+2
#define    EASY_count 10//简单版本设置的雷为10
//初始化棋盘
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);//11
//打印棋盘
void DisplayBoard(char board[ROWS][COLS], int row, int col);//9
//布置雷
void SetMine(char mine[ROWS][COLS], int row, int col);
//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

 test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"//包含自己的头文件,就能引用game.h中自己定义的一些条件
void menu()
{
    //打印菜单
    printf("**********************************************\n");
    printf("***************   1 .  play    ***************\n");
    printf("***************   0 .  exit    ***************\n");
    printf("**********************************************\n");
}
void game()
{
    //游戏逻辑  11 * 11
    char mine[ROWS][COLS] = {0};//存放雷的信息
    char show[ROWS][COLS] = {0};//存放排查出的雷的信息
    //初始化棋盘,初始化的是11*11的规格,因为最外面的外围要保证咱们得程序不越界
    InitBoard(mine,ROWS,COLS,'0');//把11行11列传过去
    InitBoard(show, ROWS, COLS,'*');
    //打印棋盘,就只打印9*9的部分
    DisplayBoard(show, ROW, COL);
    //DisplayBoard(mine, ROW, COL);测试一下
    //布置雷,只在9*9的部分布置雷
    SetMine(mine, ROW, COL);//把雷放到mine数组内,因为mine数组就是存放雷的信息的数组
    //DisplayBoard(mine, ROW, COL);
    //排查雷,在9*9的部分排查雷
    FindMine(mine,show,ROW,COL);
}
void test()
{
    int input = 0;//这个变量必须放外面,如果放里面的话,
                  //每次循环进行就会将input重新赋值为0
    srand((unsigned int)time(NULL));//要包含头文件,使rand产生随机值,就是产生随机的雷
    do
    {
        menu();//打印菜单
        printf("请选择:");
        scanf("%d",&input);
        //判断输入的值
        switch (input)
        {
        case 1:
            game();//输入1之后进入游戏
            printf("扫雷\n");
            break;
        case 0:
            printf("退出游戏\n");
            break;
        default://输入错误
            printf("选择错误,重新选择\n");
            break;
        }
    }while (input);//一直玩的情况,玩完一把接着玩,输入input,是1就接着玩
}
int main()
{
    test();
    return 0;
}

game.c 

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"//包含自己的头文件
//初始化棋盘,规格是11*11
void InitBoard(char board[ROWS][COLS], int rows, int cols,char set)
{
    for (int i = 0; i 
VPS购买请点击我

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

目录[+]