2013-04-18 81 views
0

我是一個基本的計算機科學學生選修介紹到基本的計算機科學。現在我們正在研究一年結束的項目,這是一個使用java的基於文本的掃雷遊戲。對於第一部分,我們假定,使5×5的掃雷板的表示,爲2 d char數組和手動添加彈位置,然後更新指示相鄰bombs.Then我們創建板,將代表的第二表示的數字無論細胞是否已被揭示。二維字符數組的掃雷遊戲循環

之後,我們需要編寫以下方法:

印刷電路板(的char [] []板,布爾[] []顯露):打印掃雷板篩選文本形式。請記住,印刷電路板應該反映哪些細胞已經被揭示。

揭示細胞(INT行,INT山口,布爾[] []的遊戲板,CHAR [] []的答案板):適當地修改該狀態陣列時的細胞是同時還確定如何揭示要顯現根據掃雷規則周圍的空白處。

然後,我們必須寫一個遊戲主循環,即整合了這兩種方法,同時檢查,看看如果玩家贏了還是輸。

我已經做了印刷板和顯示單元的方法,我只是需要做一個遊戲板和遊戲循環進行測試。

我們不會大聲地在java.lang之外使用類或模塊(不要導入任何庫)。

這裏是我的代碼:
公共靜態無效的主要(字串[] args){

char[][]answerboard= {{'B', '1', '0', '1', 'B'}, 
         {'1', '1', '1', '2', '1'}, 
         {'0', '1', 'B', '2', '1'}, 
         {'1', '1', '1', '2', 'B'}, 
         {'B', '1', '0', '1', '1'}}; 
// Initialized answer board: This is the board that shows what is inside each cell. I need to create a second 2d array representation that shows which cells have been revealed. 
int row , col ; 
for (row = 0; row < answerboard.length; row++){ 
    for (col = 0; col < answerboard[1].length; col++) 
    System.out.print(answerboard[row][col]); 
    System.out.println(); 

    } 


} 
    public static void printBoard(char[][] board, boolean[][] isRevealed) 
    { 
     for(int i=0; i < board.length; i++) 
     { 
       for(int j=0; j<=board[0].length; j++) 
       { 
         if(isRevealed[i][j]=true) 
         System.out.print(board[i][j]+" ");//prints hidden char 
         else 
         if(isRevealed[i][j]= false) 
         System.out.print("- "); 
       } 
       System.out.println(" "); 
     } 
} 

    public static void revealCell(int row, int col, boolean[][] gameboard, char[][]answersboard) { 
    System.out.println(row + " " + col); 
    if(row < 0|| row >=answersboard.length ||col < 0|| col > answersboard[0].length){ 
     System.out.println("bad input"); 
     return; 
    } 

    if(answersboard[row][col] == 'B'){ 
     gameboard[row][col] = answersboard[row][col]; 
     return; 
    } 
    if(answersboard[row][col] == '1'||answersboard[row][col] == '2'){ 
     gameboard[row][col] = answersboard[row][col]; 
     return; 
    } 

    if(answersboard[row][col] == '0'){ 
     gameboard[row][col] = answersboard[row][col]; 
     for(int i = row-1; i <= row +1; i++){ 
      for(int j = col-1; j<= col +1;j++){ 
       revealCell(i,j, gameboard, answersboard); 
      } 
     } 
    } 
} 

回答

0

不能確定你的問題是...是沒有的樣子,你問了一句。

只是一個建議,也許這可能是一個好主意,可以做一個MineSweeperBoard類,並且這些都是類的公共非靜態方法。教師總是希望看到一年級的學生能夠掌握Object Orients編程,並且能夠將課堂拉出問題。

編輯。另外你可能不應該在你的方法System.out.println(...)的東西,都應該是工作的遊戲鍵盤的狀態。這是創造副作用,並打破每個方法想法的一項任務。而是有任何處理輸入/輸出的方法決定在調用此方法之前輸入是否合適。理想情況下,如果有人給方法提供了不良數據,那麼這些方法會拋出IllegalArgumentExceptions,但您可能尚未覆蓋該方法。

祝好運您的項目和考試的其餘部分!

+0

我想要做的是將我的初始板,第二個顯示的狀態表示和打印板和顯示單元方法合併到遊戲循環中,該循環詢問用戶要顯示的單元格的座標並檢查看看玩家是贏了還是輸了。但我無法弄清楚。 – user2292794 2013-04-21 05:35:43