棋盘游戏的Java实现

棋盘游戏的Java实现,java,implementation,class-diagram,Java,Implementation,Class Diagram,首先,我不确定是否允许它提出这种问题。所以我试图创建一个棋盘游戏,我被困在为棋子生成有效移动的实现中。下面是类图的摘录 你可以把这个棋盘游戏想象成国际象棋,所以我们需要知道其他棋子的位置,同时生成有效的移动。问题是我不知道如何检查它。我的类图错了吗?还是每次检查方块时都要检查棋盘?我如何在Java中做到这一点?谢谢你的帮助。这件作品不应该决定它的有效移动是什么,它应该只知道它在哪里以及它如何能够移动。它不对这种逻辑负责 董事会应该管理是否允许这样做(也就是说,它获取一个棋子,将其可能的移动返回

首先,我不确定是否允许它提出这种问题。所以我试图创建一个棋盘游戏,我被困在为棋子生成有效移动的实现中。下面是类图的摘录


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

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

董事会应该管理是否允许这样做(也就是说,它获取一个棋子,将其可能的移动返回给它,然后返回有效的移动)

Piece
类公开了一个
getPossibleMoves
方法,该方法返回它可以到达的位置列表:

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

您是否有任何代码支持您的问题?UML图,这是世界上显示您仍然是学生的第一种方式;)至于这个问题-棋子不应该决定它的有效移动是什么,它应该只知道它在哪里以及它如何能够移动,董事会应该管理是否允许这样做(也就是说,它接受一个棋子,它将可能的移动返回给它,然后返回有效的移动)@BenjaminGruenbaum:你应该给出一个答案,OP应该接受它。@BrianTopping我认为它不够好-但既然你问了,我就把它作为答案添加了-谢谢。我还没有任何代码,因为我还在设计类图,然后才实现它。我也想到了这一点,问题是,我有不同类型的棋子,所以这意味着我必须检查棋子的类型,对吗?不,棋子只返回可能的移动-这应该是一个多态方法。你的意思是在“棋子”类中实现移动规则?“我很困惑。”杰米萨隆补充道
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());
}