首先,我不确定是否允许提出这样的问题。所以我正在尝试创建一个棋盘游戏,但我被困在为 Piece 生成有效 Action 的实现上。这是类图的摘录。

您可以将这个棋盘游戏视为国际象棋,因此我们需要在生成有效移动的同时知道其他棋子的位置。问题是我不知道如何检查它。我的类图错了吗?还是每次我检查一个正方形时都应该检查棋盘?我如何在 Java 中做到这一点?谢谢你的帮助。

最佳答案

棋子不应该决定它的有效移动是什么,它应该只知道它在哪里以及它如何移动。它不对这种逻辑负责。

董事会应该管理是否允许这样做(也就是说,它需要一个棋子,将其可能的移动返回给它,然后返回有效的移动)。
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());
}

关于java - Java 中的棋盘游戏实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29877431/

10-12 18:06