目录
前言
如何实现扫雷游戏?请看下文
代码思路:
计算机的扫雷游戏是将棋盘上所有非雷的坐标全部打开,就赢得了游戏,而在这途中不小心翻到雷,则游戏结束,需要重新开始
1.首先要在棋盘上随机植入雷
2.判断你翻开的坐标是否为雷,是雷,游戏结束需要重新开始,不是雷,则需要显示,翻开坐标附近是否有雷,有几个雷
3.根据条件2,当翻开的格子周围没有雷时,会展开一大片,直到附近有雷,并显示雷量后停止
一、实现游戏大致框架
创建三个文件game.h、game.c、test.c
game.h:存放函数、符号声明,使用game.h的函数、字符声明需要引用game.h文件
#include "game.h"
game.c:函数定义
test.c:游戏框架
打印选择菜单
void menu()
{
printf("********************\n");
printf("***** over : 0 *****\n");
printf("***** play : 1 *****\n");
printf("********************\n");
}
可以选择开始游戏或者结束游戏
具体实现:
使用do while循环与switch语句
void Test()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();//菜单选择
printf("请选择:>");
scanf("%d", &input);
switch (input)//选择是否玩游戏
{
case 0:
printf("游戏结束!\n");
break;
case 1:
game();//游戏制作
break;
default:
printf("指令错误,请重新输入!!!\n");
break;
}
} while (input);//循环游戏
}
int main()
{
Test();//创建项目
return;
}
二、框架实现
为了更好的实现游戏,我将为这个游戏设置两个棋盘,一个装雷(隐藏),一个为玩家操作棋盘(找雷等一些列操作在此面板实施),为了更好的创建并修改棋盘,我将棋盘大小用字符常量表示,装雷的棋盘要比用户操作的棋盘大2,这样表示的原因是很好的扫描坐标四周的雷数
以上图为例,翻开(9,9)坐标 ,扫描四周有没有雷,在棋盘9*9的情况下,肯定会越界访问,但是在装雷的棋盘上扩展一横一列,防止了坐标出现越界访问的情况,所有装雷的棋盘要比用户操作棋盘要大2
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
游戏实现
创建棋盘
char mine[ROWS][COLS] = { 0 };//创建储存雷的框架
char show[ROWS][COLS] = { 0 };//创建用户操作界面
初始化框架
InitBoard(mine, ROWS, COLS,'0');//初始化框架
InitBoard(show, ROWS, COLS, '*');//初始化框架
InitBoard()函数初始化棋盘,char set存储着初始化字符 ,想传什么样的字符直接传进去
void InitBoard(char board[ROWS][COLS], int row, int col, char set)
{
int x = 0;
int y = 0;
for (x = 0; x < row; x++)
{
for (y = 0; y < col; y++)
{
board[x][y] = set;
}
}
}
打印棋盘
ShowBoard()函数可以打印棋盘,改变棋盘大小可以直接更改头文件上的字符常量ROW,COL的值
ShowBoard(mine, ROW, COL);//打印框架
ShowBoard(show, ROW, COL);//打印框架
void ShowBoard(char board[ROWS][COLS], int row, int col)
{
int x = 0;
int y = 0;
printf("------------------扫雷------------------\n");
printf(" ");
printf("|");
for (x = 1; x <= col; x++)//打印外框坐标
{
printf(" %d ", x);
printf("|");
}
printf("\n");
for (y =