当前位置: 首页 > 知识库问答 >
问题:

Java中的象棋游戏:Square类应该有“生成可能的招式”方法吗?

莫乐
2023-03-14

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

NB:车,骑士,主教等都延伸件。

现在,在我的OOP设计中,我有点不知道如何确定对于给定的部分,什么移动是合法的。我是这么想的:

1)用户单击方块2)我们确定方块上的棋子(如果为空,则返回错误消息)3)在该方块上为该棋子生成合法移动

我担心编写的代码像:

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

看来真的很糟糕。一定有一种方法可以更好地符合OOP,但我还在学习中。

谢谢你的帮助Mariogs

共有1个答案

东门玺
2023-03-14

您不需要创建那个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
    }
}

像这样的东西。试着找到自己的解决方法。这个不完美。

 类似资料:
  • 我试图创建象棋游戏,所以我为象棋工具创建抽象类(皇后,国王,车...)我还创建了king工具来检查我的代码: 并创建game_board类: 问题是,当我尝试向矩阵添加对象时,它的show me错误:1 IntelliSense:不允许抽象类类型“King”的对象:纯虚函数“chess_tool::legal_movement”没有覆盖器 ....

  • 我正在学习Javascript,并作为一个项目作业在其中制作象棋游戏。我已经为Rook,Pawn,Knight和Bishop的移动编码了逻辑。现在我被女王运动困住了。一个女王的走位基本上都涉及到毕晓普和鲁克的走位逻辑。 我想做的是,当皇后被移动时,检查源磁贴的文件是否与目标磁贴相同。如果相同,则调用Rook的代码移动逻辑,否则调用Bishop的代码移动逻辑。例如,如果皇后被放置在d4(源平铺),并

  • 本文向大家介绍Java棋类游戏实践之单机版五子棋,包括了Java棋类游戏实践之单机版五子棋的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java实现的五子棋游戏代码,分享给大家供大家参考,具体代码如下 一、实践目标     1.掌握JavaGUI界面设计        2.掌握鼠标事件的监听(MouseListener,MouseMotionListener) 二、实践内容      

  • 我试图为一个棋盘游戏找到一个更好的启发式函数,我将在代码后指定其规则。我的评估功能是: 初始板持有绿色和红色令牌,如图所示。人工智能先移动,使用与你相反的颜色,攻击你的代币。在黑色单元上,令牌可以正交(左、右、上、下)或对角移动。如果是在白血球上,你只能正交移动。 当您将令牌移动到对手令牌旁边时,您将删除该方向上所有对手的令牌。例如,如果我将绿色令牌从 C4 移动到 C5,我将杀死 C-6 到 C

  • 本文向大家介绍Javafx实现国际象棋游戏,包括了Javafx实现国际象棋游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Javafx实现国际象棋游戏的具体代码,供大家参考,具体内容如下 基本规则 棋子马设计“日”的移动方式 兵设计只能向前直走,每次只能走一格。但走第一步时,可以走一格或两格的移动方式 请为后设计横、直、斜都可以走,步数不受限制,但不能越子的移动方式。 车只能横向

  • 五子棋(Gomoku)是一款经典的线上五子棋游戏,5 子连成一线者胜。