资讯专栏INFORMATION COLUMN

C语言实现初级扫雷

Rango / 1671人阅读

摘要:文章目录一游戏简介二代码实现调用函数打印菜单函数函数初始化函数布置雷函数排雷函数三总代码一游戏简介一款小游戏,一张棋盘可以自己设计,,,都可以,或是添加一些自己喜欢的元素布满许多未知是雷或是安全的格子,输入坐标,若触雷,游戏结束,反之,显

文章目录

一、游戏简介

二、代码实现

1.调用test函数

2.打印菜单(menu函数)

3.game函数

4.初始化(Initmine函数)

5.布置雷(SetMine函数)

6.排雷(FindMime函数) 

 三、总代码

1.game.h

2.game.c

3.test.c

一、游戏简介

一款小游戏,一张棋盘(可以自己设计,9*9 , 12*12 , 15*15  都可以 , 或是添加一些自己喜欢的元素)布满许多未知是雷或是安全的格子,输入坐标,若触雷,游戏结束,反之,显示周围8个格子的雷的个数

二、代码实现

1.首先调用test 函数

void test(){	int input = 0;	srand((unsigned int)time(NULL));	do	{		menu();		printf("请选择:>");		scanf("%d", &input);		switch (input)		{		case 1:			//扫雷			game();			break;		case 0:			printf("退出游戏/n");			break;		default:			printf("选择错误/n");			break;		}	} while (input);}

2.打印菜单,进行选择

void menu(){	printf("***********************/n");	printf("*****  1. play     ****/n");	printf("*****  0. exit     ****/n");	printf("***********************/n");}

3.实现game函数

void game(){	//创建数组	char mine[ROWS][COLS] = { 0 };//存放布置好的雷的信息	char show[ROWS][COLS] = { 0 };//存放排查出的雷的信息	//初始化mine数组为全"0"	InitBoard(mine, ROWS, COLS, "0");	//初始化show数组为全"*"	InitBoard(show, ROWS, COLS, "*");	//打印棋盘	//DisplayBoard(mine, ROW, COL);	//布置雷	SetMine(mine, ROW, COL);	DisplayBoard(show, ROW, COL);	//DisplayBoard(mine, ROW, COL);	//排雷	FindMine(mine, show, ROW, COL);}

4.初始化棋盘及打印(可以按照自己的兴趣自己设计)

void InitBoard(char board[ROWS][COLS], int rows, int cols, char set){	int i = 0;	int j = 0;	for (i = 0; i < rows; i++)	{		for (j = 0; j < cols; j++)		{			board[i][j] = set;		}	}}void DisplayBoard(char board[ROWS][COLS], int row, int col){	//1~9	int i = 0;	int j = 0;	//列号的打印	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");	}}

5.布置雷

void SetMine(char mine[ROWS][COLS], int row, int col){	int count = EASY_COUNT;	while (count)	{		int x = rand() % row + 1;		int y = rand() % col + 1;		if (mine[x][y] == "0")		{			mine[x][y] = "1";			count--;		}	}}

6.排雷

void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col){	int x = 0;	int y = 0;	int win = 0;	while (win < row * col - EASY_COUNT)	{		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			{				//计算x,y坐标周围有几个雷				int n = get_mine_count(mine, x, y);				show[x][y] = n + "0";				DisplayBoard(show, row, col);				win++;			}		}		else		{			printf("输入坐标非法,无法排雷,请重新输入/n");		}	}	if (win == row * col - EASY_COUNT)	{		printf("恭喜你,排雷成功/n");		DisplayBoard(mine, row, col);	}}

排雷内部的函数,用来在show棋盘上显示雷的个数 

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";}

三、总代码

1.game.h

#pragma once//头文件的包含#include #include #include //符号的声明#define ROW 9#define COL 9#define ROWS ROW+2#define COLS COL+2#define EASY_COUNT 10//函数的声明//初始化棋盘void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);//打印棋盘void DisplayBoard(char board[ROWS][COLS], int row, int col);//布置雷void SetMine(char mine[ROWS][COLS], int row, int col);//排查雷void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

2.game.c

#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void InitBoard(char board[ROWS][COLS], int rows, int cols, char set){	int i = 0;	int j = 0;	for (i = 0; i < rows; i++)	{		for (j = 0; j < cols; j++)		{			board[i][j] = set;		}	}}void DisplayBoard(char board[ROWS][COLS], int row, int col){	//1~9	int i = 0;	int j = 0;	//列号的打印	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");	}}void SetMine(char mine[ROWS][COLS], int row, int col){	int count = EASY_COUNT;	while (count)	{		int x = rand() % row + 1;		int y = rand() % col + 1;		if (mine[x][y] == "0")		{			mine[x][y] = "1";			count--;		}	}}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";}void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col){	int x = 0;	int y = 0;	int win = 0;	while (win < row * col - EASY_COUNT)	{		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			{				//计算x,y坐标周围有几个雷				int n = get_mine_count(mine, x, y);				show[x][y] = n + "0";				DisplayBoard(show, row, col);				win++;			}		}		else		{			printf("输入坐标非法,无法排雷,请重新输入/n");		}	}	if (win == row * col - EASY_COUNT)	{		printf("恭喜你,排雷成功/n");		DisplayBoard(mine, row, col);	}}

3.test.c

#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void menu(){	printf("***********************/n");	printf("*****  1. play     ****/n");	printf("*****  0. exit     ****/n");	printf("***********************/n");}void game(){	//创建数组	char mine[ROWS][COLS] = { 0 };//存放布置好的雷的信息	char show[ROWS][COLS] = { 0 };//存放排查出的雷的信息	//初始化mine数组为全"0"	InitBoard(mine, ROWS, COLS, "0");	//初始化show数组为全"*"	InitBoard(show, ROWS, COLS, "*");	//打印棋盘	//DisplayBoard(mine, ROW, COL);	//布置雷	SetMine(mine, ROW, COL);	DisplayBoard(show, ROW, COL);	//DisplayBoard(mine, ROW, COL);	//排雷	FindMine(mine, show, ROW, COL);}void test(){	int input = 0;	srand((unsigned int)time(NULL));	do	{		menu();		printf("请选择:>");		scanf("%d", &input);		switch (input)		{		case 1:			//扫雷			game();			break;		case 0:			printf("退出游戏/n");			break;		default:			printf("选择错误/n");			break;		}	} while (input);}int main(){	test();	return 0;}

这只是扫雷的基础版,还有很多功能没有实现,我将会继续改进,感谢观看

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/123360.html

相关文章

  • C语言学习笔记—P12(扫雷游戏<初级>+图解+题例)

    目录  前言:●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!                                                                       ——By 作者:新晓·故知                                                                       ...

    lykops 评论0 收藏0
  • C语言实现入门级小游戏——扫雷

    摘要:上一期咱们用语言实现了三子棋的小游戏语言实现三子棋今天我们再来写个扫雷的游戏,说起扫雷,相信大家都不陌生,可能许多朋友还是玩扫雷的高手。      上一期咱们用C语言实现了三子棋的小游戏  C语言实现三子棋       今天我们再来写个扫雷的游戏,说起扫雷,相信大家都不陌生,可能许多朋友还是...

    nevermind 评论0 收藏0
  • C/C++游戏项目详细教学:《扫雷

    摘要:扫雷最原始的版本可以追溯到年一款名为方块的游戏。两年后,汤姆安德森在的基础上又编写出了游戏地雷,由此奠定了现代扫雷游戏的雏形。年,微软公司的罗伯特杜尔和卡特约翰逊两位工程师在系统上加载了该游戏,扫雷游戏才正式在全世界推广开来。 扫雷最原始的版本可以追溯到1973年一款名为方块的游戏。 不久,...

    meteor199 评论0 收藏0
  • [ C语言 ] 扫雷 ------> 用C语言实现game2

    摘要:函数游戏菜单请选择扫雷游戏退出游戏选择错误解析函数内部利用时间戳,形成随机数,主要目的是实现游戏中地雷的随机埋放。 前言 本篇文章使用C语言实现简单小游戏---扫雷。(文章最后有完整代码链接) 想必大多数人都玩过或者了解过扫雷的游戏规则,但是在这里,我们在一起重温一下扫雷的游戏规则,也更好...

    I_Am 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<