// Chessboard.cs using Godot; public partial class ChessBoard : Node2D { public VirtualBoard board = null; public Player playerSelf = null; public delegate bool ChessMoveFunc(Vector2 toPos, Vector2 fromPos); public Callable chessMoveFunc { get; set; } public override void _Ready() { board = new VirtualBoard(9, 10); playerSelf = new Player(board); board.OnRemove += OnRemove; board.OnInsert += OnInsert; board.OnMove += OnMove; InitChessBoard(); } public override void _Input(InputEvent @event) { if (@event is InputEventMouseButton mouseEvent && mouseEvent.Pressed && mouseEvent.ButtonIndex == MouseButton.Left) { // HandleMouseClick(GetGlobalTransformWithCanvas().AffineInverse() * mouseButton.Position); HandleMouseClick(GetLocalMousePosition()); } } private void HandleMouseClick(Vector2 clickPosition) { Vector2 clickBoardPos = (PosTrans.transArrToPix.AffineInverse() * clickPosition).Round(); playerSelf.HandleBoardPosClick(clickBoardPos); } void OnMove(Vector2 from, Vector2 to) { chessMoveFunc.Call(to, from); } void OnRemove(VirtualPiece piece) { // (piece.data as Node).QueueFree(); if (piece?.data != null) RemoveChild(piece.data as Node); } void OnInsert(VirtualPiece piece) { ChessPiece chess = piece.data as ChessPiece; AddChild(chess); } public void InsertNode(ChessPiece node, Vector2 arrayPos) { AddChild(node); VirtualPiece piece = node.GetVirtualPiece(); // piece.Move(vector); board.SetPiecePos(piece, arrayPos); } // using Godot; // public enum ChessType // { // Carriage, // Horse, // Elephant, // Advisor, // General, // Cannon, // Pawn // } // public class VirtualBoard // { // // ...其他原有成员变量... // public VirtualBoard(Node root = null) // { // BoardRoot = root ?? GetTree().CurrentScene; // 如果未提供root,默认为当前场景 // } // public void InitChessBoard() // { // // 定义黑色和红色棋子的初始位置和类型 // var positions = new (Vector2 position, ChessType type)[] // { // // 黑方棋子初始化... // // 示例省略具体位置和类型,你需要根据实际情况填写 // // (new Vector2(x, y), ChessType.Pawn), // // 红方棋子初始化... // // 同上 // }; // // 初始化棋子 // foreach (var (position, type) in positions) // { // var color = position.Y == 0 ? new Color("black") : new Color("red"); // 根据行判断颜色 // var piece = CreateChessPiece(type, color); // InsertChess(piece, position); // } // } // private ChessPiece CreateChessPiece(ChessType type, Color labelColor) // { // // 根据ChessType创建对应的棋子实例并设置Label和颜色 // // 这里需要你实现具体的逻辑,例如switch case或映射表来决定创建哪种棋子 // // 返回创建的棋子实例 // } // // ...其他原有方法... // } public void InitChessBoard() { InsertNode(new ChessPiece { PieceLabel = "车", LabelColor = new Color("black"), }, new Vector2(0, 0)); InsertNode(new ChessPiece { PieceLabel = "马", LabelColor = new Color("black"), }, new Vector2(1, 0)); InsertNode(new ChessPiece { PieceLabel = "象", LabelColor = new Color("black"), }, new Vector2(2, 0)); InsertNode(new ChessPiece { PieceLabel = "士", LabelColor = new Color("black"), }, new Vector2(3, 0)); InsertNode(new ChessPiece { PieceLabel = "将", LabelColor = new Color("black"), }, new Vector2(4, 0)); InsertNode(new ChessPiece { PieceLabel = "士", LabelColor = new Color("black"), }, new Vector2(5, 0)); InsertNode(new ChessPiece { PieceLabel = "象", LabelColor = new Color("black"), }, new Vector2(6, 0)); InsertNode(new ChessPiece { PieceLabel = "马", LabelColor = new Color("black"), }, new Vector2(7, 0)); InsertNode(new ChessPiece { PieceLabel = "车", LabelColor = new Color("black"), }, new Vector2(8, 0)); InsertNode(new ChessPiece { PieceLabel = "炮", LabelColor = new Color("black"), }, new Vector2(1, 2)); InsertNode(new ChessPiece { PieceLabel = "炮", LabelColor = new Color("black"), }, new Vector2(7, 2)); InsertNode(new ChessPiece { PieceLabel = "卒", LabelColor = new Color("black"), }, new Vector2(0, 3)); InsertNode(new ChessPiece { PieceLabel = "卒", LabelColor = new Color("black"), }, new Vector2(2, 3)); InsertNode(new ChessPiece { PieceLabel = "卒", LabelColor = new Color("black"), }, new Vector2(4, 3)); InsertNode(new ChessPiece { PieceLabel = "卒", LabelColor = new Color("black"), }, new Vector2(6, 3)); InsertNode(new ChessPiece { PieceLabel = "卒", LabelColor = new Color("black"), }, new Vector2(8, 3)); // ----------------------------------- InsertNode(new ChessPiece { PieceLabel = "车", LabelColor = new Color("red"), }, new Vector2(0, 9)); InsertNode(new ChessPiece { PieceLabel = "马", LabelColor = new Color("red"), }, new Vector2(1, 9)); InsertNode(new ChessPiece { PieceLabel = "象", LabelColor = new Color("red"), }, new Vector2(2, 9)); InsertNode(new ChessPiece { PieceLabel = "士", LabelColor = new Color("red"), }, new Vector2(3, 9)); InsertNode(new ChessPiece { PieceLabel = "将", LabelColor = new Color("red"), }, new Vector2(4, 9)); InsertNode(new ChessPiece { PieceLabel = "士", LabelColor = new Color("red"), }, new Vector2(5, 9)); InsertNode(new ChessPiece { PieceLabel = "象", LabelColor = new Color("red"), }, new Vector2(6, 9)); InsertNode(new ChessPiece { PieceLabel = "马", LabelColor = new Color("red"), }, new Vector2(7, 9)); InsertNode(new ChessPiece { PieceLabel = "车", LabelColor = new Color("red"), }, new Vector2(8, 9)); InsertNode(new ChessPiece { PieceLabel = "炮", LabelColor = new Color("red"), }, new Vector2(1, 7)); InsertNode(new ChessPiece { PieceLabel = "炮", LabelColor = new Color("red"), }, new Vector2(7, 7)); InsertNode(new ChessPiece { PieceLabel = "卒", LabelColor = new Color("red"), }, new Vector2(0, 6)); InsertNode(new ChessPiece { PieceLabel = "卒", LabelColor = new Color("red"), }, new Vector2(2, 6)); InsertNode(new ChessPiece { PieceLabel = "卒", LabelColor = new Color("red"), }, new Vector2(4, 6)); InsertNode(new ChessPiece { PieceLabel = "卒", LabelColor = new Color("red"), }, new Vector2(6, 6)); InsertNode(new ChessPiece { PieceLabel = "卒", LabelColor = new Color("red"), }, new Vector2(8, 6)); } }