java - Java 中的国际象棋游戏 : Should Square Class Have "Generate Possible Moves" Method?

标签 java

我正在编写一个国际象棋游戏。我的基本设计是有一个由方形对象组成的二维数组 (8 x 8)。正方形有许多字段:int height、int width、Piece piece(如果为空则为 null,否则为某种类型的 Piece 对象。

注意:Rook、Knight、Bishop 等都扩展了 Piece。

现在,考虑到我的 OOP 设计,我对如何找出给定棋子的合法走法有些迷惑。这是我的想法:

1) 用户点击方形 2) 我们判断正方形上是什么棋子(如果为空,返回错误信息) 3) 为那个方 block 上的棋子生成合法的着法

我担心编写如下代码:

if (clickedSquare.piece.instanceOf(Rook)) {
    return Rook.getLegalDestinationSquares(clickedSquare);
} else if (clickedSquare.piece.instanceOf(Bishop)) {
    return Bishop.getLegalDestinationSquares(clickedSquare);
} else if...

这看起来真的很糟糕。必须有一种方法可以更好地符合 OOP,但我仍在学习。

感谢您的帮助, 马里奥格

最佳答案

您不需要创建那个if 语句。只需获取场上的当前作品并调用一些方法,如 (getLegalMoves()) 或其他方法。 如果字段为空 - 返回允许移动的空列表。

public abstract class Piece {

    public abstract List<Field> getFieldsAllowed(Field field);
}
public class Rook extends Piece {

    @Override
    public List<Field> getFieldsAllowed(Field field) {
        // TODO Auto-generated method stub
        return null;
    }    
}
public class Field {

    public Piece getPiece() {
        // get current piece
    }
}

是这样的。尝试找到您自己的解决方案。这个并不完美。

关于java - Java 中的国际象棋游戏 : Should Square Class Have "Generate Possible Moves" Method?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27840471/

相关文章:

java - 如何在 pdf 文件内容中搜索并附加到电子邮件

java - Java中的静态方法

java - 为 JSP 和 Thymeleaf 设置两个模板解析器

java - 在 Java 中使用 Collections.rotate() 在列表中向后移动元素

java - 只显示小数点后两位

java - 如何将时间的字符串表示形式转换为 Unix 时间?

java - 调试慢速 Java 方法

java - 降低双线性插值的时间复杂度

java - onchange 强制页面提交

java - 如何在 spring-boot 配置中将 yml 映射绑定(bind)到 Java 映射?