2015-01-09 20 views
2

我正在用Java編寫一個國際象棋遊戲,它已經設置了一個Board類,它有一個2d的Square對象數組。每個正方形都有一個高度和寬度(0到7之間)。我要寫一個方法,它需要一個方形對象,一個垂直偏移量和一個水平偏移量。例如:如果我打電話給getNearbySquare(mySquare,3,2),它應該返回棋盤上的方形對象,它位於mysquare的上方3,mySquare的右邊2。爪哇國際象棋:應該找到附近的廣場是方形或板類的方法嗎?

我最初在Square類中將它寫成實例方法,它只是在垂直和水平偏移量中。問題是,我正在創建並返回一個新的方形對象,而不是我的Board類中的2d數組中的正確對象。

我看到兩個選項:

1)使在Square類的實例方法,該方法在一局對象,垂直偏移量和水平偏移量。我將找到調用此方法的方形對象的當前高度和寬度,添加垂直和水平偏移量以獲取所需平方的Board中的新位置,然後使用Board [newHeight] [newWidth]訪問它。

2)在Board類中創建一個實例方法做同樣的事情,但不要求我像在1)中那樣傳遞Board對象。相反,我需要傳入方形對象。

只要做出這些決定,是否有一個普遍接受的做法?

感謝您的幫助, Mariogs

+0

董事會需要了解的廣場,沒有那麼多的相反。這應該是董事會類的一種方法。 – 2015-01-09 22:33:40

回答

5

從一個非常簡單的視點它更有意義的getNearbySquare()方法是爲Board,而不是從正方形,因爲該方法需要親密信息的實例方法關於板的佈局和佈局,這將更容易從Board實例中進行(並保持封裝/鬆散耦合)。

Square實例上使用方法意味着給方塊對象訪問有關應該可能是私有的板的信息。

相關閱讀;

+0

儘管如此:當用戶點擊一個方塊時,我將要訪問該板(如您所建議的那樣調用getNearbySquare())。但我沒有提到董事會,除非我把它變成一個Square的領域......但是Square知道它的董事會...... – bclayman 2015-01-09 23:09:58

+0

@Mariogs - 只是爲了反映Leandro的觀點,只要董事會擁有自己的內部組件(領域),它就可以參考它所屬的董事會。 – 2015-01-10 09:38:31

1

這是罰款的方知道它所屬的廣場外,董事會並不孤立。否則,廣場不知道它的位置是沒有意義的。當用戶點擊Square時,Square可能會將該事件傳達給其董事會,董事會將根據Square的位置對用戶行爲做出反應。鑑於董事會也應該知道它的方格,它很容易計算出哪一方會成爲下一步行動的目標。

參見OOP Design for Chess Game in Java (Trouble with Piece/Board Interaction)