【项目】—— 扫雷小游戏(C语言)
一、游戏介绍
使用C语言实现的一个扫雷小游戏,这里没有美观的鼠标可点触窗口,只有初学者面对的让人心酸的黑框框,以及需要键盘输入坐标的输入模式。
游戏功能
- 打开游戏,有一个进入游戏和退出游戏的界面
- 进入游戏,展示一个 9 × 9 9\times9 9×9的方格,每个位置都是空格
- 玩家开始输入排雷的坐标,如果该位置是雷,则游戏结束,玩家失败
- 如果该位置不是雷,则显示周围一圈的8个格子雷的数量,玩家继续输入坐标排雷
- 所有非雷位置全部排查时,游戏结束,玩家胜利
目录
二、设计思路和结构
1. 设计思路
- 定义一个二维数组作为扫雷的范围,该数组是一个 9 × 9 9\times9 9×9的方格,随机在10个位置上设置10个雷
- 再次定义一个二维数组作为展示给用户的界面,该界面是一个 9 × 9 9\times9 9×9的方格,方格中没有字符
- 用户每次输入坐标,若是该坐标在扫雷数组上设置地雷,则会在展示界面的该坐标上显示
*
,并提示游戏结束 - 若是该界面上没有地雷,则会计算该坐标周围 3 × 3 3\times3 3×3个方格中有几个地雷,并将数字填入展示界面的方格中,展示给用户
- 用户每次输入坐标,对应位置显示出该位置的数字或雷,直到用户踩到地雷或排除所有雷时游戏结束
2. 设计结构
test.c
:测试源文件,含有main函数,是进入程序的入口game.c
:游戏源文件,实现游戏内的函数定义game.h
:游戏头文件,包含源文件需要包含的头文件,实现宏定义,对游戏内的函数进行声名
三、相关问题
1. 如何设置地雷
先将二维数组初始化成全0,调用随机函数,生成 9 × 9 9\times9 9×9范围内的坐标,并将该地雷所在坐标置为数字1
2. 如何计算输入坐标的数字
- 在扫雷数组的输入坐标周围的 3 × 3 3\times3 3×3位置上含有地雷的数字为1,没有地雷的数字为0,所以将这9个位置中存储的数字加起来就是该位置周围地雷的数量,将该数字以字符形式展示给展示界面即可
- 但是扫雷数组最边上一圈的坐标周围并没有 3 × 3 3\times3 3×3范围的数字,若是直接相加则会数组越界,所以我们在上下左右各延展一行或一列,该行或该列不放置地雷
3. 如何判断输赢
- 输赢是在用户输入坐标后进行判断,用户每次输入坐标都会有计数器计算用户排过多少雷。
- 用户输入坐标,若该位置在扫雷数组中是地雷,则游戏结束,玩家失败
- 若是该位置不是地雷,计算周围地雷数量,放置在展示数组的指定坐标中,此时判断未排除的数量是否达到雷的数量,若是达到则游戏结束,玩家胜利。
四、头文件实现
1. 引入头文件
#pragma once //防止头文件重复包含
#include <stdio.h>
#include <stdlib.h> //用于调用随机种子
#include <time.h> //设置随机种子的参数需要调用该库函数time
#include <Windows.h> //用于执行一些命令行(后面再看)
2. 定义常量
#define ROW 9 //设置行
#define COL 9 //设置列
#define COUNT 10 //设置地雷数量
#define ROWS ROW+2 //扫雷数组实际的行
#define COLS COL+2 //扫雷数组实际的列
3. 函数声明
void InitBoard(char board[ROWS][COLS], int rows, int cols, char c); //初始化
void SetMine(char mine[ROWS][COLS], int row, int col