前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >扫雷游戏(用C语言实现)

扫雷游戏(用C语言实现)

作者头像
风中的云彩
发布2024-11-07 21:44:27
发布2024-11-07 21:44:27
7300
代码可运行
举报
文章被收录于专栏:C/C++的自学之路C/C++的自学之路
运行总次数:0
代码可运行

去感受一棵草、一缕风、一场日落,去重新触摸真正的生活。 

前言 

这是我自己做的第一个小项目---扫雷游戏。后期我会继续制作其他小项目并开源至博客上。

geme.h文件

代码语言:javascript
代码运行次数:0
复制
#define _CRT_SECURE_NO_WARNINGS
#define ROW 9
#define LIN 9
#define ROWS ROW+2
#define LINS LIN+2
#define EASY_COUNT 10
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu();
void game();
void make_map(char arr[ROWS][LINS], int rows, int lines, char set);
void printf_map(char arr[ROWS][LINS], int rows, int lines);
void set_mine(char arr[ROWS][LINS], int row, int lin);
int get_mine_count(char mine[ROWS][LINS], int x, int y);
void find_mine(char mine[ROWS][LINS], char show[ROWS][LINS], int row, int lin);

1. 在创立的头文件中,存放各种函数声明、宏定义、以及引入不同库函数。 2. 使用宏定义时,可以更加方便的修改整个游戏的参数,不需要一个个改变量。 

test.c文件

代码语言:javascript
代码运行次数:0
复制
#include "game.h"

void menu()//打印菜单函数
{
	printf("**欢迎来到扫雷游戏~**\n");
	printf("******( ̄▽ ̄~)~******\n");
	printf("**********************\n");
	printf("********1.PLAY********\n");
	printf("********0.EXIT********\n");
	printf("**********************\n");
}

void game()//游戏主体函数
{
	char mine[ROWS][LINS] = { 0 };//准备布置地雷的数组
	char show[ROWS][LINS] = { 0 };//准备展示地雷的数组
	make_map(mine, ROWS, LINS,'0');//形成布置地雷的数组(全为'0')(失败看到)
	make_map(show, ROWS, LINS, '*');//形成展示地雷的数组(全为'*')(成功看到)
	printf_map(show, ROW, LIN);//打印展示地雷'*'数组
	set_mine(mine, ROW, LIN);//随机生产地雷
	find_mine(mine,show ,ROW, LIN);//搜查九宫格的地雷数量
}

int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));//创立随机种子,为生成随机数做准备。
	do
	{
		menu();//先打印菜单函数
		printf("请选择:1或者0\n");
		scanf("%d", &input);//让玩家选择玩不玩
		switch (input)
		{
		case 1:
			printf("进入扫雷\n");
			game();//开始游戏函数
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误,请重新选择\n");
			break;
		}
	} while (input);//如果是0则退出,如果1则进入游戏,如果是其他数字则再次循环重新选择。
	return 0;
}

game.c文件

代码语言:javascript
代码运行次数:0
复制
#include "game.h"

void make_map(char arr[ROWS][LINS],int rows,int lines,char set)//制作地图函数
{
	int i = 0;
	for (i = 0; i < rows; i++)
	{
		int j = 0;
		for (j = 0; j < lines; j++)
		{
			arr[i][j] = set;
		}
	}
}

void printf_map(char arr[ROWS][LINS], int rows, int lines)
{
	int i = 0;
	printf("-------扫雷-------\n");//界面分开线
	printf("0");
	for (i = 1; i <= rows; i++)
	{
		printf(" %d", i);
	} //第一行的行标注数
	printf("\n");
	for (i = 1; i <= rows; i++)
	{
		int j = 0;
		printf("%d", i);//第一列的行标注数
		for (j = 1; j <= lines; j++)
		{
			printf(" %c", arr[i][j]);//这一行全部'*'号
		}
		printf("\n");//实现换行
	}
}

void set_mine(char arr[ROWS][LINS], int row, int lin)
{
	int count = EASY_COUNT;//确定地雷的数量
	while (count)
	{
		int x = rand() % row + 1;
		int y = rand() % lin + 1;//保障产生地雷在规定范围之内
		if (arr[x][y] == '0')//避免重复布雷
		{
			arr[x][y] = '1';//'1'代表地雷
			count--;
		}
	}
}

int get_mine_count(char mine[ROWS][LINS],int x,int y)//每次玩家选择成功之后排查九宫格地雷数
{
	return (mine[x - 1][y - 1] + mine[x - 1][y] + mine[x - 1][y + 1] +
		mine[x][y - 1]  + mine[x][y + 1] +
		mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] - 8 * '0');
}//字符可以以ASCLL编码的形式进行加减。

void find_mine(char mine[ROWS][LINS], char show[ROWS][LINS], int row, int lin)
//主要的操作函数
{
	int x = 0, y = 0,win =0;
	while (1)
	{
		printf("请输入你要排查的坐标\n");
		scanf("%d%d", &x, &y);
		if (x >= 1 && x <= row && y >= 1 && y <= lin)//确保输入范围正确
		{
			if (mine[x][y] == '1')//中招了
			{
				printf("Game Over\n~( ̄▽ ̄~)~\n");
				printf("地雷图如下所示:\n");
				printf_map(mine, ROW, LIN);//失败后打印'0 1'图
				break;
			}
			else//成功
			{
				int count = get_mine_count(mine, x, y);
				show[x][y] = (count + '0');//在'*'图上展示数字(九宫格地雷数)
				printf_map(show, ROW, LIN);//失败后打印'* num'图
				win++;
			}
		}
		else
		{
			printf("请重新输入!\n");
		}
		if (win == row * lin - EASY_COUNT)
		{
			printf("排雷成功!\n~( ̄▽ ̄~)~\n");
			printf_map(mine, ROW, LIN);
		}
	}
}

致谢

  感谢您花时间阅读这篇文章!如果您对本文有任何疑问、建议或是想要分享您的看法,请不要犹豫,在评论区留下您的宝贵意见。每一次互动都是我前进的动力,您的支持是我最大的鼓励。期待与您的交流,让我们共同成长,探索技术世界的无限可能!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言 
  • geme.h文件
  • test.c文件
  • game.c文件
  • 致谢
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档