2010-12-14 64 views
0

當遊戲開始時,我已經能夠成功地啓動一個雷區,隨機分散在地上的10個地雷。然而,當遊戲開始時,我遇到了隱藏這些地雷的問題。如你所知,掃雷的重點是要找到哪些地雷無法看到它們。我需要幫助弄清楚如何隱藏地雷。Java掃雷遊戲的問題。遊戲開始時隱藏地雷?

下面是我爲我的網格類編寫的代碼,它啓動了網格幷包含一個用地雷填充的方法。我怎樣才能隱藏這些地雷,並只在點擊時才顯示它們?謝謝您的幫助!

public class Grid { 

private int[][] grid; 
private boolean isHidden; 
private int rows; 
private final int columns; 
private final int mines; 


public Grid() { 
    this.rows = 8; 
    this.columns = 8; 
    this.mines = 10; 
    this.grid = new int[rows][columns]; 

} 

public int[][] getGrid() { 
    return grid; 
} 

public int getRows() { 
    return rows; 
} 

public int getColumns() { 
    return columns; 
    } 

public void fillGrid() { 
    Random ranGen = new Random(); 

    for(int i = 0; i < this.mines;) { 
    int row = ranGen.nextInt(this.rows - 1); 
    int column = ranGen.nextInt(this.columns - 1); 

    if(grid[row][column] != MinesweeperGUI.MINE) { 
    grid[row][column] = MinesweeperGUI.MINE; 
    i++; 
    } 
    } 
    } 
+1

這讓我回想起來,我不得不在Java中編寫掃雷工具,以便在uni實驗室工作。 – Orbling 2010-12-14 00:34:09

+0

有道理,這是一個由uni指定的項目,我參加了大聲笑 – jesse 2010-12-14 00:36:35

回答

4

很多方法。這裏最容易實現的將是布爾值的二維數組:打開和未打開。如果未打開,請顯示一個封閉的方塊。否則,顯示那裏有什麼。

另一種方法是將這個更加面向對象,並做一個Tile類:它擁有一個礦的布爾值,以及一個打開/關閉/標記/問號的枚舉。

+0

謝謝!實施這些方法的效果很好。感謝您的幫助 – jesse 2010-12-14 04:41:05

1

你應該有兩個矩陣:一個用於礦山(MineMatrix)和一種用於跟蹤用戶點擊(UserClickMatrix)。

您應該只顯示最終用戶UserClickMatrix並在遊戲開始時用NotClicked初始化所有單元格。每當用戶點擊一個單元格時,將單元格的狀態更改爲Clicked。然後,抓住UserClickMatrix的單元格索引並檢查MineMatrix(MineMatrix[clickedRow][clickedColumn] == MINE)。如果條件評估爲TRUE,則遊戲結束。

0

爲什麼您的網格矩陣不包含類GridElement的元素?這個GridElement類可以有一個屬性「bool visibile」。 int的網格矩陣不太好。想想更多的OO。

+0

我試圖早些實現這一點,但我們有一個嚴格的方向列表,我們需要遵循。我嘗試創建一個Square類來表示網格中的元素。我們的教授要求我們爲網格提供一個二維數組......這很愚蠢,如果你問我的話。 – jesse 2010-12-14 00:44:42

+1

Ur prof。在C ^^中認真思考。我應該建議Pimgd的答案是最好的。 – 2010-12-14 00:47:52