前言
附上扫雷小游戏链接,先来体味感受下真正的扫雷是怎样的
本文章为手把手讲解实现C语言扫雷(好好看,相信不会太难的说)
当你自己完成后一定成就感幸福感满满的!!
问题描述
用C语言实现小游戏扫雷初级版(9x9棋盘/10个地雷)
工具
vs2019
基本思路和流程
扫雷的规则
尽快找出雷区中的所有不是地雷的方块
根据点击格子出现的数字找出所有非雷格子
同时避免踩雷,踩到一个雷即全盘皆输
代码实现思路
1.菜单选择开始或者退出游戏
2.初始化并打印雷区
3.第一次免雷和周边雷排查
4.雷区展开
5.判断胜利
6.游戏结束后展示玩家用时
实现步骤
模块化
1.test.c :写整个游戏实现思路流程
2.game.c: 写游戏实现思路中的各个函数的定义,完成函数内容实现函数功用
3.game.h :引用需要用到的头文件,以及对各个自定义函数的声明
(其他模板上方只需要加上 #include “game.h”,避免重复引用相同头文件)
注:模块化便于管理和修改
菜单界面
比较简单直接上代码
代码
//菜单界面 void menu() { printf("************************\n"); printf("******* 1.play *******\n"); printf("******* 0.exit *******\n"); printf("************************\n"); }
选择的实现
玩家通过输入1/0 来选择是开始游戏还是退出游戏
用do while语句实现比较适合
do { menu(); printf("请输入选择:>"); scanf("%d", &input); switch (input) { case 0: printf("成功退出游戏!\n"); break; case 1: printf("欢迎进入游戏!\n"); game(); break; default: printf("输入出错,请重新输入\n"); break; } } while (input);
初始化和打印雷区
考虑问题
因为我们在设计算法时需要统计坐标周围8个方位雷的个数
假如要统计边界坐标周围雷的个数,那么就会有数组越界的问题
那我们就要在9X9的边界多上一圈元素,也就要定义11X11的数组元素
这些元素我们显示给玩家看就可以了
雷区
使用9行9列的二维数组来表示,元素类型是char
1. char mine[ROWS][COLS] = { 0 };//存放雷的信息 2. char show[ROWS][COLS] = { 0 };//存放排查出的雷的信息
使用宏定义
1.推高代码可读性,后续代码中遇到,方便理解含义
2.提高扩展性,如果将来要修改棋盘尺寸,代码修改会很方便
#define ROW 9 #define COL 9//显示规格 #define ROWS ROW+2 #define COLS COL+2//实际规格 #define EASY_COUNT 10//布置雷个数
初始化
棋盘
//初始化棋盘 void InitBoard(char board[ROWS][COLS], int rows,int cols) { int i = 0; for (i = 0; i < rows; i++)//行 { int j = 0; for (j = 0; j < cols; j++)//列 { board[i][j] = '0'; } } }
设置雷
//布置雷 void SetMine(char board[ROWS][COLS], int row, int col) { int count = COUNT; while (count) { //生成随机下标 int x = rand() % row + 1;//取余后的范围是0-8 int y = rand() % col + 1;//加一后符合游戏范围 if (board[x][y] != '1') { board[x][y] = '1'; count--;//设置10个后 count为0 不再循环 } } }