using System; using System.Collections; using static ChineseChess.ChessCore; using Vector2I = Vector.Vector2I; namespace ChineseChess; public class CCBoard : AbstractBoard { public event EventHandler 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; } }