用easyx制作一个扫雷游戏

3 篇文章 0 订阅
2 篇文章 0 订阅

游戏介绍:

这段代码是一个简易版的扫雷游戏的主程序部分。游戏分为几个主要部分:

  1. **主函数 (main)**:负责整个游戏流程的控制。首先,它初始化了一个枚举类型的变量 input 用于存储玩家的选择。然后,进入一个循环,在这个循环中,它会显示游戏菜单,接收玩家的输入,并根据玩家的选择调用不同的游戏难度。当玩家选择退出时,循环结束。
  2. **游戏界面设置函数 (GameInterface)**:根据玩家选择的难度调整游戏窗口的大小。这里使用了 system 函数来调用操作系统的命令,mode con cols=x lines=y 是用于调整Windows命令提示符窗口大小的命令。
  3. **游戏菜单显示函数 (Menu)**:负责在屏幕上显示游戏菜单。菜单中列出了不同的游戏难度选项和退出选项。
  4. **游戏执行函数 (Playgame)**:这是游戏的核心部分,但在这段代码中并没有完全实现。根据传入的行、列和地雷数初始化游戏板,并开始游戏逻辑

部分代码:

#include "game.h"

void Menu();
void Playgame(int row, int col, int minenum);
void GameInterface(int cmd);

enum option{
	EXIT,
	EASY,
	NORMAL,
	HARD
};

int main(){

	enum option input;
	srand((unsigned)time(NULL));
	do
	{
		//**修改窗口颜色,大小**
		GameInterface(0);
		//打印菜单
		Menu();
		//处理玩家选项
		printf("请选择:");
		fflush(stdin);
		scanf("%d", &input);
		switch (input)
		{
		case EASY:
			//根据玩家所选难度调整窗口大小,以容纳整个棋盘
			GameInterface(EASY);
			//Playgame函数的三个参数:行,列,雷数
			Playgame(9, 9, 10);
			system("pause");
			break;
		case NORMAL:
			GameInterface(NORMAL);
			Playgame(16, 16, 30);
			system("pause");
			break;
		case HARD:
			GameInterface(HARD);
			Playgame(16, 30, 60);
			system("pause");
			break;
		case EXIT:
			break;
		default:
			printf("输入错误,请重新输入!\n");
			system("pause");
			break;
		}
	} while (input);
}


void GameInterface(int cmd){
	switch (cmd)
	{
		//难度不同,棋盘大小也不同
	case EASY:
		system("mode con cols=55 lines=30");
		break;
	case NORMAL:
		system("mode con cols=85 lines=45");
		break;
	case HARD:
		system("mode con cols=140 lines=45");
		break;
	default:
		system("color B0");
		system("mode con cols=55 lines=25");
		break;
	}
}


void Menu(){
	system("cls");
	printf("\n\n\n\n\n");
	printf(MENUBLANK" Mine Sweeper\n");
	printf("\n\n");
	printf(MENUBLANK"*************************\n");
	printf(MENUBLANK"******    1.Easy    *****\n");
	printf(MENUBLANK"*************************\n");
	printf(MENUBLANK"******    2.Normal  *****\n");
	printf(MENUBLANK"*************************\n");
	printf(MENUBLANK"******    3.Hard    *****\n");
	printf(MENUBLANK"*************************\n");
	printf(MENUBLANK"******    0.Exit    *****\n");
	printf(MENUBLANK"*************************\n");
	printf("\n");
}

void Playgame(int row, int col, int minenum){

	char** mineboard;//雷区
	char** showboard;//展示区

	//为“二维数组”动态分配内存
	//多分配了两行两列是为了方便后续排雷
	//边上的一圈和中间的位置就可以统一处理了
	mineboard = MallocArr2d(row + 2, col + 2);
	if (mineboard == NULL){
		exit(EXIT_FAILURE);
	}
	showboard = MallocArr2d(row + 2, col + 2);
	if (showboard == NULL){
		exit(EXIT_FAILURE);
	}

	//初始化雷区和展示区
	Initboard(mineboard, row + 2, col + 2, ' ');
	Initboard(showboard, row + 2, col + 2, '#');

	//为雷区安放炸弹
	Setmine(mineboard, row, col, minenum);
	//排雷
	Findmine(showboard, mineboard, row, col, minenum);

	//释放动态分配的内存
	FreeArr2d(mineboard, row + 2);
	mineboard = NULL;
	FreeArr2d(showboard, row + 2);
	showboard = NULL;
}

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天若有情673

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值