U9qV=-Tk93xG69a
z-JlFpyq`h2YYv&%EV2>LMiGMQhY#XbPj|BzHg$3`)$W@??f|L|W9kt6Y{KCm#mhrY%``DxIrQBA
z{S|!Xit+1Y)WC~uC3dk6N7-*W&P5zuym*dc3^!l`H?t#e<$-aLc1wLgM;4&z;i
zacBk~Dz;*stoS?`Cu!;wUENpGlFJL_upGa_uc@X&+!kGRL*x?BxpWTq#$*yE{G*Lb
zNRaPY+`kYmu9uP>@LF1syi|6U0H~$1vjlkk2EU~yfj?JKg9uT5JFzu(6o-cDpE
z@reo)6XpQQE%e~l66@;=I_mK|{GM|EKuHePiIqQc兵,不可
- && (
- dstType.compareTo(srcType) >= 0 //高级
- || ( //兵->炮/将
- srcType == ChessType.SOLDIER
- && (dstType == ChessType.CANNON || dstType == ChessType.GENERAL)
- )
- );
+ && !(srcType == ChessType.GENERAL && dstType == ChessType.SOLDIER) //将->兵,不可
+ && (dstType.compareTo(srcType) >= 0 //高级
+ || (srcType == ChessType.SOLDIER && dstType == ChessType.GENERAL) //兵->将
+ || (srcType != ChessType.SOLDIER && dstType == ChessType.CANNON) //非兵->炮
+ );
} else {
return (srcType == ChessType.CANNON);
}
}
-
+
}
diff --git a/src/model/chess/Chess.java b/src/model/game/Chess.java
similarity index 78%
rename from src/model/chess/Chess.java
rename to src/model/game/Chess.java
index dd35667..3a376b0 100644
--- a/src/model/chess/Chess.java
+++ b/src/model/game/Chess.java
@@ -1,10 +1,4 @@
-package model.chess;
-
-import controller.CheckRule;
-import model.ChessColor;
-import model.ChessType;
-import model.Chessboard;
-import model.GridPoint;
+package model.game;
import java.io.Serializable;
@@ -17,7 +11,7 @@ public class Chess extends Square implements Serializable, Cloneable {
protected boolean alive; //是不是没死
private boolean selected; //是否被选中
private boolean isReversal = false; //是否被翻开
-
+
/**
* gridPoint: 表示8*4棋盘中,当前棋子在棋格对应的位置,如(0, 0), (1, 0)等等
* chessColor: 表示这个棋子的颜色,有红色,黑色,无色三种
@@ -32,39 +26,42 @@ public class Chess extends Square implements Serializable, Cloneable {
this.alive = true;
this.selected = false;
}
-
+
public ChessColor getChessColor() {
return chessColor;
}
-
+
public ChessType getChessType() {
return chessType;
}
-
+
public boolean isAlive() {
return alive;
}
- public void kill(){
+
+ public void kill() {
this.alive = false;
}
-
+
public boolean isSelected() {
return selected;
}
+
public void setSelected(boolean selected) {
this.selected = selected;
}
-
+
public boolean isReversal() {
return isReversal;
}
+
public void setReversal(boolean reversal) {
isReversal = reversal;
}
-
+
/**
* @param handleChess 当前选择的棋子
- * @param dst 目标位置,如(0, 0), (0, 1)等等
+ * @param dst 目标位置,如(0, 0), (0, 1)等等
* @return this棋子对象的移动规则和当前位置(chessboardPoint)能否到达目标位置
*
* 这个方法主要是检查移动的合法性,如果合法就返回true,反之是false。
@@ -73,17 +70,15 @@ public class Chess extends Square implements Serializable, Cloneable {
Square dstSquare = Chessboard.getInstance().getSquareAtPoint(dst);
//此处判断 handleChess 是否翻转
return handleChess.isReversal &&
- CheckRule.checkPath(handleChess,dstSquare) &&
- (!(dstSquare instanceof Chess dstChess) ||
- CheckRule.checkRank(handleChess,dstChess));
+ CheckRule.checkPath(handleChess, dstSquare) &&
+ (!(dstSquare instanceof Chess dstChess) ||
+ CheckRule.checkRank(handleChess, dstChess));
}
-
+
+
@Override
public Chess clone() {
- try {
- return (Chess) super.clone();
- } catch (CloneNotSupportedException e) {
- throw new AssertionError();
- }
+ Chess clone = (Chess) super.clone();
+ return clone;
}
}
diff --git a/src/model/ChessColor.java b/src/model/game/ChessColor.java
similarity index 92%
rename from src/model/ChessColor.java
rename to src/model/game/ChessColor.java
index 50f77e0..7ca9384 100644
--- a/src/model/ChessColor.java
+++ b/src/model/game/ChessColor.java
@@ -1,25 +1,25 @@
-package model;
-
-import java.awt.*;
-
-/**
- * 颜色,但是是特指阵营颜色
- */
-public enum ChessColor {
- BLACK("Black", Color.BLACK), RED("Red", Color.RED), NONE("No Player", Color.WHITE);
-
- private final String name;
- private final Color color;
-
- ChessColor(String name, Color color) {
- this.name = name;
- this.color = color;
- }
-
- public String getName() {
- return name;
- }
- public Color getColor() {
- return color;
- }
-}
+package model.game;
+
+import java.awt.*;
+
+/**
+ * 颜色,但是是特指阵营颜色
+ */
+public enum ChessColor {
+ BLACK("Black", Color.BLACK), RED("Red", Color.RED), NONE("No Player", Color.WHITE);
+
+ private final String name;
+ private final Color color;
+
+ ChessColor(String name, Color color) {
+ this.name = name;
+ this.color = color;
+ }
+
+ public String getName() {
+ return name;
+ }
+ public Color getColor() {
+ return color;
+ }
+}
diff --git a/src/model/ChessType.java b/src/model/game/ChessType.java
similarity index 88%
rename from src/model/ChessType.java
rename to src/model/game/ChessType.java
index f5a7262..a5933e3 100644
--- a/src/model/ChessType.java
+++ b/src/model/game/ChessType.java
@@ -1,4 +1,4 @@
-package model;
+package model.game;
public enum ChessType {
CANNON,GENERAL, ADVISOR, MINISTER, CHARIOT, HORSE, SOLDIER
diff --git a/src/model/Chessboard.java b/src/model/game/Chessboard.java
similarity index 98%
rename from src/model/Chessboard.java
rename to src/model/game/Chessboard.java
index 55366f5..731571b 100644
--- a/src/model/Chessboard.java
+++ b/src/model/game/Chessboard.java
@@ -1,8 +1,5 @@
-package model;
+package model.game;
-import model.chess.Chess;
-import model.chess.EmptySlot;
-import model.chess.Square;
import io.vavr.Tuple2;
import view.ChessboardCom;
diff --git a/src/model/chess/EmptySlot.java b/src/model/game/EmptySlot.java
similarity index 79%
rename from src/model/chess/EmptySlot.java
rename to src/model/game/EmptySlot.java
index c33d017..0d4ccb5 100644
--- a/src/model/chess/EmptySlot.java
+++ b/src/model/game/EmptySlot.java
@@ -1,6 +1,4 @@
-package model.chess;
-
-import model.GridPoint;
+package model.game;
/**
* 这个类表示棋盘上的空棋子的格子
diff --git a/src/model/game/Game.java b/src/model/game/Game.java
new file mode 100644
index 0000000..8f081c9
--- /dev/null
+++ b/src/model/game/Game.java
@@ -0,0 +1,21 @@
+package model.game;
+
+import model.Step;
+
+import java.util.ArrayList;
+
+public class Game {
+
+ private ArrayList steps = new ArrayList<>();
+
+ private Chessboard initialChessboard;
+
+ public Game() {
+ this.initialChessboard = Chessboard.getInstance().clone();
+ }
+
+ public void Step(Chess chess1, Square square2){
+ steps.add(new Step(chess1.getGridPoint(), chess1.clone(), square2.getGridPoint(), square2.clone()));
+ }
+
+}
\ No newline at end of file
diff --git a/src/model/GridPoint.java b/src/model/game/GridPoint.java
similarity index 97%
rename from src/model/GridPoint.java
rename to src/model/game/GridPoint.java
index 725d3f4..bae5986 100644
--- a/src/model/GridPoint.java
+++ b/src/model/game/GridPoint.java
@@ -1,4 +1,4 @@
-package model;
+package model.game;
/**
* 这个类表示网格中的整数坐标,可以表示棋盘的位置,也可以表示亡子堆的位置
diff --git a/src/model/game/Msg.java b/src/model/game/Msg.java
new file mode 100644
index 0000000..fc13f85
--- /dev/null
+++ b/src/model/game/Msg.java
@@ -0,0 +1,7 @@
+package model.game;
+
+public class Msg {
+
+}
+
+联机 AI 评论 弹幕
\ No newline at end of file
diff --git a/src/model/SideStack.java b/src/model/game/SideStack.java
similarity index 98%
rename from src/model/SideStack.java
rename to src/model/game/SideStack.java
index 872cead..fa1e7fc 100644
--- a/src/model/SideStack.java
+++ b/src/model/game/SideStack.java
@@ -1,6 +1,5 @@
-package model;
+package model.game;
-import model.chess.Chess;
import view.ChessboardCom;
import java.io.Serializable;
diff --git a/src/model/chess/Square.java b/src/model/game/Square.java
similarity index 65%
rename from src/model/chess/Square.java
rename to src/model/game/Square.java
index 8807eb4..291d332 100644
--- a/src/model/chess/Square.java
+++ b/src/model/game/Square.java
@@ -1,6 +1,4 @@
-package model.chess;
-
-import model.GridPoint;
+package model.game;
import java.io.Serializable;
@@ -10,7 +8,7 @@ import java.io.Serializable;
* 1. EmptySlot: 空方格
* 2. Chess: 带棋子的方格
*/
-public class Square implements Serializable {
+public class Square implements Serializable, Cloneable {
private GridPoint gridPoint;
protected Square(GridPoint gridPoint) {
@@ -25,4 +23,12 @@ public class Square implements Serializable {
this.gridPoint = gridPoint;
}
+ @Override
+ public Square clone() {
+ try {
+ return (Square) super.clone();
+ } catch (CloneNotSupportedException e) {
+ throw new AssertionError();
+ }
+ }
}
diff --git a/src/network/Client.java b/src/network/Client.java
new file mode 100644
index 0000000..6191a1a
--- /dev/null
+++ b/src/network/Client.java
@@ -0,0 +1,4 @@
+package network;
+
+public class Client {
+}
diff --git a/src/network/Responser.java b/src/network/Responser.java
new file mode 100644
index 0000000..75543d4
--- /dev/null
+++ b/src/network/Responser.java
@@ -0,0 +1,4 @@
+package network;
+
+public class Responser {
+}
diff --git a/src/network/Searcher.java b/src/network/Searcher.java
new file mode 100644
index 0000000..1ff1b3a
--- /dev/null
+++ b/src/network/Searcher.java
@@ -0,0 +1,2 @@
+package network;public class Searcher {
+}
diff --git a/src/network/Server.java b/src/network/Server.java
new file mode 100644
index 0000000..140688f
--- /dev/null
+++ b/src/network/Server.java
@@ -0,0 +1,4 @@
+package network;
+
+public class Server {
+}
diff --git a/src/view/ChessGameFrame.java b/src/view/ChessGameFrame.java
index fd9159d..5b74f0c 100644
--- a/src/view/ChessGameFrame.java
+++ b/src/view/ChessGameFrame.java
@@ -1,7 +1,7 @@
package view;
-import controller.GameController;
-import model.Chessboard;
+import controller.AppController;
+import model.game.Chessboard;
import javax.swing.*;
import java.awt.*;
@@ -16,7 +16,7 @@ public class ChessGameFrame extends JFrame {
private final int WIDTH;
private final int HEIGHT;
public final int CHESSBOARD_SIZE;
- private GameController gameController;
+ private AppController appController;
private static JLabel statusLabel;
public ChessGameFrame(int width, int height) {
@@ -36,6 +36,8 @@ public class ChessGameFrame extends JFrame {
addLabel();
addHelloButton();
addLoadButton();
+ appController = new AppController(Chessboard.getInstance());
+ appController.loadGameFromFile("res/save.txt");
}
@@ -44,7 +46,7 @@ public class ChessGameFrame extends JFrame {
*/
private void addChessboard() {
ChessboardCom.setInstance(new ChessboardCom(CHESSBOARD_SIZE / 2 + 6, CHESSBOARD_SIZE / 3, CHESSBOARD_SIZE + 6));
- gameController = new GameController(Chessboard.getInstance());
+ appController = new AppController(Chessboard.getInstance());
ChessboardCom.getInstance().setLocation(HEIGHT / 10, HEIGHT / 10);
add(ChessboardCom.getInstance());
}
@@ -88,7 +90,7 @@ public class ChessGameFrame extends JFrame {
button.addActionListener(e -> {
System.out.println("Click load");
String path = JOptionPane.showInputDialog(this, "Input Path here");
- gameController.loadGameFromFile(path);
+ appController.loadGameFromFile(path);
});
}
diff --git a/src/view/ChessboardCom.java b/src/view/ChessboardCom.java
index 8c16435..1796751 100644
--- a/src/view/ChessboardCom.java
+++ b/src/view/ChessboardCom.java
@@ -1,10 +1,10 @@
package view;
-import model.ChessColor;
-import model.Chessboard;
-import model.GridPoint;
-import model.SideStack;
+import model.game.ChessColor;
+import model.game.Chessboard;
+import model.game.GridPoint;
+import model.game.SideStack;
import javax.swing.*;
import java.awt.*;
diff --git a/src/view/SideStackCom.java b/src/view/SideStackCom.java
index 9c19209..cd54e5b 100644
--- a/src/view/SideStackCom.java
+++ b/src/view/SideStackCom.java
@@ -1,8 +1,8 @@
package view;
-import model.GridPoint;
-import model.SideStack;
-import model.ChessColor;
+import model.game.GridPoint;
+import model.game.SideStack;
+import model.game.ChessColor;
import javax.swing.*;
import java.awt.*;
diff --git a/src/view/SquareCom.java b/src/view/SquareCom.java
index 8d2ee9e..5c3dcd5 100644
--- a/src/view/SquareCom.java
+++ b/src/view/SquareCom.java
@@ -1,12 +1,12 @@
package view;
-import controller.ClickController;
-import model.ChessColor;
-import model.ChessType;
-import model.Chessboard;
-import model.GridPoint;
-import model.chess.Chess;
-import model.chess.Square;
+import controller.ChessClickController;
+import model.game.ChessColor;
+import model.game.ChessType;
+import model.game.Chessboard;
+import model.game.GridPoint;
+import model.game.Chess;
+import model.game.Square;
import javax.swing.*;
import java.awt.*;
@@ -129,7 +129,7 @@ public class SquareCom extends JComponent {
super.processMouseEvent(e);
if (e.getID() == MouseEvent.MOUSE_PRESSED) {
System.out.printf("Click [%d,%d]\n", gridPoint.getX(), gridPoint.getY());
- ClickController.INSTANCE.onClick(this);
+ ChessClickController.INSTANCE.onClick(this);
}
}
--
GitLab
From 61cdd812849d0c47eca98efaac98c850d4fb60a4 Mon Sep 17 00:00:00 2001
From: ljr <12210105@mail.sustech.edu.cn>
Date: Tue, 13 Dec 2022 16:23:04 +0800
Subject: [PATCH 2/4] (undone-2)feat(model interfaces)
---
src/controller/ChessClickController.java | 7 ++--
src/model/History.java | 20 ++++++++++++
src/model/Step.java | 25 +++++++++++++--
src/model/game/Chessboard.java | 28 ++++++++++------
src/model/game/Game.java | 41 ++++++++++++++++++++----
src/model/game/Msg.java | 4 +--
6 files changed, 99 insertions(+), 26 deletions(-)
diff --git a/src/controller/ChessClickController.java b/src/controller/ChessClickController.java
index 1be1cec..db48a86 100644
--- a/src/controller/ChessClickController.java
+++ b/src/controller/ChessClickController.java
@@ -1,10 +1,7 @@
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() {
diff --git a/src/model/History.java b/src/model/History.java
index 3f9c8e1..c31fc9d 100644
--- a/src/model/History.java
+++ b/src/model/History.java
@@ -1,4 +1,24 @@
package model;
+import model.game.Chessboard;
+import model.game.Game;
+
+import java.util.ArrayList;
+
public class History {
+
+ public static History instance;
+
+ public ArrayList getSteps() {
+ return steps;
+ }
+
+ private ArrayList steps = new ArrayList<>();
+
+ private Game initialState;
+
+ public History(Game initialState) {
+ this.initialState = initialState.clone();
+ }
+
}
diff --git a/src/model/Step.java b/src/model/Step.java
index 44ed63b..d772bf5 100644
--- a/src/model/Step.java
+++ b/src/model/Step.java
@@ -1,8 +1,29 @@
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
diff --git a/src/model/game/Chessboard.java b/src/model/game/Chessboard.java
index 731571b..be9c4c9 100644
--- a/src/model/game/Chessboard.java
+++ b/src/model/game/Chessboard.java
@@ -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放置在棋盘的数组上
*/
diff --git a/src/model/game/Game.java b/src/model/game/Game.java
index 8f081c9..935db39 100644
--- a/src/model/game/Game.java
+++ b/src/model/game/Game.java
@@ -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 steps = new ArrayList<>();
+ public static Game instance;
- private Chessboard initialChessboard;
+ private Chessboard chessboard;
- public Game() {
- this.initialChessboard = Chessboard.getInstance().clone();
+ private List msgList = new ArrayList<>();
+
+ private int[] scoreboard = {0, 0};
+
+ private ChessColor currentColor = ChessColor.RED; //执棋颜色
+
+ public Chessboard getChessboard() {
+ return chessboard;
+ }
+
+ public List getMsgList() {
+ return msgList;
}
- public void Step(Chess chess1, Square square2){
- steps.add(new Step(chess1.getGridPoint(), chess1.clone(), square2.getGridPoint(), square2.clone()));
+ 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
diff --git a/src/model/game/Msg.java b/src/model/game/Msg.java
index fc13f85..a8eca4e 100644
--- a/src/model/game/Msg.java
+++ b/src/model/game/Msg.java
@@ -2,6 +2,4 @@ package model.game;
public class Msg {
-}
-
-联机 AI 评论 弹幕
\ No newline at end of file
+}
\ No newline at end of file
--
GitLab
From 20601f325e348960a7cc3ede63d30d370069ec64 Mon Sep 17 00:00:00 2001
From: ljr <12210105@mail.sustech.edu.cn>
Date: Tue, 13 Dec 2022 18:09:57 +0800
Subject: [PATCH 3/4] (undone-3)feat(model interfaces)
---
.idea/misc.xml | 2 +-
src/controller/BulletAnim.java | 23 +++++++++++++++++++----
src/model/game/Chessboard.java | 24 +++++++++++++-----------
src/model/game/Game.java | 2 +-
src/view/ChessboardCom.java | 2 +-
src/view/SideStackCom.java | 2 +-
src/view/SquareCom.java | 16 ++++++++--------
7 files changed, 44 insertions(+), 27 deletions(-)
diff --git a/.idea/misc.xml b/.idea/misc.xml
index fb4f671..d251f7d 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -34,7 +34,7 @@
-
+
\ No newline at end of file
diff --git a/src/controller/BulletAnim.java b/src/controller/BulletAnim.java
index 530b013..a2dfd06 100644
--- a/src/controller/BulletAnim.java
+++ b/src/controller/BulletAnim.java
@@ -1,10 +1,25 @@
package controller;
+import model.game.Game;
import model.game.Msg;
-public class BulletAnim {
-
- public void draw(Msg msg){
-
+public class BulletAnim extends Thread{
+ @Override
+ public void run() {
+ super.run();
+ while (true){
+ for (Msg msg: Game.instance.getMsgList()){
+ drawBullet(msg);
+ }
+ try {
+ sleep(50);
+ } catch (InterruptedException ignored) {
+ break;
+ }
+ }
+ }
+
+ public void drawBullet(Msg msg){
+ //TODO: drawBullet
}
}
diff --git a/src/model/game/Chessboard.java b/src/model/game/Chessboard.java
index be9c4c9..6c3f212 100644
--- a/src/model/game/Chessboard.java
+++ b/src/model/game/Chessboard.java
@@ -10,6 +10,8 @@ import java.util.*;
* 这个类表示棋盘组建,其包含:
* Square[][]: 4*8个方块格子组件
*/
+
+//TODO: Refactor into id mode
public class Chessboard implements Serializable, Cloneable {
/**
* 不彻底的单例
@@ -21,7 +23,7 @@ public class Chessboard implements Serializable, Cloneable {
public static final int ID_DIVISION = ROW_SIZE * COL_SIZE;
- private Square[][] squares = new Square[ROW_SIZE][COL_SIZE]; //方格子列表
+ private Square[][] idGrid = new Square[ROW_SIZE][COL_SIZE]; //方格子列表
//两个亡子堆->亡子堆组
private SideStack[] sideStacks = new SideStack[]{
@@ -52,9 +54,9 @@ public class Chessboard implements Serializable, Cloneable {
Collections.shuffle(paramsList);
//每个棋子初始化的时候,从末尾拿元组作为参数,并移除那个元组,如同出栈
- for (int i = 0; i < squares.length; i++) {
- squares[i] = new Square[COL_SIZE];
- for (int j = 0; j < squares[i].length; j++) {
+ for (int i = 0; i < idGrid.length; i++) {
+ idGrid[i] = new Square[COL_SIZE];
+ for (int j = 0; j < idGrid[i].length; j++) {
Chess chess;
Tuple2 params = paramsList.get(paramsList.size() - 1);
chess = new Chess(new GridPoint(i, j), params._1, params._2);
@@ -71,8 +73,8 @@ public class Chessboard implements Serializable, Cloneable {
instance = instance1;
}
- public Square[][] getSquares() {
- return squares;
+ public Square[][] getIdGrid() {
+ return idGrid;
}
/**
@@ -80,7 +82,7 @@ public class Chessboard implements Serializable, Cloneable {
* @param gridPoint 棋盘坐标
*/
public Square getSquareAtPoint(GridPoint gridPoint) {
- return squares[gridPoint.getY()][gridPoint.getX()];
+ return idGrid[gridPoint.getY()][gridPoint.getX()];
}
/**
@@ -124,7 +126,7 @@ public class Chessboard implements Serializable, Cloneable {
*/
public void putChessOnBoard(Square square) {
int row = square.getGridPoint().getY(), col = square.getGridPoint().getX();
- squares[row][col] = square;
+ idGrid[row][col] = square;
}
/**
@@ -146,9 +148,9 @@ public class Chessboard implements Serializable, Cloneable {
//Set squares' references
int row1 = chess1.getGridPoint().getY(), col1 = chess1.getGridPoint().getX();
- squares[row1][col1] = chess1;
+ idGrid[row1][col1] = chess1;
int row2 = square2.getGridPoint().getY(), col2 = square2.getGridPoint().getX();
- squares[row2][col2] = square2;
+ idGrid[row2][col2] = square2;
//重绘
ChessboardCom.getInstance().getSquareComAtPoint(chess1.getGridPoint()).repaint();
@@ -167,7 +169,7 @@ public class Chessboard implements Serializable, Cloneable {
public Chessboard clone() {
try {
Chessboard clone = (Chessboard) super.clone();
- clone.squares = this.squares.clone();
+ clone.idGrid = this.idGrid.clone();
clone.sideStacks = this.sideStacks.clone();
return clone;
} catch (CloneNotSupportedException e) {
diff --git a/src/model/game/Game.java b/src/model/game/Game.java
index 935db39..be76dfc 100644
--- a/src/model/game/Game.java
+++ b/src/model/game/Game.java
@@ -34,7 +34,7 @@ public class Game implements Cloneable{
}
public boolean resolveStep(Step step){
- //TODO resolveStep
+ //TODO resolveStep of every level
}
@Override
diff --git a/src/view/ChessboardCom.java b/src/view/ChessboardCom.java
index 1796751..fbb87ad 100644
--- a/src/view/ChessboardCom.java
+++ b/src/view/ChessboardCom.java
@@ -45,7 +45,7 @@ public class ChessboardCom extends JComponent {
for (int j = 0; j < Chessboard.COL_SIZE; j++) {
GridPoint gridPoint = new GridPoint(i, j);
putChessOnBoard(new SquareCom(
- gridPoint, evalPoint(gridPoint), SQUARE_SIZE, spacingLength, true
+ gridPoint, evalPoint(gridPoint), SQUARE_SIZE, spacingLength, ChessColor.NONE
));
}
}
diff --git a/src/view/SideStackCom.java b/src/view/SideStackCom.java
index cd54e5b..3b21c8e 100644
--- a/src/view/SideStackCom.java
+++ b/src/view/SideStackCom.java
@@ -30,7 +30,7 @@ public class SideStackCom extends JComponent {
this.getHeight() * i / SideStack.ROW_SIZE
);
SquareCom squareCom = new SquareCom(
- new GridPoint(i, j), location, size,size / 12,false);
+ new GridPoint(i, j), location, size,size / 12, this.chessColor);
squareCom.setSideStackColor(this.chessColor);
add(squareComs[i][j] = squareCom);
squareCom.repaint();
diff --git a/src/view/SquareCom.java b/src/view/SquareCom.java
index 5c3dcd5..8bc92e2 100644
--- a/src/view/SquareCom.java
+++ b/src/view/SquareCom.java
@@ -28,15 +28,15 @@ public class SquareCom extends JComponent {
protected static Font DEAD_CHESS_FONT;
- private boolean alive; //这个alive决定了该元素是反映chessboard的square,还是SideStack的square
+ private ChessColor hostGrid; //这个alive决定了该元素是反映chessboard的square,还是SideStack的square
private ChessColor sideStackColor; //如果反映SideStack, 指示反映哪个SideStack
private GridPoint gridPoint;
- public SquareCom(GridPoint gridPoint, Point location, int size, int spacingLength, boolean alive) {
+ public SquareCom(GridPoint gridPoint, Point location, int size, int spacingLength, ChessColor hostGrid) {
this.gridPoint = gridPoint;
- this.alive = alive;
+ this.hostGrid = hostGrid;
this.spacingLength = spacingLength;
setLayout(null);
@@ -69,15 +69,15 @@ public class SquareCom extends JComponent {
this.sideStackColor = sideStackColor;
}
- public boolean isAlive() {
- return alive;
+ public ChessColor getHostGrid() {
+ return hostGrid;
}
/**
* 根据自身存储的棋盘坐标和存活状态,来获取所反映的Square
*/
public Square getBackSquare() {
- return this.isAlive() ?
+ return this.getHostGrid() == ChessColor.NONE ?
Chessboard.getInstance().getSquareAtPoint(this.gridPoint) :
Chessboard.getInstance().getSideStack(this.sideStackColor).getChessAtPoint(this.gridPoint);
}
@@ -138,7 +138,7 @@ public class SquareCom extends JComponent {
super.paintComponents(g);
System.out.printf("repaint chess [%d,%d]\n", gridPoint.getX(), gridPoint.getY());
//填方格颜色
- if(this.alive) {
+ if(this.hostGrid == ChessColor.NONE) {
g.setColor(squareColor);
g.fillRect(1, 1, this.getWidth() - 2, this.getHeight() - 2);
}
@@ -157,7 +157,7 @@ public class SquareCom extends JComponent {
if (chess.isReversal()) {
//绘制棋子文字
g.setColor(chess.getChessColor().getColor());
- Font font = this.alive ? ALIVE_CHESS_FONT : DEAD_CHESS_FONT;
+ Font font = this.hostGrid == ChessColor.NONE ? ALIVE_CHESS_FONT : DEAD_CHESS_FONT;
g.setFont(font);
g.drawString(this.deduceChessName(),
this.getWidth() / 2 - (int)(font.getSize() / 2 * 0.9),
--
GitLab
From b247e5acacb95b8e686e59e0be2007b9bf660187 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=88=98=E5=AE=B6=E8=8D=A3?= <12210105@mail.sustech.edu.cn>
Date: Tue, 13 Dec 2022 19:56:24 +0800
Subject: [PATCH 4/4] feat(Backend Interfaces)
---
src/controller/AppController.java | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/src/controller/AppController.java b/src/controller/AppController.java
index b7381a6..49cf9bf 100644
--- a/src/controller/AppController.java
+++ b/src/controller/AppController.java
@@ -8,17 +8,26 @@ import java.nio.file.Path;
import java.util.List;
/**
- * 这个类主要完成由窗体上组件触发的动作。
- * 例如点击button等
- * ChessGameFrame中组件调用本类的对象,在本类中的方法里完成逻辑运算,将运算的结果传递至chessboard中绘制
+ * 负责全局工作,切换界面时引导相关Model初始化,也负责读写文存档
*/
public class AppController {
- private Chessboard chessboard;
+
+ private History savedHistory;
+
+ private Game savedGame;
public AppController(Chessboard chessboard) {
this.chessboard = chessboard;
}
+ public History getSavedHistory(){
+ return savedHistory;
+ }
+
+ public History getSavedGame(){
+ return savedGame;
+ }
+
public List loadGameFromFile(String path) {
try {
List chessData = Files.readAllLines(Path.of(path));
--
GitLab