2015-04-26 115 views
3

首先,我不確定是否允許問這樣的問題。所以我正在嘗試創建一個棋盤遊戲,並且我被困在爲Piece生成有效棋步的實施中。這是類圖的摘錄。用Java實現棋盤遊戲

Class Diagram

你可以認爲這個棋盤遊戲如象棋,所以我們需要知道其他部分的位置,同時產生有效的移動。問題是我不知道如何檢查它。我的班級圖錯了嗎?或者我每次檢查廣場時都應該檢查董事會嗎?我怎樣才能在Java中做到這一點?感謝您的幫助。

+0

你有任何代碼可以支持你的問題嗎? – CKing

+4

一個UML圖,世界上第一種顯示你仍然是學生的方法;)關於這個問題 - 作品不應該決定它的有效動作是什麼,它只應該知道它在哪裏以及它如何能夠移動,董事會應該管理是否允許或不允許(也就是說,它需要一塊返回其可能的舉動,並反過來返回有效的舉動) –

+0

@BenjaminGruenbaum:你應該做出答案和OP應該接受它。 –

回答

3

這件作品不應該決定它的有效動作是什麼,它只應該知道它在哪裏以及它如何移動。它對這種邏輯不負責任。

董事會應該管理是否允許或不允許(也就是說,它需要一塊返回其可能的舉動,並反過來返回有效的舉動)。

Piece類公開getPossibleMoves方法,它返回位置的列表它可以達到:

public List<Square> getPossibleMoves(){ // might want to differentiate types of moves 

然後,板類有一個getValidMoves方法,它接受片並返回其有效移動。

public List<Square> getValidMoves(Piece piece) { 
    return piece.getPossibleMoves(). 
       stream(). // and filter by 
       filter(move -> isOnValidBoardCoordinate(move)). // can shorten 
       filter(move -> doesNotIntersectOtherPiece(move)). 
       filter(move -> otherValidation(move)). 
       collect(Collectors.toList()); 
} 
+0

我也曾想過,問題是,我有不同類型的作品,所以這意味着我必須檢查作品的類型是否正確? – jamesalone

+0

不,一塊只返回可能的移動 - 這應該是一個多態的方法。 –

+0

你的意思是在'Piece'課上實施運動規則?我很困惑。 – jamesalone