Commit a2d65157 authored by 刘家荣's avatar 刘家荣 💬
Browse files

fix(CheckRule): fixed Solder->General; add clone() method for models

parent 0e123c7b
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -52,8 +52,9 @@ public class CheckRule {
        if (dstChess.isReversal()) {
            return handleChess.getChessColor() != dstChess.getChessColor() && (
                    (handleChess.getChessType() == ChessType.SOLDIER &&
                            dstChess.getChessType() == ChessType.CANNON) ||
                            dstChess.getChessType().compareTo(handleChess.getChessType()) >= 0
                            (dstChess.getChessType() == ChessType.CANNON ||
                                    dstChess.getChessType() == ChessType.GENERAL)
                    ) || dstChess.getChessType().compareTo(handleChess.getChessType()) >= 0
            );
        } else {
            return (handleChess.getChessType() == ChessType.CANNON);
+17 −3
Original line number Diff line number Diff line
package model;


import com.sun.source.tree.SynchronizedTree;
import model.chess.Chess;
import model.chess.EmptySlot;
import model.chess.Square;
@@ -14,7 +15,7 @@ import java.util.*;
 * 这个类表示棋盘组建,其包含:
 * Square[][]: 4*8个方块格子组件
 */
public class Chessboard implements Serializable {
public class Chessboard implements Serializable, Cloneable {
    /**
     * 不彻底的单例
     */
@@ -23,10 +24,10 @@ public class Chessboard implements Serializable {
    public static final int ROW_SIZE = 8;   //行数
    public static final int COL_SIZE = 4;   //列数

    private final Square[][] squares = new Square[ROW_SIZE][COL_SIZE];  //方格子列表
    private Square[][] squares = new Square[ROW_SIZE][COL_SIZE];  //方格子列表

    //两个亡子堆->亡子堆组
    private final SideStack[] sideStacks = new SideStack[]{
    private SideStack[] sideStacks = new SideStack[]{
            new SideStack(ChessColor.BLACK),
            new SideStack(ChessColor.RED)
    };
@@ -37,6 +38,7 @@ public class Chessboard implements Serializable {
     * 初始化整个棋盘,包括所有棋子和亡子堆
     */
    public Chessboard() {
        History.init(this);
        Random random = new Random();
        //此列表的元素是元组,每个元组存储的是对应棋子的部分参数(颜色和类别)
        ArrayList<Tuple2<ChessColor, ChessType>> paramsList = new ArrayList<>();
@@ -156,4 +158,16 @@ public class Chessboard implements Serializable {
    public void loadGame(List<String> chessData) {
        chessData.forEach(System.out::println);
    }

    @Override
    public Chessboard clone() {
        try {
            Chessboard clone = (Chessboard) super.clone();
            clone.squares = this.squares.clone();
            clone.sideStacks = this.sideStacks.clone();
            return clone;
        } catch (CloneNotSupportedException e) {
            throw new AssertionError();
        }
    }
}
+12 −1
Original line number Diff line number Diff line
@@ -3,10 +3,11 @@ package model;
import model.chess.Chess;
import view.ChessboardCom;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;

public class SideStack {
public class SideStack implements Serializable, Cloneable {
    public static final int ROW_SIZE = 7;
    public static final int COL_SIZE = 5;

@@ -84,4 +85,14 @@ public class SideStack {
                .getSquareComAtPoint(chess.getGridPoint()).repaint();
    }

    @Override
    public SideStack clone() {
        try {
            SideStack clone = (SideStack) super.clone();
            clone.chesses = (ArrayList<ArrayList<Chess>>) this.chesses.clone();
            return clone;
        } catch (CloneNotSupportedException e) {
            throw new AssertionError();
        }
    }
}
+12 −1
Original line number Diff line number Diff line
@@ -6,10 +6,12 @@ import model.ChessType;
import model.Chessboard;
import model.GridPoint;

import java.io.Serializable;

/**
 * 表示棋盘上非空棋子的格子,是所有非空棋子的父类
 */
public class Chess extends Square {
public class Chess extends Square implements Serializable, Cloneable {
    protected final ChessColor chessColor;  //棋子阵营颜色
    protected final ChessType chessType;    //棋子兵种
    protected boolean alive;    //是不是没死
@@ -75,4 +77,13 @@ public class Chess extends Square {
                (!(dstSquare instanceof Chess dstChess) ||
                        CheckRule.checkRank(handleChess,dstChess));
    }

    @Override
    public Chess clone() {
        try {
            return (Chess) super.clone();
        } catch (CloneNotSupportedException e) {
            throw new AssertionError();
        }
    }
}