feat: 重构棋盘逻辑和游戏流程,将引擎版本提升至4.3

- 重构了 VirtualBoard 类,优化了棋盘操作和事件处理
- 重写了 ChessPiece 类,增加了事件处理和虚拟棋子逻辑
- 更新了 ChessGame 控制器,增加了结束回合功能和对话框
- 调整了场景布局和资源引用
- 清理了冗余代码和注释
This commit is contained in:
ZZY
2024-11-02 21:18:53 +08:00
parent abace89813
commit 7e2ca3948d
17 changed files with 2984 additions and 503 deletions

View File

@ -1,23 +1,25 @@
// using System.Numerics;
using Godot;
using System.Collections.Generic;
using System;
using Godot;
using System.Linq;
public class MoveRecords {
public class MoveRecords<T> {
private readonly LinkedList<MoveRecord> records = new LinkedList<MoveRecord>(); // 使用队列替换栈
private readonly int maxRecords; // 记录上限
private Action<Node, Node, Vector2, Vector2> onAddRecordCallback; // 添加记录时的回调
private Action<Node, Node, Vector2, Vector2> onUndoRecordCallback; // 撤销记录时的回调
private Action<T, T, Vector2, Vector2> onAddRecordCallback; // 添加记录时的回调
private Action<T, T, Vector2, Vector2> onUndoRecordCallback; // 撤销记录时的回调
public MoveRecords(
Action<Node, Node, Vector2, Vector2> onAddRecordCallback = null,
Action<Node, Node, Vector2, Vector2> onUndoRecordCallback = null,
Action<T, T, Vector2, Vector2> onAddRecordCallback = null,
Action<T, T, Vector2, Vector2> onUndoRecordCallback = null,
int maxRecords = 32) {
this.maxRecords = maxRecords;
this.onAddRecordCallback = onAddRecordCallback;
this.onUndoRecordCallback = onUndoRecordCallback;
}
public void AddRecord(Node newNode, Node oldNode, Vector2 newPos, Vector2 oldPos) {
public void AddRecord(T newNode, T oldNode, Vector2 newPos, Vector2 oldPos) {
// 达到记录上限时,移除最远的记录(队首元素)
if (records.Count >= maxRecords) {
records.RemoveFirst();
@ -42,16 +44,16 @@ public class MoveRecords {
}
private class MoveRecord {
public Node NewNode { get; }
public Node OldNode { get; }
public T NewNode { get; }
public T OldNode { get; }
public Vector2 NewPos { get; }
public Vector2 OldPos { get; }
public MoveRecord(Node newNode, Node oldNode, Vector2 newPos, Vector2 oldPos) {
this.NewNode = newNode;
this.OldNode = oldNode;
this.OldPos = oldPos;
this.NewPos = newPos;
public MoveRecord(T newNode, T oldNode, Vector2 newPos, Vector2 oldPos) {
NewNode = newNode;
OldNode = oldNode;
OldPos = oldPos;
NewPos = newPos;
}
}
}