赞
踩
扫雷游戏是C语言初学者都需要练习的一个小项目,本文所实现的扫雷为最基础的版本(即一次只能扫一格),实际的扫雷游戏会有一种功能:在玩家点击格子的时候会向外展开,直到即将遇到雷为止。本文目前暂无实现这一功能。
int main() { int i = 0; srand((unsigned int)time(NULL)); do { menu();//打印菜单 scanf("%d", &i); switch (i) { case 1: game(); break; case 0: printf("游戏结束\n"); break; default: printf("输入错误,请重新输入\n"); break; } } while (i); return 0; }
为随机数生成器,后续布置雷的时候需要利用到rand()函数。
用于玩家多次游玩,直到玩家选择游戏结束,则终止循环。
menu()函数为菜单函数,用于打印简易菜单供玩家选择。
void menu()
{
printf("*************************\n");
printf("****** 1、开始游戏 ******\n");
printf("****** 0、结束游戏 ******\n");
printf("*************************\n");
}
运用switch-case函数,若玩家输入"1",则开始游戏;若玩家输入"0",则游戏结束,同时循环中止;若玩家输入其他数字,则会提示玩家并让玩家重新输入,直到输入的数字为"0"或者"1"为止。
本扫雷游戏的实现依靠两个二维数组:mine数组用于系统随机布置雷,show数组展现给玩家,供玩家进行排雷。当除了雷以外的格子都被玩家选中之后,玩家获得胜利。
void game() { //初始化 char mine[ROWS][COLS] = { 0 };//存放布置雷的信息 char show[ROWS][COLS] = { 0 };//存放玩家操作的信息 //初始化布置雷界面 Init_board(mine, ROWS, COLS, '0'); //初始化玩家操作界面 Init_board(show, ROWS, COLS, '*'); //随机生成雷 Mine_set(mine, ROW, COL); //打印扫雷界面 Display_board(show, ROW, COL); //排雷 Mine_sweep(mine, show, ROW, COL); }
用于创建并初始化二维数组,作为扫雷的界面
本项目采用9*9的格子,为了便于日后的修改,此处采用了define ROW和COL的方式。
除了ROW和COL之外,额外定义了ROWS和COLS这两个变量名。玩家在扫雷的时候,若没有选到雷,被选中的格子会显示周围雷的个数,但边界处的格子在计算时会有一部分的格子在边界外,如果不加以处理的话不利于之后的计算。因此,本项目选择额外在最外围加了一圈,这样的即便是边界处也可以计算周围的雷的个数。
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
该函数声明为扫雷界面初始化函数声明,将mine初始化为字符’0’,show初始化为’*'(此处通过建立char类型的变量set,赋予set不同的值,可以将界面初始化为任何字符,避免了需要建立两个函数分别初始化mine和show)
void Init_board(char board[ROWS][COLS], int row, int col, char set)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
board[i][j] = set;
}
}
}
该函数用于随机生成雷。利用count计数,若该处未布置雷,则放置字符’1’代表雷(此处放置’1’便于之后的计算周围雷的个数),count相应减1。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。