国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C語言 掃雷程序的實現

2020-05-23 13:48:41
字體:
來源:轉載
供稿:網友

C語言 掃雷程序的實現

這個游戲可以實現根據選擇坐標后所顯示無雷區范圍的不同分為簡單 ,普通和困難

游戲程序中,實現了游戲的計時(分鐘)功能,實現了掃雷游戲的最基礎功能。

 定義了一個9*9的棋盤,玩家只要根據提示選擇游戲,和難度;

 根據提示輸入 合法的坐標,如輸入不合法則會進行提示;

 掃雷結束則會提示;如觸雷則游戲自動結束;

整個游戲設計中主要的函數為:

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; } 

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 松滋市| 同江市| 天峨县| 宣化县| 安阳县| 竹溪县| 青州市| 庆元县| 九寨沟县| 庆元县| 德钦县| 闽侯县| 古浪县| 藁城市| 苏尼特右旗| 梁平县| 澄迈县| 象州县| 辽中县| 马公市| 遵义县| 上蔡县| 富川| 株洲县| 华安县| 定结县| 中阳县| 武陟县| 白水县| 宁陵县| 江津市| 白河县| 伽师县| 库尔勒市| 浦江县| 霍州市| 双牌县| 海淀区| 临澧县| 年辖:市辖区| 仲巴县|