c语言 我使用c语言基础做了一个老少皆宜的“国民小游戏扫雷“
Posted 意愿三七
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言 我使用c语言基础做了一个老少皆宜的“国民小游戏扫雷“相关的知识,希望对你有一定的参考价值。
前言
扫雷小游戏是一款非常优秀悠闲的小游戏,在各个pc端上都会有他的身影出现,我们学习了编程,为何不自己做一个游扫雷小戏游戏呢?说做就做,来先看一下大概的效果图。
在开始前,先来看看我们的游戏功能实现,要在哪一个文件中具体实现什么,要分开实现,这样方便我们未来的一个调整优化。
test.c - 扫雷游戏的测试
game.c - 游戏的实现
game.h - 游戏的函数声明
游戏菜单
menu函数实现简易菜单
游戏的开始我们是写了一个do循环(条件是输入的选项),如果选择的不等于0 ,那我们是一直在玩的。
地雷盘的实现
- 我们先来看看棋盘
我们这个小程序的规定是
雷----1
不是雷----0
但是可以看见上面的 蓝色1 ,这个并不是雷 ,**而是提示信息(提示周围有几个雷,**但是这个 蓝1和我们的 1冲突了,我们的1 设定的是雷,但是我们也需要提示信息,所以我们的解决方法是,创建2个棋盘,一个是放雷的,还有一个是显示周围雷的信息,
布雷的:
显示提示信息的:
以上是布置雷的相关想法,接下来来看一下,怎么实现排查雷吧。
盘查雷
首先有一个问题,来看下图
我要是想看这里有没有雷那么 ,它右边的一圈,和下面的周围是不是没有雷盘了,那可能会影响到游戏。
解决方法:
我们上面的灰色棋盘,是9*9的 ,但是为了不让他越界,我们可以试着扩大2行2列,变成11 * 11 :
我们先去game.h 定义我们需要的变量
test.c
初始化棋盘
mine的棋盘全部放0
show的棋盘全部放*
game.h定义
game.c 实现
char set 这个参数是可以改变的 ,前台传过来的值,这边是可以变化的,增加了灵活性
打印棋盘
test.c
game.h
game.c 函数的实现
void DisPlayBoard(char board[ROWS][COLS], int row, int col)
{
int i = 0;
int j = 0;
printf("------------扫雷游戏-------------\\n");
//打印列号
for ( i = 0; i <= col; i++)
{
printf("%d ",i);
}
printf("\\n");
for ( i = 1; i <= row; i++)
{
printf("%d ",i);
for ( j = 1; j <= col; j++)
{
printf("%c ",board[i][j]);
}
printf("\\n");
}
printf("------------扫雷游戏-------------\\n");
}
具体效果是这样的
以上代码棋盘显示出来了
布置雷
game.h定义雷
game.c实现设置雷的函数
算法思想:
1:布置10个雷
2:让这个10个雷下标随机
3:种雷
void SetMine(char mine[ROWS][COLS], int row, int col)
{
//布置10个雷
int count = 10;
while (count)
{
//生产随机的下标
int x = rand() % row + 1;
int y = rand() % col + 1;
if (mine[x][y] == '0') { //看看当前格子是不是空的
mine[x][y] = '1'; //如果是空的就种一颗雷
count--;
}
}
}
test.c引用
可以看看自己布置的雷
成功了
排查雷
game.h定义一个变量 ,用于调整游戏难度,这个是雷的个数
game.h
game.c
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
//1、输入排查的坐标
//2.检查坐标处是不是雷
//(1) 是雷 = 炸死了
//(2) 不是雷 - 统计坐标周围有几个雷- 存储排查雷的信息到show数组,游戏继续
int x = 0;
int y = 0;
int win = 0; //定义一个变量,如果全部排查完了就 提示排查成功
while (win < row*col - EASY_Count) //game.h 定义的
{
printf("请输入要排查雷的坐标");
scanf("%d%d", &x, &y);
if (x >= 1 && x <= row && y >= 1 && y <= col)
{
if (mine[x][y] == '1')
{
printf("很遗憾你被炸死了\\n");
DisPlayBoard(mine, row, col);
break;
}
else
{
//不是雷 统计周围有几个雷,xy
int count = get_mine_count(mine,x,y);
show[x][y]=count+'0';
//显示排查的信息
DisPlayBoard(show,row,col);
win++; //每进来一次就 记录一次
}
}
else
{
printf("坐标不合法,请重新输入\\n");
}
}
if (win==row * col -EASY_Count) //如果计数的等于 空格子数就赢了
{
printf("恭喜你排雷成功\\n");
DisPlayBoard(mine, row, col);//看一下怎么炸死的
}
}
显示雷的个数信息,不需要在头文件定义,因为它只是在FindMine函数里面起作用,加static 只在本文件里使用,别的文件不可以使用
//雷的个数信息
static int get_mine_count(char mine[ROWS][COLS],int x , int y )
{
return mine[x - 1][y] +
mine[x - 1][y - 1] +
mine[x][y - 1] +
mine[x + 1][y - 1] +
mine[x + 1][y] +
mine[x + 1][y + 1] +
mine[x][y + 1] +
mine[x - 1][y + 1] - 8 * '0';
}
可以看看效果
刚刚那个代码放出来排查的信息
test.c 显示出来
来看看效果 这里图片已经是正常的了
来看看排雷成功的效果(这里是把雷改成80,棋盘是9*9 81格)
以上差不多扫雷基础已经成功了,当然这还有好多可以扩展的,展开,标记雷
源代码
其他文章推荐
以上是关于c语言 我使用c语言基础做了一个老少皆宜的“国民小游戏扫雷“的主要内容,如果未能解决你的问题,请参考以下文章
c语言 win32api 创建一个按钮,点击按钮后,按钮消失?