public ChessPiece(ChessPiece piece) { _id = piece.Id; _isDied = piece._isDied; _color = piece._color; _type = piece._type; _value = piece._value; _point = piece._point; _texture2d = piece._texture2d; _position = piece._position; }
/// <summary> /// Thay đổi vị trí con cờ và ma trận điểm tại điểm đó /// </summary> /// <param name="chess">quân cờ</param> /// <param name="p">điểm đích</param> public void SetPoint(ChessPiece chess, Point p) { chess.Point = p; MatrixPosition[p.X, p.Y] = chess.Id; }
/// <summary> /// Di chuyển 1 quân cờ /// </summary> /// <param name="piece">con cờ</param> /// <param name="destination">vị trí đích</param> /// <returns>true nếu di chuyển thành công, ngược lại false</returns> /// <remarks>Đồng thời thêm vào Stack Undo</remarks> public bool MovePiece(ChessPiece piece, Point destination) { Move m = new Move(piece.Id, piece.Point, this.GetPoint(destination)); if (piece.Move(destination, this)) { StackUndo.Push(m); StackRedo.Clear(); return true; } return false; }
/// <summary> /// Thêm 1 quân cờ vào bàn cờ /// </summary> /// <param name="chess">quân cờ</param> public void AddChess(ChessPiece chess) { _chessPieces.Add(chess); MatrixPosition[chess.Point.X, chess.Point.Y] = chess.Id; }
/// <summary> /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// </summary> /// <param name="gameTime">Provides a snapshot of timing values.</param> protected override void Update(GameTime gameTime) { // Allows the game to exit if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) this.Exit(); // TODO: Add your update logic here TouchCollection touches = TouchPanel.GetState(); if (turn == -1) { if (touches.Count > 0) { if (touches[0].State == TouchLocationState.Pressed) { //lấy điểm chạm Point point = board.GetPosition(touches[0]); if (point != new Point(-1, -1)) { if (isSelected == false) { selectedChess = board[point]; if (selectedChess != null) { Debug.WriteLine(selectedChess.Value); Debug.WriteLine(selectedChess.GetNextMoves(board).Count); if ((selectedChess.Id * turn) > 0) { isSelected = true; board.SelectedBox1.Point = point; board.SelectedBox2.Point = new Point(-1, -1); } } } else { //nếu chọn tiếp phải quân mình thì đổi quân chọn if ((board.CheckPoint(point) * selectedChess.Id) > 0) { selectedChess = board[point]; board.SelectedBox1.Point = point; } //nếu không phải tức là quân địch hoặc trống cho phép di chuyển else { if (board.MovePiece(selectedChess, point) == true) { board.SelectedBox2.Point = point; isSelected = false; selectedChess = null; //if (turn == -1) // if (board.CheckmatePositiveTeam()) boardState = "Chiếu tướng đỏ"; // else boardState = ""; //else // if (board.CheckmateNegativeTeam()) boardState = "Chieu tuong đen"; // else boardState = ""; turn = turn == -1 ? 1 : -1; //đổi lượt khi di chuyển thành công Debug.WriteLine(board.Value); } } } } if (btnUndo.GetRectangle().Contains((int)touches[0].Position.X, (int)touches[0].Position.Y)) { if (board.Undo()) turn = turn == -1 ? 1 : -1; //đổi lượt } } } } else { var b = computer.GetNextBoard(board); board.Clone(b); turn = turn == -1 ? 1 : -1; //đổi lượt //Debug.WriteLine(board.GetValue()); } if (turn == -1) { turnString = "Black's Turn"; } else turnString = "Red's Turn"; if (board.CheckWinNegativeTeam() || board.CheckWinPositiveTeam()) { boardState = "Hết cờ"; } }
/// <summary> /// Sao chép 1 quân cờ /// </summary> /// <param name="piece"></param> public void Clone(ChessPiece piece) { _isDied = piece._isDied; _color = piece._color; _value = piece._value; _point = piece._point; _position = piece._position; }