zl程序教程

您现在的位置是:首页 >  Java

当前栏目

扫雷c语言程序设计-C语言实现简易版扫雷小游戏

2023-02-18 16:47:36 时间

  本次扫雷小游戏用多文件来编写。首先,要自定义的一个头文件 mine.h,里面有扫雷程序里面所需要的头文件、常量和所有函数的声明。其次,创建主函数 test.c,用自己喜欢的方式构建一个游戏的框架,最后,创建自定义函数 mine.c,编写各项功能。

  设计思路

  1、先写主函数,理清整个游戏流程。

int main()
{
 int quit = 0;
 do{
 int select = 0;
 Menu();
 scanf("%d", &select);
 switch (select){
 case 1:
 Game();
 printf("Game Over ... Again?\n");
 break;
 case 2:
 quit = 1;
 printf("Bye ... \n");
 break;
 default:
 printf("Error ... Please Select Again!\n");
 break;
 }
 } while (!quit);
 system("pause");
 return 0;
}

  2、根据主函数的需要,先写菜单函数 Menu(),这个函数很简单,只需要 printf 就好,菜单的样子也是自主设计。

static void Menu()
{
 printf("===========================\n");
 printf("|   扫雷   |\n");
 printf("|   1.Play   |\n");
 printf("|   2.Exit   |\n");
 printf("===========================\n");
 printf(" Please Select:");
}

  3、编写Game()函数,在这个函数里我们将要实现扫雷游戏的全部内容。也是一样的,在这个函数里先写一个大的框架,构建需要的函数,然后再根据我们的需求在 mine.c 里设计所有我们需要的自定义函数。

void Game()
{
 srand((unsigned long)time(NULL));
 char boardROW;
 char mineROW;
 InitBoard(board, ROW, COL, ' '); //' '
 InitBoard(mine, ROW, COL, '0'); //'0'
 SetMine(mine, ROW, COL);
 //ShowBoard(board, ROW, COL);
 //ShowBoard(mine, ROW, COL);
 int count = (ROW - 2)*(COL - 2) - NUM;
 do{
 system("cls");
 int x = 0;
 int y = 0;ShowBoard(board, ROW, COL);
 printf("请输入你要扫的位置-> ");
 scanf("%d %d", &x, &y);
 if (x < 1 || x > 10 || y < 1 || y > 10){//[1,10]
 printf("你输入的位置是错误的,请重新输入...\n");
 Sleep(1000);
 continue;
 }
 if (boardx != ' '){
 printf("你输入的位置已经被扫过,请重新输入...\n");
 Sleep(1000);
 continue;
 }
 if (minex == '0'){
 count--;
 char num = GetNum(mine, x, y);
 boardx = num;
 }
 else{
 printf("你输入的位置(%d, %d),有雷!\n", x, y);
 break;
 }
 } while (count > 0);
 char *result = NULL;
 if (count > 0){
 result = " 扫雷结束, 你被炸死了! \n";
 }
 else{
 result = "扫雷结束,恭喜你,成功啦! \n";
 }
 printf("-------------------------------\n");
 printf("%s", result);
 printf("-------------------------------\n");
 ShowBoard(mine, ROW, COL);
}  4、创建雷盘,还需要记录扫描雷盘。扫雷的面板是通过定义的宏来自定义大小。需要注意的是在算某个坐标的周围有多少个地雷的时候需要扫描他周围8个格子,所以给二维数组多定义一圈,让它们初始化跟内圈一样为‘0',这样扫描的时候就不算那些格子了。  
void InitBoard(char board[][COL], int row, int col, char elem)
{
 int i = 0;
 for (; i 
 for (i = 1; i  0){
 result = " 扫雷结束, 你被炸死了! \n";
 }
 else{
 result = "扫雷结束,恭喜你,成功啦! \n";
 }
 printf("-------------------------------\n");
 printf("%s", result);
 printf("-------------------------------\n");
 ShowBoard(mine, ROW, COL);
}  test.c  include "mine.h"static void Menu()
{
 printf("===========================\n");
 printf("|   扫雷   |\n");
 printf("|   1.Play   |\n");
 printf("|   2.Exit   |\n");
 printf("===========================\n");
 printf(" Please Select:");
}
int main()
{
 int quit = 0;
 do{
 int select = 0;
 Menu();
 scanf("%d", &select);
 switch (select){
 case 1:
 Game();
 printf("Game Over ... Again?\n");
 break;
 case 2:
 quit = 1;
 printf("Bye ... \n");
 break;
 default:
 printf("Error ... Please Select Again!\n");
 break;
 }
 } while (!quit);
 system("pause");
 return 0;
} 

 总结

  总的来说,在编写代码的时候还是得有一个清晰的思路,搭建框架,再细分其中细节,需要什么就去编写什么。代码很简单扫雷c语言程序设计,但很经典,希望对你有所帮助。