- 重构了 ChessBoard 和 ChessPiece 类的逻辑 - 添加了新版本的 ChineseChess 库 - 删除了旧版本的 VirtualBoard 和 VirtualPiece 类 - 更新了相关的场景和脚本
100 lines
4.8 KiB
C#
100 lines
4.8 KiB
C#
using System;
|
|
using System.Collections;
|
|
using static ChineseChess.ChessCore;
|
|
using Vector2I = Vector.Vector2I;
|
|
|
|
namespace ChineseChess;
|
|
public class CCBoard : AbstractBoard
|
|
{
|
|
public event EventHandler<int> OnStepsChanged;
|
|
private int steps = 0;
|
|
public int Steps {
|
|
get => steps;
|
|
protected set {
|
|
if (steps != value) {
|
|
steps = value;
|
|
OnStepsChanged?.Invoke(this, steps);
|
|
}
|
|
}
|
|
}
|
|
public CCBoard() : base(9, 10) {
|
|
}
|
|
|
|
public override void AddRecord(IPiece From, IPiece To, Vector2I FromPos, Vector2I ToPos) {
|
|
base.AddRecord(From, To, FromPos, ToPos);
|
|
Steps += 1;
|
|
}
|
|
|
|
public override void UndoRecord() {
|
|
base.UndoRecord();
|
|
if (Steps > 0) Steps -= 1;
|
|
}
|
|
|
|
public (ArrayList, ArrayList) InitGame() {
|
|
Steps = 0;
|
|
// ArrayList blackPart = InitOnePartPieces(TurnsSideType.Black, new[] {
|
|
// new CCChariot(TurnsSideType.Black, "black chariot 0", 0, 0),
|
|
// ("车", 0, 0), ("马", 1, 0), ("象", 2, 0),
|
|
// ("士", 3, 0), ("将", 4, 0), ("士", 5, 0),
|
|
// ("象", 6, 0), ("马", 7, 0), ("车", 8, 0),
|
|
// ("炮", 1, 2), ("炮", 7, 2),
|
|
// ("卒", 0, 3), ("卒", 2, 3), ("卒", 4, 3), ("卒", 6, 3), ("卒", 8, 3)
|
|
// });
|
|
|
|
// ArrayList redPart = InitOnePartPieces(TurnsSideType.Red, new[] {
|
|
// ("车", 0, -0), ("马", 1, -0), ("象", 2, -0),
|
|
// ("士", 3, -0), ("将", 4, -0), ("士", 5, -0),
|
|
// ("象", 6, -0), ("马", 7, -0), ("车", 8, -0),
|
|
// ("炮", 1, -2), ("炮", 7, -2),
|
|
// ("卒", 0, -3), ("卒", 2, -3), ("卒", 4, -3), ("卒", 6, -3), ("卒", 8, -3)
|
|
// });
|
|
ArrayList blackPart = InitOnePartPieces(TurnsSideType.Black, new CCPiece[] {
|
|
new CCChariot (this, TurnsSideType.Black, new Vector2I( 4, 0)), // 4,0
|
|
new CCHorse (this, TurnsSideType.Black, new Vector2I( 3, 0)), // 3,0
|
|
new CCElephant(this, TurnsSideType.Black, new Vector2I( 2, 0)), // 2,0
|
|
new CCAdvisor (this, TurnsSideType.Black, new Vector2I( 1, 0)), // 1,0
|
|
new CCGeneral (this, TurnsSideType.Black, new Vector2I( 0, 0)), // 0,0
|
|
new CCAdvisor (this, TurnsSideType.Black, new Vector2I(-1, 0)), // -1,0
|
|
new CCElephant(this, TurnsSideType.Black, new Vector2I(-2, 0)), // -2,0
|
|
new CCHorse (this, TurnsSideType.Black, new Vector2I(-3, 0)), // -3,0
|
|
new CCChariot (this, TurnsSideType.Black, new Vector2I(-4, 0)), // -4,0
|
|
new CCCannon (this, TurnsSideType.Black, new Vector2I( 3, 2)), // 3,2
|
|
new CCCannon (this, TurnsSideType.Black, new Vector2I(-3, 2)), // -3,2
|
|
new CCPawn (this, TurnsSideType.Black, new Vector2I(-4, 3)), // -4,3
|
|
new CCPawn (this, TurnsSideType.Black, new Vector2I(-2, 3)), // -2,3
|
|
new CCPawn (this, TurnsSideType.Black, new Vector2I( 0, 3)), // 0,3
|
|
new CCPawn (this, TurnsSideType.Black, new Vector2I( 2, 3)), // -4,3
|
|
new CCPawn (this, TurnsSideType.Black, new Vector2I( 4, 3)) // 4,3
|
|
});
|
|
|
|
ArrayList redPart = InitOnePartPieces(TurnsSideType.Red, new CCPiece[] {
|
|
new CCChariot (this, TurnsSideType.Red, new Vector2I( 4, 0)), // 4,0
|
|
new CCHorse (this, TurnsSideType.Red, new Vector2I( 3, 0)), // 3,0
|
|
new CCElephant(this, TurnsSideType.Red, new Vector2I( 2, 0)), // 2,0
|
|
new CCAdvisor (this, TurnsSideType.Red, new Vector2I( 1, 0)), // 1,0
|
|
new CCGeneral (this, TurnsSideType.Red, new Vector2I( 0, 0)), // 0,0
|
|
new CCAdvisor (this, TurnsSideType.Red, new Vector2I(-1, 0)), // -1,0
|
|
new CCElephant(this, TurnsSideType.Red, new Vector2I(-2, 0)), // -2,0
|
|
new CCHorse (this, TurnsSideType.Red, new Vector2I(-3, 0)), // -3,0
|
|
new CCChariot (this, TurnsSideType.Red, new Vector2I(-4, 0)), // -4,0
|
|
new CCCannon (this, TurnsSideType.Red, new Vector2I( 3, 2)), // 3,2
|
|
new CCCannon (this, TurnsSideType.Red, new Vector2I(-3, 2)), // -3,2
|
|
new CCPawn (this, TurnsSideType.Red, new Vector2I(-4, 3)), // -4,3
|
|
new CCPawn (this, TurnsSideType.Red, new Vector2I(-2, 3)), // -2,3
|
|
new CCPawn (this, TurnsSideType.Red, new Vector2I( 0, 3)), // 0,3
|
|
new CCPawn (this, TurnsSideType.Red, new Vector2I( 2, 3)), // 2,3
|
|
new CCPawn (this, TurnsSideType.Red, new Vector2I( 4, 3)) // 4,3
|
|
});
|
|
|
|
return (blackPart, redPart);
|
|
}
|
|
|
|
private ArrayList InitOnePartPieces(TurnsSideType side, CCPiece[] pieces) {
|
|
ArrayList list = new();
|
|
foreach (var piece in pieces) {
|
|
list.Add(piece);
|
|
InsertPiece(piece, piece.Pos);
|
|
}
|
|
return list;
|
|
}
|
|
} |