- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在编写一个基本的 Java 国际象棋游戏并编写了以下类:Game、Player、Board、Square、Piece(每个特定棋子的父类(super class))和每个特定棋子类(例如 Pawn、Knight、Bishop等)
其中一个比较棘手的方法是根据移动的玩家是否被检查来确定移动是否有效。我的解决方案如下:
我从这里获取关于如何克隆的提示: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();
}
关于问题:
最佳答案
我有一个替代方案,看看你喜不喜欢。
无需使用clone
!前段时间写了一个中国象棋程序。让我解释一下我做了什么:(这只是一个大纲,你必须自己做细节)
我有一个 2D 数组 Piece
和另一个 2D 按钮数组。当用户点击一个 Piece 时,Piece
类中的一个抽象方法 getValidLocations
被调用,该方法返回一堆坐标来指示 Piece
去吧。当用户单击按钮时,棋子将移动到按钮的位置。
坏消息是,我不会下棋。我只会中国象棋,所以我不能告诉你如何写getValidLocations
的算法,抱歉!
关于Java 国际象棋 : Unsure How to Clone Properly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31642395/
我是一名优秀的程序员,十分优秀!