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

(undone-2)feat(model interfaces)

parent ffb199c0
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
package controller;


import model.game.ChessColor;
import model.game.Chessboard;
import model.game.Chess;
import model.game.Square;
import model.game.*;
import view.ChessGameFrame;
import view.ChessboardCom;
import view.SquareCom;
@@ -69,7 +66,7 @@ public enum ChessClickController {
            ChessClickController.INSTANCE.swapPlayer();
            return false;
        }
        return chess.getChessColor() == Chessboard.getInstance().getCurrentColor();
        return chess.getChessColor() == Game.instance.getCurrentColor();
    }

    public void swapPlayer() {
+20 −0
Original line number Diff line number Diff line
package model;

import model.game.Chessboard;
import model.game.Game;

import java.util.ArrayList;

public class History {

    public static History instance;

    public ArrayList<Step> getSteps() {
        return steps;
    }

    private ArrayList<Step> steps = new ArrayList<>();

    private Game initialState;

    public History(Game initialState) {
        this.initialState = initialState.clone();
    }

}
+23 −2
Original line number Diff line number Diff line
package model;

import model.game.Chess;
import model.game.Chessboard;
import model.game.GridPoint;
import model.game.Square;

public record Step (GridPoint src, Chess srcChess, GridPoint dst, Square dstSquare){
/**
 * 记录一步操作
 * 有两种类型:吃子和行棋
 * 第一种,src吃掉dst,dst被“安葬”到SideStack里面的bury的空位上,bury移到src原来的位置上,三轮换
 * 第二种,src和dst互换,burySquareId写-1,这个-1是区分这一步表示行子还是吃棋的判据
 *
 * @param srcChessId   源棋子id
 * @param dstSquareId  目标空格/棋子id
 * @param burySquareId SideStack里面的空格id
 */
public record Step(int srcChessId, int dstSquareId, int burySquareId) {
    public Step {
        if (srcChessId >= Chessboard.ID_DIVISION
            || (burySquareId >= 0 && burySquareId < Chessboard.ID_DIVISION)
            || (burySquareId < 0 && dstSquareId < Chessboard.ID_DIVISION)
            || (burySquareId >= 0 && dstSquareId >= Chessboard.ID_DIVISION)) {
            throw new IllegalArgumentException(String.format(
                "Illegal Step:{ srcChessId: %d, dstChessId: %d, burySquareId: %d }",
                srcChessId, dstSquareId, burySquareId));
        }
    }
}
 No newline at end of file
+19 −9
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@ public class Chessboard implements Serializable, Cloneable {
    public static final int ROW_SIZE = 8;   //行数
    public static final int COL_SIZE = 4;   //列数

    public static final int ID_DIVISION = ROW_SIZE * COL_SIZE;

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

    //两个亡子堆->亡子堆组
@@ -27,8 +29,6 @@ public class Chessboard implements Serializable, Cloneable {
            new SideStack(ChessColor.RED)
    };

    private ChessColor currentColor = ChessColor.RED;   //执棋颜色

    /**
     * 初始化整个棋盘,包括所有棋子和亡子堆
     */
@@ -83,6 +83,23 @@ public class Chessboard implements Serializable, Cloneable {
        return squares[gridPoint.getY()][gridPoint.getX()];
    }

    /**
     * TODO getSquareById
     * 获取某一id对应的方格对象
     * @param id 方格id
     */
    Square getSquareById(int id){
    }

    /**
     * TODO getChessById
     * 获取某一id对应的棋子对象
     * @param id 棋子id
     */
    Chess getChessById(int id){

    }

    /**
     * 获取亡子堆组
     */
@@ -102,13 +119,6 @@ public class Chessboard implements Serializable, Cloneable {
        throw new NoSuchElementException();
    }

    public ChessColor getCurrentColor() {
        return currentColor;
    }
    public void setCurrentColor(ChessColor currentColor) {
        this.currentColor = currentColor;
    }

    /**
     * 根据Square存储的位置数据,将Square放置在棋盘的数组上
     */
+34 −7
Original line number Diff line number Diff line
@@ -3,19 +3,46 @@ package model.game;
import model.Step;

import java.util.ArrayList;
import java.util.List;

public class Game {
public class Game implements Cloneable{

    private ArrayList<Step> steps = new ArrayList<>();
    public static Game instance;

    private Chessboard initialChessboard;
    private Chessboard chessboard;

    public Game() {
        this.initialChessboard = Chessboard.getInstance().clone();
    private List<Msg> msgList = new ArrayList<>();

    private int[] scoreboard = {0, 0};

    private ChessColor currentColor = ChessColor.RED;   //执棋颜色

    public Chessboard getChessboard() {
        return chessboard;
    }

    public void Step(Chess chess1, Square square2){
        steps.add(new Step(chess1.getGridPoint(), chess1.clone(), square2.getGridPoint(), square2.clone()));
    public List<Msg> getMsgList() {
        return msgList;
    }

    public int[] getScoreboard() {
        return scoreboard;
    }

    public ChessColor getCurrentColor() {
        return currentColor;
    }

    public boolean resolveStep(Step step){
        //TODO resolveStep
    }

    @Override
    public Game clone() {
        try {
            return (Game) super.clone();
        } catch (CloneNotSupportedException e) {
            throw new AssertionError();
        }
    }
}
 No newline at end of file
Loading