在学习c语言的过程中,如果能试着完成一个简单的小游戏,对初学者来说,会不会感觉小有成就呢?至少在设计、完成这个小游戏的过程中,我们可以发现很多问题并解决它,这也是一种成长。
本文将从经典的扫雷小游戏出发,用c语言设计、实现完成一个简单版本的扫雷游戏。欢迎交流,共同进步。
游戏设计流程分析
设计一个完整的游戏包括建立它的实现流程(算法框架)以及设计一套完整精确的代码。下图给出了扫雷小游戏的一个算法步骤大致流程框图,可以按照这个流程进行设计游戏以及代码实现,在代码实现过程中,再进行各个功能的具体设计与修改。
游戏代码实现
打印游戏菜单
在用户开始点击操作时,需要显示出来一个游戏界面,因此,在这里可以首先建立一个test.c的源文件,源文件内部建立一个显示菜单的菜单函数menu();
void menu()
{
printf("************************\n");
printf("*** 欢迎来到扫雷游戏 ***\n");
printf("***** 1.play *****\n");
printf("***** 0.exit *****\n");
printf("************************\n");
}
test.c中需要完成一个程序入口函数:main(),主函数中一开始就调用test()完成菜单打印:
int main()
{
test();
return 0;
}
void test()
{
int input = 0;
srand((unsigned int)time(NULL));
do {
menu();
printf("请输入选项(1 or 0):>");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择出错,请重新选择!\n");
break;
}
} while (input);
}
雷的生成及排查
在游戏体验者进行扫雷之前,游戏需要随机生成雷的位置和信息,以及进行雷的排查工作,这里采用二维数组建立存放雷的相关信息,下面是对游戏中实现某些功能的函数的调用流程,即可以按照该流行进行功能函数的设计,在函数game()中进行
void game()
{
//雷的信息存储
//1.存放布置好的雷的信息
char mine[ROWS][COLS] ={
0 };//'0'-不是雷
//2.存放排查出的雷的信息
char show[ROWS][COLS] = {
0};//'*'-神秘-未排查
//初始化mine 和 show
InitBoard(mine,ROWS,COLS,'0');
InitBoard(show, ROWS, COLS, '*');
//打印棋盘
//DisplayBoard(mine, ROW, COL);
//DisplayBoard(show, ROW, COL);
//布置雷
SetMine(mine,ROW,COL);
DisplayBoard(mine, ROW, COL);
//排查雷
FindMine(mine,show,ROW,COL);
}
建立game.c源文件,在其内部完成功能函数的定义
InitBoard()函数完成对雷信息和需要显示出来的雷的界面信息的初始化
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
void InitBoard(char board[ROWS][COLS], int rows, int cols,char set)
{
int i = 0;
int j = 0;
for (i = 0; i < rows; i++)
{
for (j = 0; j