【问题标题】:Board Game Implementation in JavaJava中的棋盘游戏实现
【发布时间】:2015-04-26 12:09:45
【问题描述】:

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

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

【问题讨论】:

  • 你有任何代码来支持你的问题吗?
  • 一张UML图,世界上展示你仍然是学生的第一方式;)至于问题——这件作品不应该决定它的有效动作是什么,它应该只知道在哪里它是以及它如何移动,董事会应该管理是否允许这样做(也就是说,它需要一个将可能的移动返回给它的棋子,然后返回有效的移动)
  • @BenjaminGruenbaum:你应该给出答案,并且 OP 应该接受它。
  • @BrianTopping 我认为这还不够好 - 但既然你问我添加它作为答案 - 谢谢。
  • 我还没有任何代码,因为在实现之前我还在设计类图。

标签: java implementation class-diagram


【解决方案1】:

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

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

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());
}

【讨论】:

  • 我也想过,问题是,我有不同类型的棋子,所以我必须检查棋子的类型对吗?
  • 不,一个棋子只返回可能的动作——这应该是一个多态方法。
  • 你的意思是在'Piece'类中实现移动规则?我很困惑。
  • @jamesalone 添加了一个示例
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
  • 2010-11-27
  • 1970-01-01
相关资源
最近更新 更多