Board logo

標題: 踩地雷 [打印本頁]

作者: buy    時間: 2010-11-13 17:19     標題: 踩地雷

  1.     boolean BombArr[][];
  2.     int CountBombArr[][];

  3. void showBombArr()
  4. {
  5. }

  6. void showCountBombArr()
  7. {
  8. }
複製代碼

作者: buy    時間: 2010-11-13 17:55

本帖最後由 buy 於 2010-11-14 20:13 編輯
  1.     boolean BombArr[][];
  2.     int CountBombArr[][];
  3.    
  4.     //開始遊戲
  5.     private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

  6.         BombArr = new boolean [6][6];
  7.         CountBombArr = new int [6][6];

  8.         BombArr[3][1] = true;
  9.         BombArr[1][2] = true;

  10.         countAllBombArr();

  11.         showBombArr();
  12.         showCountBombArr();
  13.         
  14.         //System.out.print(CountBombArr[3][3]);
  15.     }                                       

  16.     void showBombArr()
  17.     {
  18.         for(int i=1;i<BombArr.length-1;i++)
  19.         {
  20.             for(int j=1;j<BombArr.length-1;j++)
  21.             {
  22.                 System.out.print(String.valueOf(BombArr[i][j]) + "\t");
  23.             }
  24.             System.out.print('\n');
  25.         }
  26.     }

  27.     void showCountBombArr()
  28.     {
  29.         for(int i=1;i<BombArr.length-1;i++)
  30.         {
  31.             for(int j=1;j<BombArr.length-1;j++)
  32.             {
  33.                 System.out.print(String.valueOf(CountBombArr[i][j]) + "\t");
  34.             }
  35.             System.out.print('\n');
  36.         }
  37.     }

  38.     void countBombArr(int x,int y)
  39.     {
  40.         int count = 0;
  41.         if(BombArr[x-1][y-1] == true)
  42.         {
  43.             count ++;
  44.         }else{ }
  45.         if(BombArr[x][y-1] == true)
  46.         {
  47.             count ++;
  48.         }else{ }
  49.         if(BombArr[x+1][y-1] == true)
  50.         {
  51.             count ++;
  52.         }else{ }
  53.         if(BombArr[x-1][y] == true)
  54.         {
  55.             count ++;
  56.         }else{ }
  57.         if(BombArr[x][y] == true)
  58.         {
  59.             count ++;
  60.         }else{ }
  61.         if(BombArr[x+1][y] == true)
  62.         {
  63.             count ++;
  64.         }else{ }
  65.         if(BombArr[x-1][y+1] == true)
  66.         {
  67.             count ++;
  68.         }else{ }
  69.         if(BombArr[x][y+1] == true)
  70.         {
  71.             count ++;
  72.         }else{ }
  73.         if(BombArr[x+1][y+1] == true)
  74.         {
  75.             count ++;
  76.         }else{ }

  77.         CountBombArr[x][y] = count;
  78.     }
複製代碼

作者: buy    時間: 2010-11-14 21:03

  1.     boolean BombArr[][];
  2.     int CountBombArr[][];
  3.     javax.swing.JButton ButtonArr[][];
  4.    
  5.     //開始遊戲
  6.     private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

  7.         initialButtonArr();// 初始化按鈕

  8.         //實體化儲存炸彈的陣列,以及實體化儲存炸彈數目的陣列。
  9.         BombArr = new boolean [6][6];
  10.         CountBombArr = new int [6][6];

  11.         //放炸彈-測試用
  12.         BombArr[3][1] = true;
  13.         BombArr[1][2] = true;

  14.         //計算所有格子的炸彈數目
  15.         countAllBombArr();

  16.         //-Drbug用- 顯示目前炸彈陣列 與 炸彈數目陣列
  17.         showBombArr();
  18.         showCountBombArr();
  19.         
  20.         ButtonArr[0][0].setText("0");
  21.     }   

  22.    void initialButtonArr()
  23.     {
  24.       //...要寫的部分
  25.     }

  26.     void showBombArr()
  27.     {
  28.         for(int i=1;i<BombArr.length-1;i++)
  29.         {
  30.             for(int j=1;j<BombArr.length-1;j++)
  31.             {
  32.                 System.out.print(String.valueOf(BombArr[i][j]) + "\t");
  33.             }
  34.             System.out.print('\n');
  35.         }
  36.     }

  37.     void showCountBombArr()
  38.     {
  39.         for(int i=1;i<BombArr.length-1;i++)
  40.         {
  41.             for(int j=1;j<BombArr.length-1;j++)
  42.             {
  43.                 System.out.print(String.valueOf(CountBombArr[i][j]) + "\t");
  44.             }
  45.             System.out.print('\n');
  46.         }
  47.     }

  48.     void countBombArr(int x,int y)
  49.     {
  50.         int count = 0;
  51.         if(BombArr[x-1][y-1] == true)
  52.         {
  53.             count ++;
  54.         }else{ }
  55.         if(BombArr[x][y-1] == true)
  56.         {
  57.             count ++;
  58.         }else{ }
  59.         if(BombArr[x+1][y-1] == true)
  60.         {
  61.             count ++;
  62.         }else{ }
  63.         if(BombArr[x-1][y] == true)
  64.         {
  65.             count ++;
  66.         }else{ }
  67.         if(BombArr[x][y] == true)
  68.         {
  69.             count ++;
  70.         }else{ }
  71.         if(BombArr[x+1][y] == true)
  72.         {
  73.             count ++;
  74.         }else{ }
  75.         if(BombArr[x-1][y+1] == true)
  76.         {
  77.             count ++;
  78.         }else{ }
  79.         if(BombArr[x][y+1] == true)
  80.         {
  81.             count ++;
  82.         }else{ }
  83.         if(BombArr[x+1][y+1] == true)
  84.         {
  85.             count ++;
  86.         }else{ }

  87.         CountBombArr[x][y] = count;
  88.     }

  89.     void countAllBombArr()
  90.     {
  91.         for(int i=1;i<BombArr.length-1;i++)
  92.         {
  93.             for(int j=1;j<BombArr.length-1;j++)
  94.             {
  95.                         countBombArr(i,j);
  96.             }
  97.         }
  98.     }
複製代碼

作者: buy    時間: 2010-11-20 14:29

  1.     void clickEvent(int x,int y)
  2.     {
  3.         if(BombArr[x+1][y+1] == true)
  4.         {
  5.             System.out.println("遊戲結束");
  6.         }
  7.         else{
  8.             ButtonArr[x][y].setText("-");
  9.             ButtonArr[x][y].setEnabled(false);
  10.                     showNearBombnumber(x, y);
  11.         }
  12.     }

  13.    void showNearBombnumber(int i,int j)
  14.     {
  15.         int I = i+1;
  16.         int J = j+1;

  17.         if(i-1 >= 0 && j-1 >=0) //左上方
  18.         {
  19.             ButtonArr[i-1][j-1].setText(String.valueOf(CountBombArr[I-1][J-1]));
  20.         }
  21. //...
  22. }
複製代碼

作者: buy    時間: 2010-11-20 16:28

  1.     void showNearBombnumber(int i,int j)
  2.     {
  3.         int I = i+1;
  4.         int J = j+1;

  5.         if(!ButtonArr[i][j].getText().equals("-"))
  6.         {
  7.             //遞迴終止條件
  8.         }
  9.         else{

  10.         if(i-1 >= 0 && j-1 >=0) //左上方
  11.         {
  12.             if(CountBombArr[I-1][J-1] == 0)
  13.             {
  14.                if (ButtonArr[i-1][j-1].isEnabled() == true)
  15.                {
  16.                     ButtonArr[i-1][j-1].setText("-");
  17.                     ButtonArr[i-1][j-1].setEnabled(false);
  18.                     showNearBombnumber(i-1, j-1);
  19.                 }
  20.             }
  21.             else
  22.             {
  23.                 if(ButtonArr[i-1][j-1].isEnabled() == true)
  24.                 {
  25.                     ButtonArr[i-1][j-1].setText(String.valueOf(CountBombArr[I-1][J-1]));
  26.                 }
  27.             }
  28.         }
複製代碼

作者: buy    時間: 2010-11-21 19:28

  1.     //重新設定按鈕 與 清空炸彈陣列
  2.     void ReGame()
  3.     {
  4.         for(int i =0; i< ButtonArr.length; i++)
  5.         {
  6.             for(int j =0; j< ButtonArr.length; j++)
  7.             {
  8.                 ButtonArr[i][j].setText("x");
  9.                 ButtonArr[i][j].setEnabled(true);
  10.             }  
  11.         }

  12.         for(int i =0; i< BombArr.length; i++)
  13.         {
  14.             for(int j =0; j< BombArr.length; j++)
  15.             {
  16.                 BombArr[i][j] = false;
  17.             }
  18.         }


  19.     }

  20.     //設定隨機炸彈方法
  21.     int[] RandomBomb()
  22.     {
  23.         int rdindex = 0,temp = 0;double rd; //打亂陣列用
  24.         int []lottery = new int[maxBomb*maxBomb]; //長度為5*5 = 25
  25.         for(int i = 0; i < maxBomb*maxBomb ; i++)
  26.             lottery[i] = i;

  27.                         //隨機交換陣列值
  28.                 for(int i=0 ; i<10 ; i++)
  29.                 {
  30.                         rd = Math.random()*10;
  31.                         rdindex = (int)rd; //隨機取位置0~9
  32.                         
  33.                         //兩個位置的值交換 lottery[i] lottery[?]
  34.                         temp = lottery[i];
  35.                         lottery[i] = lottery[rdindex];
  36.                         lottery[rdindex] = temp;                        
  37.                 }

  38.             return lottery;
  39.     }







  40.     void clickEvent(int x,int y)
  41.     {
  42.         if(BombArr[x+1][y+1] == true)
  43.         {
  44.             ButtonArr[x][y].setText("");
  45.             Frame frame = new Frame();
  46.                 /*JOptionPane.showMessageDialog(frame,
  47.                                 "你踩到炸彈了,遊戲結束!",
  48.                                 "警告訊息",JOptionPane.WARNING_MESSAGE);*/
  49.                 int i = JOptionPane.showConfirmDialog(frame,"你踩到炸彈了,遊戲結束!",
  50.                                 "警告訊息",JOptionPane.OK_CANCEL_OPTION);

  51.                 if(i == 0)
  52.                 {
  53.                     System.out.println("你按下了確定");
  54.                 }
  55.                 else if(i == 2)
  56.                 {
  57.                        System.out.println("你按下了取消");
  58.                 }
  59.                 else{}

  60.                
  61.             ReGame();
  62.             //System.out.println("遊戲結束");
  63.         }
  64.         else{
  65.             ButtonArr[x][y].setText("-");
  66.             ButtonArr[x][y].setEnabled(false);
  67.                     showNearBombnumber(x, y);
  68.         }
  69.     }
複製代碼

作者: buy    時間: 2010-11-21 20:48

  1.     void showNearBombnumber(int i,int j)
  2.     {
  3.         int I = i+1;
  4.         int J = j+1;

  5.         if(!ButtonArr[i][j].getText().equals("-"))
  6.         {
  7.             //遞迴終止條件
  8.         }
  9.         else{

  10.         if(i-1 >= 0 && j-1 >=0) //左上方
  11.         {
  12.             if(CountBombArr[I-1][J-1] == 0)
  13.             {
  14.                if (ButtonArr[i-1][j-1].isEnabled() == true)
  15.                {
  16.                     ButtonArr[i-1][j-1].setText("-");
  17.                     ButtonArr[i-1][j-1].setEnabled(false);
  18.                     showNearBombnumber(i-1, j-1);
  19.                 }
  20.             }
  21.             else
  22.             {
  23.                 if(ButtonArr[i-1][j-1].isEnabled() == true && BombArr[I-1][J-1] == false)
  24.                 {
  25.                     ButtonArr[i-1][j-1].setText(String.valueOf(CountBombArr[I-1][J-1]));
  26.                 }
  27.             }
  28.         }


  29.     boolean IsWin()
  30.     {
  31.         int countBomb=0,countNow=0;
  32.         for (int i = 0;i < ButtonArr.length ; i++)
  33.         {
  34.             for (int j = 0;j < ButtonArr.length ; j++)
  35.             {
  36.                 if(ButtonArr[i][j].isEnabled() == true)
  37.                     countNow++;
  38.             }
  39.         }

  40.         for (int i = 0;i < ButtonArr.length ; i++)
  41.         {
  42.             for (int j = 0;j < ButtonArr.length ; j++)
  43.             {
  44.                 if(BombArr[i+1][j+1] == true)
  45.                     countBomb++;
  46.             }
  47.         }

  48.         return (countBomb == countNow)?true:false;
  49.     }

  50.     void clickEvent(int x,int y)
  51.     {

  52.         if(BombArr[x+1][y+1] == true)
  53.         {
  54.             ButtonArr[x][y].setText("");
  55.             Frame frame = new Frame();
  56.                 int i = JOptionPane.showConfirmDialog(frame,"你踩到炸彈了,[確定]重新遊戲,[取消]關閉遊戲",
  57.                                 "警告訊息",JOptionPane.OK_CANCEL_OPTION);
  58.                 if(i == 0)
  59.                     System.out.println("你按下了確定");
  60.                 else if(i == 2)
  61.                        System.exit(0);
  62.                 else{}            
  63.             ReGame();
  64.             //System.out.println("遊戲結束");
  65.         }
  66.         else{
  67.             ButtonArr[x][y].setText("-");
  68.             ButtonArr[x][y].setEnabled(false);
  69.             if(IsWin())
  70.             {
  71.                 Frame frame = new Frame();
  72.                 JOptionPane.showConfirmDialog(frame,"你贏了遊戲,[確定]重新遊戲,[取消]關閉遊戲",
  73.                                 "警告訊息",JOptionPane.OK_CANCEL_OPTION);
  74.             }
  75.             else
  76.                     showNearBombnumber(x, y);
  77.         }
  78.     }
複製代碼





歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://istak.org.tw/seed/) Powered by Discuz! 7.2