1. 程式人生 > >實 現 掃 雷 遊 戲

實 現 掃 雷 遊 戲

基本思路

  1. 建立兩個陣列,mine為內部運算元組,show為介面顯示;
  2. 初始化兩個陣列;將mine初始化為‘0’,show為‘*’;
  3. 顯示陣列;Display()
  4. 佈置雷;
  5. 掃雷;
  6. 判斷輸贏

初始化陣列

void init(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)//初始化陣列
{
 int i = 0, j = 0;
 for (i = 0; i < row ; i++)
 {
  for (j = 0; j < col ; j++)
  {
   mine[
i][j] = '0'; show[i][j] = '*'; } } }

顯示陣列

void Display(char show[ROWS][COLS], int row, int col)
{
 int i = 0;
 printf("   ");
 for (i = 1; i < row-1; i++)
 {
  printf("%d ", i);
 }
 printf("\n");
 for (i = 1; i <row - 1; i++)
 {
  int j = 0;
  printf(" %d", i);
  for (j = 1; j < col -
1; j++) { printf(" %c", show[i][j]); } printf("\n"); } }

)是否為‘0’
2. 如果是’0’,判斷(x,y)附近八個座標有幾個為’1’swap(),並將結果在show輸出,
如果為’1’,返回函式值終止函式;
3. 展開;

掃雷


char computer_move(char show[ROWS][COLS],char mine[ROWS][COLS] ,int row, int col)
{
 int x = 0;
 int y = 0;
 int count = 0;
 int ret = 0;
  while
(1) { printf("請輸入座標\n"); scanf("%d%d", &x, &y);//玩家輸入座標 if (x >= 1 && x < row - 1 && y >= 1 && y < col - 1)//判斷座標是否為1-9的數,不是重新輸入 { if (mine[x][y] == '0')//判斷mine[x][y]是否等於‘0’ { ret = swap(mine, x, y); show[x][y] =ret+'0';//判斷座標(x,y)附近有幾個雷 open(mine,show,x, y); break; } else if (mine[x][y] == '1')//如果為1返回F { return 'F'; } } else printf("輸入錯誤,請重新輸入\n"); } }

判斷雷的個數

int swap(char mine[ROWS][COLS],int x,int y)
{
 return (mine[x - 1][y] + mine[x - 1][y - 1] + mine[x][y - 1] + mine[x + 1][y - 1] +
  mine[x + 1][y] + mine[x + 1][y + 1] + mine[x][y + 1] + mine[x - 1][y + 1])-('0'*8) ;
}

判斷是否展開

int IF_open(char show[ROWS][COLS],int x,int y)
{
 if (show[x][y] == '*'&&x >= 1 && x < ROWS - 1 && y >= 1 && y <  COLS- 1)
 {
  return 1;
 }
 else return -1;
}

展開函式(遞迴實現)

void open(char mine[ROWS][COLS], char show[ROWS][COLS], int x, int y)//展開函式
{
 int n = 1;
 if (n == IF_open(show, x - 1, y))
 {
  if ((swap(mine, x - 1, y) + '0') != '0')
  {
   show[x-1][y]= swap(mine, x - 1, y) + '0';
  }
  else
  {
   show[x - 1][y] = swap(mine, x - 1, y) + '0';
   open(mine, show, x - 1, y);
  }
 }
 if (n == IF_open(show, x - 1, y-1))
 {
  if ((swap(mine, x - 1, y-1) + '0') != '0')
  {
   show[x - 1][y-1] = swap(mine, x - 1, y-1) + '0';
  }
  else
  {
   show[x - 1][y-1] = swap(mine, x - 1, y-1) + '0';
   open(mine, show, x - 1, y-1);
  }
 }
 if (n == IF_open(show, x , y - 1))
 {
  if ((swap(mine, x , y - 1) + '0') != '0')
  {
   show[x ][y - 1] = swap(mine, x , y - 1) + '0';
  }
  else
  {
   show[x ][y - 1] = swap(mine, x , y - 1) + '0';
   open(mine, show, x , y - 1);
  }
 }
 if (n == IF_open(show, x-1, y - 1))
 {
  if ((swap(mine, x-1, y - 1) + '0') != '0')
  {
   show[x-1][y - 1] = swap(mine, x-1, y - 1) + '0';
  }
  else
  {
   show[x - 1][y - 1] = swap(mine, x-1, y - 1) + '0';
   open(mine, show, x-1, y - 1);
  }
 }
 if (n == IF_open(show, x + 1, y ))
 {
  if ((swap(mine, x + 1, y) + '0') != '0')
  {
   show[x +1][y ] = swap(mine, x +1, y) + '0';
  }
  else
  {
   show[x + 1][y ] = swap(mine, x +1, y ) + '0';
   open(mine, show, x + 1, y );
  }
 } 
 if (n == IF_open(show, x + 1, y+1))
 {
  if ((swap(mine, x + 1, y+1) + '0') != '0')
  {
   show[x + 1][y+1] = swap(mine, x + 1, y+1) + '0';
  }
  else
  {
   show[x + 1][y+1] = swap(mine, x + 1, y+1) + '0';
   open(mine, show, x + 1, y+1);
  }
 }
 if (n == IF_open(show, x , y + 1))
 {
  if ((swap(mine, x , y + 1) + '0') != '0')
  {
   show[x ][y + 1] = swap(mine, x , y + 1) + '0';
  }
  else
  {
   show[x ][y + 1] = swap(mine, x , y + 1) + '0';
   open(mine, show, x , y + 1);
  }
 }
 if (n == IF_open(show, x-1, y + 1))
 {
  if ((swap(mine, x-1, y + 1) + '0') != '0')
  {
   show[x-1][y + 1] = swap(mine, x-1, y + 1) + '0';
  }
  else
  {
   show[x-1][y + 1] = swap(mine, x-1, y + 1) + '0';
   open(mine, show, x-1, y + 1);
  }
 }

為了遊戲能正常進行,如果第一下就踩到雷,我們把雷移位

void safe(char show[ROW][COL], char mine[ROWS][COLS], int row, int col)
{
 int x = 0;
 int y = 0;
 int n = 1;
 int ret = 0;
 char s = { 0 };
 while (1)
 {
  printf("請輸入座標\n");
  scanf("%d%d", &x, &y);//玩家輸入座標
  if (x >= 1 && x < row - 1 && y >= 1 && y < col - 1)
  {
   if (mine[x][y] == '1')
   {
   mine[x][y] = '0';
    ret = swap(mine, x, y);
    show[x][y] = ret + '0';//判斷座標(x,y)附近有幾個雷
    open(mine, show, x, y);
    break;
   }
   else if (mine[x][y] == '0')//判斷mine[x][y]是否等於‘0’
   {
    ret = swap(mine, x, y);
    show[x][y] = ret + '0';//判斷座標(x,y)附近有幾個雷
    open(mine, show, x, y);
    break;
    }
  }
  else{
   printf("輸入錯誤,請重新輸入\n");
  }
 }
 while (n)
 {
  x = rand() % 8 + 1;
  y = rand() % 8 + 1;
  if (mine[x][y] = '0')
  {
   mine[x][y] = '1';
   n--;
  }
 }
}
void Exchange(char show[ROW][COL], int row, int col)
{
 int i = 0;
 for (i = 1; i < row - 1; i++)
 {
  int j = 0;
  for (j = 1; j < col - 1; j++)
  {
   if (show[i][j] == '0')
   {
    show[i][j] = ' ';
   }
  }
 }
}

game函式

void game()
{
 char n = 0;
 int count = 0;
 char mine[ROWS][COLS] = { '0' };
 char show[ROWS][COLS] = { '0' };
 init(mine, show,ROWS,COLS );
 set_mine(mine, ROW, COL);//佈雷
 Display(show, ROWS, COLS);
 //get_mine(mine,display ROW, COL);//掃雷
 safe(show, mine, ROWS, COLS);
 Exchange(show, ROWS, COLS);
 Display(show, ROWS, COLS);
 while (1)
 {
  n=computer_move(show, mine, ROWS, COLS);
  Exchange(show, ROWS, COLS);
  Display(show, ROWS, COLS);
  if (n == 'F')
  {
   printf("很抱歉,您被炸死了\n");
   break;
  }
  count=IF_Win(show, ROWS, COLS);
  if (count == N)
  {
   printf("恭喜獲勝\n");
    break;
  }
 }
}

選單

void menu()
{
 printf("******************************\n");
 printf("***********1.開始遊戲*********\n")
            
           

相關推薦

基本思路 建立兩個陣列,mine為內部運算元組,show為介面顯示; 初始化兩個陣列;將mine初始化為‘0’,show為‘*’; 顯示陣列;Display() 佈置雷; 掃雷; 判斷輸贏 初始化陣列 void init(char mi

類和對象例:景區人類

else 用戶輸入 pan pub input bsp scanner () 接收 import java.util.Scanner; //導包 public class Person {   public String name;   public int age;

完成簡單的三子琪

基本思路 初始化棋盤: 下棋: 判斷輸贏 實現 1、初始化棋盤 void init_board(char board[ROW][COL], int row, int col) { memset(&board[0][0],' ',ro

塵面色微變的眸子便是向了這瀑布之下修煉但域碑

cbe bad abc cabac cdd ecb acc cee dac http://baobao.baidu.com/article/830cd29568a1b90121b027f23f7c635f.html http://baobao.baidu.com/artic

【紅包派/抽獎獎返紅包/二維碼紅包營銷神器/朋友圈廣告神器/專利覆蓋塗層的二維碼紅包】

紅包派 抽獎掃獎返現紅包 二維碼紅包營銷神器 朋友圈廣告神器 專利覆蓋塗層的二維碼紅包 【紅包派/抽獎掃獎返現紅包/二維碼紅包營銷神器/朋友圈廣告神器/專利覆蓋塗層的二維碼紅包】

旅行app(遊記、攻略、私人定制) | 順便旅行H5移動端

宋體 image 代碼 rem 9.png 其中 http pos 圖片 《順便遊旅行》是一款H5移動端旅行app,提供目的地(國內、國外、周邊)搜索、旅遊攻略查詢、遊記分享、私人定制4大模塊,類似攜程、同程、去哪兒、馬蜂窩移動端,只不過順便遊app界面更為簡潔。 HTML

Python3.x+pyqtgraph皇冠體育網站開發數據可視化

onf 頭部 pad false 出現 box 安裝 maps .py 1、pyqtgraph庫數據皇冠體育網站開發 haozbbs.com Q1446595067可視化效果還不錯,特別是窗體程序中圖像交互性較好;安裝也很方便,用 pip 安裝。 2、在Python中新建一

到底有沒有有最新棋#牌#大廳在幹嗎的

到底有沒有有最新棋#牌#遊¥戲大廳在幹嗎的一老農上縣城買手機,進店問:“手機多少錢一斤?”店主竊喜,還有這等蠢人?嫌逐一報價太麻煩?打手一揮,說:“五千一斤,隨便挑!”老農擇一高檔超薄機,稱重,二兩,一千元。店主懊悔,力推他機,老農不屑一顧:“想坑我這個賣廢品的?那些明顯都是翻新機,配置又爛,連《憤怒的小鳥》

你知接之被兒單術何按成

色根能點毛二下他很任七低通前聽包定氣反最石行除標紅萬置之廠規門西就具示青合月清什外通傳廣管很隊間對段轉見非適斷便型速資除月以日取所作二放確熱區每心地兩再能而象基育離火勞麼八準華候委則常影文九隊存或鬥多般油空級驗六走斷資級車將好管積完進委角業每學北克產地第 根委東治廠方實戰進專

Mybatis框架基於註解的方式,對資料增刪改查

編寫Mybatis程式碼,與spring不一樣,不需要匯入外掛,只需匯入架包即可; 在lib下 匯入mybatis架包:mybatis-3.1.1.jar mysql驅動架包:mysql-connector-java-5.1.6-bin.jar 在src目錄下建立xm

上海天互娛(手領域)運維崗位筆試面試題

yum install/remove rpm -ivh/-e mstsc/ssh/telnet/vnc/ftp/sftp vim /etc/sysconfig/network-scripts/ifcfg- vim /etc/sysconfig/network >/sh/BA

PHP非同步程式設計: 基於 PHP (chao)(xi) NODEJS web框架 KOA

PHP非同步程式設計: 基於 PHP 實(chao)現(xi) NODEJS web框架 KOA 說明 偶然間在 GITHUB 上看到有贊官方倉庫的 手把手教你實現co與Koa 。由於此前用過 KOA ,對於 KOA 的洋蔥模型歎為觀止。不由得心血來潮的看完了整個文件,接著 CTRL+C、CTRL+V 讓

PHP原生代碼寫的微信碼支付

php array 本地 lib pid ans 進入 技術分享 sele 一款PHP原生代碼寫的微信掃碼支付,不基於任何框架,完全手寫。 掃碼支付只要授權域名對就OK,本地是無法測試。跟openid也沒有關系,所以跟支付授權目錄頁沒關系。 微信商戶信息配置地址:we

最前線:遊戲硬體公司蛇推出數字貨幣,波場DAPP這周交易總額較上週對比增加100%

編者按:區塊鏈技術持續火爆,而區塊鏈遊戲被認為最有希望實現搶先爆發,甚至有人預言,下一個時代就是鏈遊的時代。陀螺財經將以週報的形式,為廣大區塊鏈遊戲從業者、愛好者傳遞一週內最有價值的鏈遊資訊,讓大家能夠及時掌握最新的鏈遊動態,一同見證鏈遊黃金時代的到來。    

測試進階操技能

手遊測試員所需要做的事情分為三類:   一,遊戲的硬性BUG,此BUG不光是指一些遊戲中出現的宕機或者指令碼錯誤之類,會直接導致遊戲無法執行下去的BUG;還包括那些字型出格,錯字,來電沒聲音之類的不會導致遊戲無法執行,但是明顯需要改正的錯誤。 二,有一些瑕疵是屬於

大齡程序員想轉產品經理?3本書給你最靠譜的進階攻略!現貨網銀支付通道申請 快捷支付接口對接 銀聯雲閃付碼支付 資金盤盤系統源碼第三方平臺api代付 聚合收款支付系統搭建資金托管存管收款 充值提現出入金

銀行卡 銀聯 同步 拖延 團隊 互聯網 後臺 股票 大盤 大齡程序員想轉產品經理?3本書給你最靠譜的進階攻略!現貨網銀支付通道申請 快捷支付接口對接 銀聯雲閃付掃碼支付 資金盤實盤系統源碼第三方平臺api代付 聚合收款支付系統搭建資金托管存管收款 充值提現出入金 今天

元數據管理器中存在錯誤。 例化來自文件“\?C:Program FilesMicrosoft SQL ServerMSAS11.MSSQLSERVEROLAPDataTfs_Analysis.0.dbvDimTestCaseOverlay.874.dim.xml”的元數據對象時出錯。

參數配置 錯誤 manage 但是 加密 olap 右上角 alt 剛才 一、發現問題 啟動SQLSERVER的數據分析服務失敗 查看系統日誌錯誤如下: 雙擊錯誤後顯示詳細錯誤: 元數據管理器中存在錯誤。 實例化來自文件“\\?\C:\Pro

WordPress主題開發:格式化標題

標題 arc oba printf site scrip ctype str 站點 頁面使用: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF

Cocos2d-x開發例介紹幀動畫使用

rect http splay end ram nal cache wtl 布爾 以下我們通過一個實例介紹一下幀動畫的使用。這個實比例如以下圖所看到的,點擊Gobutton開始播放動畫,這時候播放button標題變為Stop,點擊Stopbutton能夠停止播放動畫。以下

每天一個JavaScript例-展示設置和獲取CSS樣式設置

width func height nts style scrip meta on() 屬性 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" conte