gpt4 book ai didi

Java 国际象棋 : Unsure How to Clone Properly

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:38:13 26 4
gpt4 key购买 nike

我正在编写一个基本的 Java 国际象棋游戏并编写了以下类:Game、Player、Board、Square、Piece(每个特定棋子的父类(super class))和每个特定棋子类(例如 Pawn、Knight、Bishop等)

其中一个比较棘手的方法是根据移动的玩家是否被检查来确定移动是否有效。我的解决方案如下:

  1. 克隆当前董事会
  2. 行动起来
  3. 查看移动玩家是否在检查中
  4. 如果是,则不允许移动;否则,允许移动

我从这里获取关于如何克隆的提示:http://www.jusfortechies.com/java/core-java/cloning.php

现在,棋盘对象由一个二维方形对象数组组成。每个正方形对象都有一个 piece 字段,该字段要么为 null(上面没有 piece),要么引用 piece 对象(上面有 piece)。棋盘对象还有一个 whiteKingSquare 和一个 blackKingSquare(都是 Square 对象),可以更快/更轻松地定位白王或黑王。

我在我的 Board 类中编写了以下方法:

public Object clone() throws CloneNotSupportedException {
Board clonedBoard = (Board) super.clone();
for (int i = 0; i < HEIGHT; i++) {
for (int j = 0; j < WIDTH; j++) {
clonedBoard.myBoard[i][j] = new Square(this, i, j);
clonedBoard.whiteKingSquare = myBoard[7][4];
clonedBoard.blackKingSquare = myBoard[0][4];
}
}
return clonedBoard;
}

但是,因为 Board 引用一个 8 x 8 的 Square 对象数组,所以我必须克隆其中的每一个。我在 Square 类中编写了这个方法:

public Object clone() throws CloneNotSupportedException {
return (Square) super.clone();
}

最后,我在 Piece 类中写了这个方法:

public Object clone() throws CloneNotSupportedException {
return (Piece) super.clone();
}

关于问题:

  1. 这看起来大致正确吗?
  2. 我的 Square 对象也有一个 Board 字段,基本上可以让我引用他们所属的委员会。这会扰乱我的尝试吗通过让我的 64 个方 block 中的每一个分别克隆板来进行克隆?

最佳答案

我有一个替代方案,看看你喜不喜欢。

无需使用clone!前段时间写了一个中国象棋程序。让我解释一下我做了什么:(这只是一个大纲,你必须自己做细节)

我有一个 2D 数组 Piece 和另一个 2D 按钮数组。当用户点击一个 Piece 时,Piece 类中的一个抽象方法 getValidLocations 被调用,该方法返回一堆坐标来指示 Piece 去吧。当用户单击按钮时,棋子将移动到按钮的位置。

坏消息是,我不会下棋。我只会中国象棋,所以我不能告诉你如何写getValidLocations的算法,抱歉!

关于Java 国际象棋 : Unsure How to Clone Properly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31642395/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com