c语言初学者如何代码实现 扫雷 游戏
Posted 编程好难哈哈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言初学者如何代码实现 扫雷 游戏相关的知识,希望对你有一定的参考价值。
扫雷游戏的简介
uu们,相信大家应该对扫雷游戏不陌生,你们知道这个游戏的实现原理吗?
让我们一起通过代码和解析来了解它吧!
我这里是用c语言实现的。
这个游戏代码可放在三个文件,分别为test.c game.c game.h
接下来会一一细讲。
game.h
这是头文件,可在此定义一些整个项目常用到的固定变量,如
#define ROW 9
#define COL 9 这是定义雷阵的大小,9行9列
头文件也用于声明函数,在项目的其余文件引用该文件,即可调用头文件中声明的函数
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define COL 9 //打印出来的雷阵数组大小 9*9
#defineROWS 11
#define COLS 11 //便于计算雷数目的雷阵数组的实际大小 11*11
#define COUNT 10
void qingkong(char board[ROWS][COLS], int row, int col,char set);//在test.c引用该头文件即可调用以下函数,
void setboard(char board[ROWS][COLS], int row, int col);//函数的定义则放在game.c文件中
Display(char board[ROWS][COLS], int row, int col);
void pailei(char board[ROWS][COLS], char show[ROWS][COLS], int rows, int cols, int row, int col);
test.c
test.c 是游戏的实现逻辑
#include"game.h" //记得引用头文件方可调用函数
int main()
test(); //主函数应简洁明了
return 0;
void test()
int input = 0;
srand((unsigned int)time(NULL)); //设置随机数生成的函数,用于设置雷的产生位置
do
menu();
printf("请玩家选择:>"); //玩家输入数字选择,1则进入游戏;0则退出游戏
scanf("%d", &input);
switch (input)
case 1:
game(); //游戏的实现函数
break;
case 0:
printf("退出游戏");
break;
default:
printf("选择错误,请重新选择");
break;
while (input);
void game()
char board[ROWS][COLS] = 0 ; //定义雷阵二维数组
char show[ROWS][COLS] = 0 ; //show 展示出来的雷阵数组
qingkong(board, ROWS, COLS,'0'); //初始化雷阵二维数组,使得数组元素为同一元素,雷阵数组全部为'0'
qingkong(show, ROWS, COLS,'*'); //展示打印数组全部为'*'
setboard(board, ROW, COL); //布置雷阵,存放雷
Display(show, ROW, COL); //打印数组的函数
pailei(board, show, ROWS, COLS,ROW,COL); //排雷的函数
void menu()
printf("***** 扫雷游戏 *****\\n"); //菜单选择界面
printf("***** 1 play *****\\n");
printf("***** 0 exit *****\\n");
printf("*********************\\n");
game.c
该文件用于定义函数
#include"game.h" //该文件亦需要引用头文件,例如#define ROW 9 需要用到这些变量
//初始化二维数组
void qingkong(char board[ROWS][COLS], int rows, int cols,char set )
int i = 1; //初始化二维数组,使其全部元素相同
int j = 1;
for (i = 0; i < rows; i++)
for (j = 0; j< cols; j++)
board[i][j] = set;
//存放雷
void setboard(char board[ROWS][COLS], int row, int col)
int count = COUNT;
while (count)
int x = rand() % row + 1; //存放雷,一共十个雷
int y=rand() % col + 1; //生成随机坐标对应二维数组元素,布置雷,放于1—9列;1—9行 中
if (board[x][y] == '0')
board[x][y] = '1';
count--;
//打印雷阵数组
Display(char board[ROWS][COLS], int row, int col)
int i = 0;
int j = 0;
for (i = 0; i <= row; i++) //打印雷阵二维数组
printf("%d ", i);
//打印出来的雷阵数组
printf("\\n"); //0 1 2 3 4 5 6 7 8 9
//1 * * * * * * * * *
//2 * * * * * * * * *
//3 * * * * * * * * *
//4 * * * * * * * * *
//5 * * * * * * * * *
//6 * * * * * * * * *
//7 * * * * * * * * *
//8 * * * * * * * * *
//9 * * * * * * * * *
for (i = 1; i <= row; i++)
printf("%d ",i);
for (j = 1; j <= col; j++)
printf("%c ", board[i][j]);
printf("\\n");
//排雷函数的定义
void pailei(char board[ROWS][COLS], char show[ROWS][COLS], int rows, int cols, int row, int col)
int a = 0;
while(a<row*col-10) //循环次数为9*9-10(10为雷的数目)
printf("请输入坐标进行排雷>:");
int n = 0;
int m = 0; //输入坐标如 9 9 进行选择排雷
scanf("%d%d", &n, &m);
if (n >= 1 && n <= row && m >= 1 && m <= col)
if (board[n][m]=='0')
int r = num(board, n, m); //r为周围雷数目;该数目需要我们定义函数实现
show[n][m] = r+'0'; //数字加'0'等于对应的数字字符,参考ascii码表
a++;
system("cls"); //清屏,使得屏幕只有一个雷阵
Display(show, ROW, COL);
else
printf("很遗憾你被炸死了\\n");
Display(board, ROW, COL); //游戏结束后展示雷的存放位置
break;
else
printf("坐标非法,无法排雷\\n");
//求坐标周围雷的数目
static int num(char board[ROWS][COLS], int n, int m)
return board[n - 1][m - 1] + //查看坐标周围的八个坐标,雷坐标字符则为'1';非雷坐标则为'0'
board[n - 1][m] +
board[n - 1][m + 1] + //数字字符减去'0'为对应的数字,不理解可参考ascii码表
board[n][m - 1] +
board[n][m + 1] +
board[n + 1][m - 1] +
board[n + 1][m] +
board[n + 1][m + 1] - 8* '0';
该程序代码的不足之处
该程序只能一次只能排雷一个,如果坐标周围没有雷,也不会展开一片
就像这样
0 1 2 3 4 5 6 7 8 9
1 1 * * * * * * * *
2 * * * * * * * * *
3 * * 2 * * * * * *
4 * * * * * * * * *
5 * * * * * * * * *
6 * * * * * 0 * * *
7 * * * * * * 0 * *
8 * * * * * * * * *
9 * * * * * * * * *
最后
谢谢大家的观看浏览,本人也是c语言初学者,希望大家能多多评论提出建议
后面的雷阵展开一片,我也会努力将其实现!有不懂的小伙伴亦可关注我看后续。
以上是关于c语言初学者如何代码实现 扫雷 游戏的主要内容,如果未能解决你的问题,请参考以下文章
C语言实现小游戏篇我接触的第一款电脑游戏,你可以永远相信 “ 扫雷 ” 。[ C语言实现 ] [ 超详细,超清楚 ] [ 有代码 ]