欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言 掃雷程序的實(shí)現(xiàn)

 更新時(shí)間:2017年03月18日 09:17:29   投稿:lqh  
這篇文章主要介紹了C語言 掃雷程序的實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下

C語言 掃雷程序的實(shí)現(xiàn)

這個(gè)游戲可以實(shí)現(xiàn)根據(jù)選擇坐標(biāo)后所顯示無雷區(qū)范圍的不同分為簡單 ,普通和困難

游戲程序中,實(shí)現(xiàn)了游戲的計(jì)時(shí)(分鐘)功能,實(shí)現(xiàn)了掃雷游戲的最基礎(chǔ)功能。

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

 根據(jù)提示輸入 合法的坐標(biāo),如輸入不合法則會進(jìn)行提示;

 掃雷結(jié)束則會提示;如觸雷則游戲自動結(jié)束;

整個(gè)游戲設(shè)計(jì)中主要的函數(shù)為:

1、初始化地雷棋盤和顯示棋盤

2、棋盤打印函數(shù)

3、掃雷函數(shù)的實(shí)現(xiàn)

4、游戲主函數(shù)

大家可以在宏定義中改變棋盤大小,雷的個(gè)數(shù),以及顯示的無雷區(qū)范圍。

廢話不說 直接上代碼:(未優(yōu)化,請多包涵 )

<pre name="code" class="objc">#ifndef __MINE_H__ 
#define __MINE_H__ 
 
#define LINES 11     // 棋盤的行 
#define ROWS 11     // 棋盤的列 
#define mine_MAX 10    // 雷的數(shù)目 
#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);  //游戲基本實(shí)現(xiàn)函數(shù) 
void init_mine(char mine[LINES][ROWS],char text[LINES][ROWS],int lines,int rows);// 初始化棋盤函數(shù) 
void play_EAXY_game(char mine[LINES][ROWS],char text[LINES][ROWS]);    // 簡單游戲函數(shù) 
void play_COMMON_game(char mine[LINES][ROWS],char text[LINES][ROWS]) ;   //普通游戲函數(shù) 
void play_DIFFICULT_game(char mine[LINES][ROWS],char text[LINES][ROWS]) ;  //困難游戲函數(shù) 
void mine_EAXY_sweep(char mine[LINES][ROWS],char text[LINES][ROWS]);    //簡單掃雷實(shí)現(xiàn) 
void mine_COMMON_sweep(char mine[LINES][ROWS],char text[LINES][ROWS]);   //普通掃雷實(shí)現(xiàn) 
void mine_DIFFICULT_sweep(char mine[LINES][ROWS],char text[LINES][ROWS]) ;  //困難掃雷實(shí)現(xiàn) 
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)); //隨機(jī)產(chǎn)生兩個(gè)數(shù) 
 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])      //打印棋盤函數(shù) 
{ 
 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])    //簡單整個(gè)游戲進(jìn)程 
{ 
 int a; 
 int b; 
 int count = 0;  // 雷的個(gè)數(shù) 
 do     //是否將雷全部掃完 
 { 
  int i; 
  int j; 
  int x; 
  int y; 
  print(text); 
  print(mine); 
flag:  printf("請輸入坐標(biāo)=》"); 
  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;         //周圍雷的數(shù)量 
      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])    //普通整個(gè)游戲進(jìn)程 
{ 
 int a; 
 int b; 
 int count; 
 do     //是否將雷全部掃完 
 { 
  int i; 
  int j; 
  int x; 
  int y; 
   count = 0;  // 雷的個(gè)數(shù) 
  print(text); 
  print(mine); 
flag:  printf("請輸入坐標(biāo)=》"); 
  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;         //周圍雷的數(shù)量 
      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])    //困難整個(gè)游戲進(jìn)程 
{ 
 int a; 
 int b; 
 int count ;  // 雷的個(gè)數(shù) 
 do     //是否將雷全部掃完 
 { 
  int i; 
  int j; 
  int x; 
  int y; 
  count = 0; 
  print(text); 
  print(mine); 
flag:  printf("請輸入坐標(biāo)=》"); 
  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;         //周圍雷的數(shù)量 
      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("計(jì)時(shí)開始??!\n"); 
 t_start = time(NULL);  //開始計(jì)時(shí) 
 mine_EAXY_sweep(mine,text); 
 t_end = time(NULL);  //計(jì)時(shí)結(jié)束 
 printf("您所用時(shí)間為:%.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("計(jì)時(shí)開始!!\n"); 
 t_start = time(NULL);  //開始計(jì)時(shí) 
 mine_COMMON_sweep(mine,text); 
 t_end = time(NULL);  //計(jì)時(shí)結(jié)束 
 printf("您所用時(shí)間為:%.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("計(jì)時(shí)開始!!\n"); 
 t_start = time(NULL);  //開始計(jì)時(shí) 
 mine_DIFFICULT_sweep(mine,text); 
 t_end = time(NULL);  //計(jì)時(shí)結(jié)束 
 printf("您所用時(shí)間為:%.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; 
} 

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

相關(guān)文章

  • C語言初學(xué)者代碼中的常見錯(cuò)誤與問題

    C語言初學(xué)者代碼中的常見錯(cuò)誤與問題

    C語言初學(xué)者犯過的很多錯(cuò)誤都非常典型,在初學(xué)者中非常普遍,于是整理了一下,應(yīng)該對其他初學(xué)者有借鑒意義
    2013-11-11
  • 求數(shù)組中最長遞增子序列的解決方法

    求數(shù)組中最長遞增子序列的解決方法

    本篇文章是對c++中求數(shù)組中最長遞增子序列的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 一文詳解C++中運(yùn)算符的使用

    一文詳解C++中運(yùn)算符的使用

    這篇文章主要為大家詳細(xì)介紹了C++中運(yùn)算符的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-05-05
  • C++容器算法示例詳解

    C++容器算法示例詳解

    在談到容器算法,我們大概率會用到謂詞predicate,謂詞返回的類型是布爾類型(bool)可以是lambda表達(dá)式、函數(shù)對象以及其它可調(diào)用的對象,這篇文章主要介紹了C++容器算法,需要的朋友可以參考下
    2024-08-08
  • C語言實(shí)現(xiàn)掃雷小程序

    C語言實(shí)現(xiàn)掃雷小程序

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)掃雷小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 探討register關(guān)鍵字在c語言和c++中的差異

    探討register關(guān)鍵字在c語言和c++中的差異

    建議不要用register關(guān)鍵字定義全局變量,因?yàn)槿肿兞康纳芷谑菑膱?zhí)行程序開始,一直到程序結(jié)束才會終止,而register變量可能會存放在cpu的寄存器中,如果在程序的整個(gè)生命周期內(nèi)都占用著寄存器的話,這是個(gè)相當(dāng)不好的舉措
    2013-10-10
  • C語言運(yùn)算符的重載詳解

    C語言運(yùn)算符的重載詳解

    這篇文章主要為大家詳細(xì)介紹C語言運(yùn)算符的重載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C語言scandir函數(shù)獲取文件夾內(nèi)容的實(shí)現(xiàn)

    C語言scandir函數(shù)獲取文件夾內(nèi)容的實(shí)現(xiàn)

    scandir?函數(shù)用于列舉指定目錄下的文件列表,本文主要介紹了C語言scandir函數(shù)獲取文件夾內(nèi)容的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • C++中const修飾符的詳解及其作用介紹

    C++中const修飾符的詳解及其作用介紹

    這篇文章主要介紹了C++中const修飾符的詳解及其作用介紹,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • C++類與對象深入之靜態(tài)成員與友元及內(nèi)部類詳解

    C++類與對象深入之靜態(tài)成員與友元及內(nèi)部類詳解

    朋友們好,這篇播客我們繼續(xù)C++的初階學(xué)習(xí),現(xiàn)在對我們對C++的靜態(tài)成員,友元,內(nèi)部類知識點(diǎn)做出總結(jié),整理出來一篇博客供我們一起復(fù)習(xí)和學(xué)習(xí),如果文章中有理解不當(dāng)?shù)牡胤?還希望朋友們在評論區(qū)指出,我們相互學(xué)習(xí),共同進(jìn)步
    2022-06-06

最新評論