2009-04-25 76 views
3

我正在創建一個基於2D的平鋪模擬遊戲。 我有一個gridSquares的二維數組,可以從許多不同的類和方法訪問和更改。 我應該每次傳遞gridSquares的二維數組,還是讓它成爲一個全局?最佳做法是什麼?我應該使用全局變量還是在java中傳遞變量?

我在想,它是否會創建一個只包含一組變量的選項,所有類都可以擴展?這是一個好的或壞的想法/不好的做法?

我還是相當新的Java,所以我仍然學習很多!

在此先感謝。

相對

+0

答案+使用它作爲一個單身人士! – Relequestual 2009-04-28 16:38:25

回答

7

您不應該根據數據結構進行設計。 Java是一種面向對象的語言。試着把你的問題當作對象進行交互。這不是一個二維數組;這是一個董事會對象。建立操縱其狀態到問題中的行爲,並隱藏您碰巧選擇了二維數組的事實。

我沒有一局的所有細節制定出來的,但它應該像這樣開頭:

public class Board 
{ 
    // This is what you're passing around now; Board hides it. 
    // Square is the abstraction of a position on the Board 
    private Square[][] grid; 

    public Board(int nRows, int nCols)   
    { 
     this.grid = new Square[nRows][]; 
     for (int i = 0; i < this.grid[i].length; ++i) 
     { 
      this.grid[i] = new Square[nCols]; 
     } 
    } 

    // Now add methods for adding Pieces to the Board, rules for moving them, etc. 
} 
1

如果你絕對需要,在你的含電網類(A)宣佈格爲公共,然後導入靜態A類(import static A;)。這將使您能夠與網格進行交互,而不會擴展A類,至少。

你的代碼不應該從太多的地方訪問網格。考慮重新考慮你的代碼,以避免從各地操縱網格。分開你的顧慮。像你提到的那樣,使用繼承絕對不是一個好主意。

2

如果你的某些你只會有一個'grid的二維數組',你總是可以使用單例模式,essentailly使其成爲全球。

雖然有爭論和反對,但你可能會發現有一天你想能夠預載地圖,但單身人士阻礙(不能創建一個單例的第二個實例)。

+0

哼。我可能最終將它擴展到有多個樓層。我想這種方式對於這種情況並不是最好的 – Relequestual 2009-04-25 13:57:06

+0

即使你有多層(本質上是從2d到3d),仍然只有一個全局遊戲狀態。因此,一個單身人士仍然會工作。 – KarstenF 2009-04-26 00:00:32

+0

確實。我將不得不閱讀單身人士以及如何使用它們。我以前沒有處理過,也沒有被教過。再次感謝 – Relequestual 2009-04-27 10:16:18

4

將它們傳遞給構造函數,並將它們保存在成員變量中。

如果您從太多的地方訪問它們,您可能會遇到設計問題。

1

我會推薦它,使其靜態的,而是一個建立明確的類來讀取數據從它,說GridSquaresAcessor。在這個類中,你編寫了所有訪問數組的方法。更好的是,使其成爲該類的私有靜態字段,以避免任何其他代碼以本類中未定義的方式操作。

在每個類中您都需要訪問數組,您可以將一個GridSquaresAcessor作爲參數傳遞給構造函數,並將其保存在局部變量中。

我個人不喜歡單身,因爲他們使它很難測試代碼...

如果你的代碼是多線程的,務必使二維陣列同步。

相關問題