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语言游戏超详解扫雷游戏完整版,细节满满!!

C语言实现扫雷(初阶)

C语言实现小游戏篇我接触的第一款电脑游戏,你可以永远相信 “ 扫雷 ” 。[ C语言实现 ] [ 超详细,超清楚 ] [ 有代码 ]

扫雷游戏C语言实现完美版非常详细的讲解,看完必会

C语言扫雷小游戏的实现(附详细代码)