private void ExecuteAtomicMove(AtomicMove move) { Location source = move.GetSource(); Location destination = move.GetDestination(); Piece piece = Get(source); Piece destPiece = Get(destination); if (destPiece != null) { capturedPieces.Push(destPiece); move.Capture(); if (destPiece.GetPieceColor().IsWhite()) { whitePieces.Remove(destPiece); } else { blackPieces.Remove(destPiece); } } Set(destination, piece); Set(source, null); piece.Do(move); Update(); }
public override void Undo(AtomicMove move) { base.Undo(move); if (move == firstMove) { moved = false; firstMove = null; } }
public override void Do(AtomicMove move) { base.Do(move); if (!moved) { firstMove = move; moved = true; } }
public Animation(float speed, AtomicMove move, Piece piece, float tileSize) { this.speed = speed; this.move = move; this.piece = piece; this.tileSize = tileSize; start = new Vector2f(move.GetSource().GetFile() * tileSize, (7 - move.GetSource().GetRank()) * tileSize); dir = new Vector2f(move.GetDestination().GetFile() * tileSize, (7 - move.GetDestination().GetRank()) * tileSize) - start; length = (float)Math.Sqrt(dir.X * dir.X + dir.Y * dir.Y) / tileSize; }
public Move Parse(string str) { Move move; if (str[0] == '0') { move = Castling.Parse(str, turn); } else { move = new AtomicMove(str); } return(move); }
public void MouseButtonReleased(Vector2f location, Mouse.Button button) { location = location - offset; int x = (int)(location.X / tileSize); int y = (int)(location.Y / tileSize); Location destination = new Location(x, 7 - y); if (button == Mouse.Button.Left && pickedPiece != null && !startMove.Equals(destination)) { Move move; if (pickedPiece.GetPieceType() == PieceType.King && position.Get(destination) == null && startMove.EulerDistance(destination) > 1 && pickedPiece.GetLocation().GetRank() == destination.GetRank()) { //Rochade if (startMove.GetFile() < destination.GetFile()) { //Small move = new KingsideCastling(position.GetTurn()); } else { //Big move = new QueensideCastling(position.GetTurn()); } } else { move = new AtomicMove(pickedPiece.GetPieceType(), startMove, destination); } if (position.Do(move)) { AnimateMove(pickedPiece, move); } SelectPiece(pickedPiece); pickedPiece = null; } else { pickedPiece = null; } }
private void ExecuteAtomicMoveReversed(AtomicMove move) { Location source = move.GetDestination(); Location destination = move.GetSource(); Piece piece = Get(source); Set(destination, piece); piece.Undo(move); if (move.DidCapture()) { Piece destPiece = capturedPieces.Pop(); Add(destPiece); } else { Set(source, null); } Update(); }
public virtual void Undo(AtomicMove move) { this.location = move.GetSource(); }
public virtual void Do(AtomicMove move) { this.location = move.GetDestination(); }