游戏介绍:
这段代码是一个简易版的扫雷游戏的主程序部分。游戏分为几个主要部分:
- **主函数 (
main
)**:负责整个游戏流程的控制。首先,它初始化了一个枚举类型的变量input
用于存储玩家的选择。然后,进入一个循环,在这个循环中,它会显示游戏菜单,接收玩家的输入,并根据玩家的选择调用不同的游戏难度。当玩家选择退出时,循环结束。 - **游戏界面设置函数 (
GameInterface
)**:根据玩家选择的难度调整游戏窗口的大小。这里使用了system
函数来调用操作系统的命令,mode con cols=x lines=y
是用于调整Windows命令提示符窗口大小的命令。 - **游戏菜单显示函数 (
Menu
)**:负责在屏幕上显示游戏菜单。菜单中列出了不同的游戏难度选项和退出选项。 - **游戏执行函数 (
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;
}