文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C语言如何实现一个扫雷程序

2023-06-17 04:58

关注

本篇内容介绍了“C语言如何实现一个扫雷程序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

整个游戏设计中主要的函数为:

1、初始化地雷棋盘和显示棋盘

2、棋盘打印函数

3、扫雷函数的实现

4、游戏主函数

大家可以在宏定义中改变棋盘大小,雷的个数,以及显示的无雷区范围。

废话不说 直接上代码:(未优化,请多包涵 )

<pre name="code" class="objc">#ifndef __MINE_H__ #define __MINE_H__  #define LINES 11     // 棋盘的行 #define ROWS 11     // 棋盘的列 #define mine_MAX 10    // 雷的数目 #define EAXY 3      // 简单显示的范围 #define COMMON 2     // 普通显示的范围 #define DIFFICULT 1     // 困难显示的范围  enum op {  EXIT,  PLAY }; void game(char mine[LINES][ROWS],char text[LINES][ROWS],int lines,int rows);  //游戏基本实现函数 void init_mine(char mine[LINES][ROWS],char text[LINES][ROWS],int lines,int rows);// 初始化棋盘函数 void play_EAXY_game(char mine[LINES][ROWS],char text[LINES][ROWS]);    // 简单游戏函数 void play_COMMON_game(char mine[LINES][ROWS],char text[LINES][ROWS]) ;   //普通游戏函数 void play_DIFFICULT_game(char mine[LINES][ROWS],char text[LINES][ROWS]) ;  //困难游戏函数 void mine_EAXY_sweep(char mine[LINES][ROWS],char text[LINES][ROWS]);    //简单扫雷实现 void mine_COMMON_sweep(char mine[LINES][ROWS],char text[LINES][ROWS]);   //普通扫雷实现 void mine_DIFFICULT_sweep(char mine[LINES][ROWS],char text[LINES][ROWS]) ;  //困难扫雷实现 void print(char tab[LINES][ROWS]); //打印棋盘  #endif
#include<stdio.h> #include"mine.h" #include<stdlib.h> #include<time.h> void init_mine(char mine[LINES][ROWS],char text[LINES][ROWS],int lines,int rows)  //初始化显示棋盘和雷盘 {  int i;  int j;  int a;  int b;  int count=0;  for(i=1; i<LINES-1;i++)   //初始化显示棋盘  {   for(j=1; j<ROWS-1;j++)   {    text[i][j]='*';   }  }  for(i=1; i<LINES-1;i++)   //初始化雷盘  {   for(j=1; j<ROWS-1;j++)   {    mine[i][j]='1';   }  }  srand((unsigned)time(NULL)); //随机产生两个数  while(count<mine_MAX)  {   a = rand()%9 + 1;   b = rand()%9 + 1;   if(mine[a][b]!='0')   {    mine[a][b]='0';    //定义雷为字符 0    count++;   }  } } void print(char tab[LINES][ROWS])      //打印棋盘函数 {  int i;  //行  int j;  //列   for(i=0;i<LINES-1;i++)  //定义第一行的打印  {   printf("%d ",i);  }  printf("\n");  for(i=1; i<LINES-1;i++)  //输出棋盘  {   printf("%d",i);   printf("%c",'|');   for(j=1; j<ROWS;j++)   {    printf("%c ",tab[i][j]);   }   printf("\n");  }  } void mine_EAXY_sweep(char mine[LINES][ROWS],char text[LINES][ROWS])    //简单整个游戏进程 {  int a;  int b;  int count = 0;  // 雷的个数  do     //是否将雷全部扫完  {   int i;   int j;   int x;   int y;   print(text);   print(mine); flag:  printf("请输入坐标=》");   scanf("%d %d",&a,&b);   if(a>(LINES-2) || a<0 || b<0 || b>(ROWS-2) || text[a][b]!='*')    {     printf("输入不合法!\n");     goto flag;   }   else  if(mine[a][b]=='0')   //判断是否触雷  {   printf("您踩雷了!\n");   break;  }  else  {   for(i=(a-EAXY);i<=(a+EAXY);i++)   {     for(j=(b-EAXY);j<=(b+EAXY);j++)     {      if(mine[i][j]=='1')      {       int x=0;         //周围雷的数量       if(mine[i-1][j-1]=='0')       {        x++;       }        if(mine[i-1][j]=='0')       {        x++;       }         if(mine[i-1][j+1]=='0')       {        x++;       }         if(mine[i][j-1]=='0')       {        x++;       }         if(mine[i][j+1]=='0')       {        x++;       }         if(mine[i+1][j-1]=='0')       {        x++;       }         if(mine[i+1][j]=='0')       {        x++;       }         if(mine[i+1][j+1]=='0')       {        x++;       }         text[i][j]=(x+'0');      }      }   }  }   for(x=1;x<=(LINES-2);x++)   {    for(y=1;y<=(ROWS-2);y++)    {     if(text[x][y]=='*')      count++;    }   }    }while(count>mine_MAX);  if(count==mine_MAX)  {   printf("恭喜你 扫雷成功!\n");  } } void mine_COMMON_sweep(char mine[LINES][ROWS],char text[LINES][ROWS])    //普通整个游戏进程 {  int a;  int b;  int count;  do     //是否将雷全部扫完  {   int i;   int j;   int x;   int y;    count = 0;  // 雷的个数   print(text);   print(mine); flag:  printf("请输入坐标=》");   scanf("%d %d",&a,&b);   if(a>(LINES-2) || a<0 || b<0 || b>(ROWS-2) || text[a][b]!='*')    {     printf("输入不合法!\n");     goto flag;   }   else  if(mine[a][b]=='0')   //判断是否触雷  {   printf("您踩雷了!\n");   break;  }  else  {   for(i=(a-COMMON);i<=(a+COMMON);i++)   {     for(j=(b-COMMON);j<=(b+COMMON);j++)     {      if(mine[i][j]=='1')      {       int x=0;         //周围雷的数量       if(mine[i-1][j-1]=='0')       {        x++;       }        if(mine[i-1][j]=='0')       {        x++;       }         if(mine[i-1][j+1]=='0')       {        x++;       }         if(mine[i][j-1]=='0')       {        x++;       }         if(mine[i][j+1]=='0')       {        x++;       }         if(mine[i+1][j-1]=='0')       {        x++;       }         if(mine[i+1][j]=='0')       {        x++;       }         if(mine[i+1][j+1]=='0')       {        x++;       }         text[i][j]=(x+'0');      }      }   }   print(text);  }   for(x=1;x<=(LINES-2);x++)   {    for(y=1;y<=(ROWS-2);y++)    {     if(text[x][y]=='*')      count++;    }   }    }while(count>mine_MAX);  if(count==mine_MAX)  {   printf("恭喜你 扫雷成功!\n");  } } void mine_DIFFICULT_sweep(char mine[LINES][ROWS],char text[LINES][ROWS])    //困难整个游戏进程 {  int a;  int b;  int count ;  // 雷的个数  do     //是否将雷全部扫完  {   int i;   int j;   int x;   int y;   count = 0;   print(text);   print(mine); flag:  printf("请输入坐标=》");   scanf("%d %d",&a,&b);   if(a>(LINES-2) || a<0 || b<0 || b>(ROWS-2) || text[a][b]!='*')    {     printf("输入不合法!\n");     goto flag;   }   else  if(mine[a][b]=='0')   //判断是否触雷  {   printf("您踩雷了!\n");   break;  }  else  {   for(i=(a-DIFFICULT);i<=(a+DIFFICULT);i++)   {     for(j=(b-DIFFICULT);j<=(b+DIFFICULT);j++)     {      if(mine[i][j]=='1')      {       int x=0;         //周围雷的数量       if(mine[i-1][j-1]=='0')       {        x++;       }        if(mine[i-1][j]=='0')       {        x++;       }         if(mine[i-1][j+1]=='0')       {        x++;       }         if(mine[i][j-1]=='0')       {        x++;       }         if(mine[i][j+1]=='0')       {        x++;       }         if(mine[i+1][j-1]=='0')       {        x++;       }         if(mine[i+1][j]=='0')       {        x++;       }         if(mine[i+1][j+1]=='0')       {        x++;       }         text[i][j]=(x+'0');      }      }   }   print(text);  }   for(x=1;x<=(LINES-2);x++)   {    for(y=1;y<=(ROWS-2);y++)    {     if(text[x][y]=='*')      count++;    }   }    }while(count>mine_MAX);  if(count==mine_MAX)  {   printf("恭喜你 扫雷成功!\n");  } }
#include<stdio.h> #include"mine.h" #include<time.h> void emun() {  printf("***********************\n");  printf("******* 1.play ******\n");  printf("******** 0.exit ******\n");  printf("***********************\n"); } void emun_dift()         //选择难度菜单 {  printf("*********************\n");  printf("****** 1.简单 *******\n");  printf("****** 2.普通 *******\n");  printf("****** 3.困难 *******\n");  printf("*********************\n"); } void play_EAXY_game(char mine[LINES][ROWS],char text[LINES][ROWS]) //玩简单游戏 {   time_t t_start,t_end;  printf("计时开始!!\n");  t_start = time(NULL);  //开始计时  mine_EAXY_sweep(mine,text);  t_end = time(NULL);  //计时结束  printf("您所用时间为:%.0f \n",difftime(t_end,t_start)); } void play_COMMON_game(char mine[LINES][ROWS],char text[LINES][ROWS]) //玩普通游戏 {   time_t t_start,t_end;  printf("计时开始!!\n");  t_start = time(NULL);  //开始计时  mine_COMMON_sweep(mine,text);  t_end = time(NULL);  //计时结束  printf("您所用时间为:%.0f \n",difftime(t_end,t_start)); } void play_DIFFICULT_game(char mine[LINES][ROWS],char text[LINES][ROWS]) //玩困难游戏 {   time_t t_start,t_end;  printf("计时开始!!\n");  t_start = time(NULL);  //开始计时  mine_DIFFICULT_sweep(mine,text);  t_end = time(NULL);  //计时结束  printf("您所用时间为:%.0f \n",difftime(t_end,t_start)); } void game() {  int input = 0;  int flout = 0;  char mine[LINES][ROWS]={0};   //定义雷盘  char text[LINES][ROWS]={0};   //定义显示盘   init_mine(mine,text,LINES,ROWS);      //初始化雷盘   do  {   emun();   init_mine(mine,text,LINES,ROWS);      //初始化雷盘   printf("请选择=》");    scanf("%d",&input);   switch(input)   {   case PLAY:    {     emun_dift();    printf("请选择=》");    scanf("%d",&flout);    switch(flout)    {    case 1:     play_EAXY_game(mine,text);     break;    case 2:     play_COMMON_game(mine,text);     break;    case 3:     play_DIFFICULT_game(mine,text);     break;    }    }    break;   case EXIT:    break;   }  }while(input);  } int main() {  game();  return 0; }

“C语言如何实现一个扫雷程序”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯