加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java国际象棋:不确定如何正确克隆

发布时间:2020-12-15 04:46:26 所属栏目:Java 来源:网络整理
导读:我正在编写一个基本的 Java国际象棋游戏,并编写了以下类:游戏,玩家,棋盘,广场,棋子(每个特定棋子的超类),以及每个特定棋子类(例如Pawn,Knight,Bishop等. ) 其中一个棘手的方法是根据是否导致移动的玩家受到检查来确定移动是否有效.我的解决方案如下: 克隆
我正在编写一个基本的 Java国际象棋游戏,并编写了以下类:游戏,玩家,棋盘,广场,棋子(每个特定棋子的超类),以及每个特定棋子类(例如Pawn,Knight,Bishop等. )

其中一个棘手的方法是根据是否导致移动的玩家受到检查来确定移动是否有效.我的解决方案如下:

>克隆当前的董事会
>移动
>看看移动球员是否在检查中
>如果是的话,禁止移动;否则,允许移动

我正在考虑如何从这里克隆:http://www.jusfortechies.com/java/core-java/cloning.php

现在,board对象由2d Square对象组成.每个方形对象都有一个零件字段,该字段为空(在其上没有任何部分)或引用一个部件对象(在其上有一个部分). Board对象还有一个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();
}

在问题上:

>这看起来大致正确吗?
>我的Square对象也有一个Board字段,它基本上让我
参考他们所属的董事会.这会搞砸我的尝试
通过让我的每个64个方块分别克隆板来克隆?

解决方法

我有另一种解决方案,看看你是否喜欢这个.

没有必要使用克隆!我刚才写了一个中国象棋程序.让我解释一下我做了什么:(这只是一个大纲,你必须自己做细节)

我有一个2D数组和另一个2D数组按钮.当用户点击Piece时,会调用Piece类中的抽象方法getValidLocations,并且此方法返回一组坐标以指示Piece可以去哪里.当用户点击按钮时,该块移动到按钮的位置.

坏消息是,我不知道如何下棋.我只知道中国象棋,所以我不能告诉你如何编写getValidLocations的算法,对不起!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读