public void UnDo(ref ChessGameField.Cell[,] field) { foreach (Action action in Actions.Reverse()) { action.UnDo(ref field); } }
public void Do(ref ChessGameField.Cell[,] field, ChessFigure figure) { Fig = figure; foreach (Action action in Actions) { action.Do(ref field); } }
public bool CanMoveOneStep(ChessGameField.Cell cellTo, Point posFrom, Point posTo) { if (cellTo.figure == null && posFrom.X == posTo.X) { if ((GetOwner() == Player.White && posFrom.Y == posTo.Y + 1) || (GetOwner() == Player.Black && posFrom.Y == posTo.Y - 1)) { return true; } } return false; }
public bool CanCapture(ChessGameField.Cell cellTo, Point posFrom, Point posTo) { if (cellTo.figure != null && cellTo.figure.GetOwner() != GetOwner()) // Capture { bool diag = posFrom.X == posTo.X - 1 || posFrom.X == posTo.X + 1; bool playerDir = (GetOwner() == Player.White && posFrom.Y == posTo.Y + 1) || (GetOwner() == Player.Black && posFrom.Y == posTo.Y - 1); if (diag && playerDir) { return true; } } return false; }
public bool CanCaptureByEnPassant(ChessGameField.Cell[,] field, ChessGameField.Cell cellTo, Point posFrom, Point posTo, ChessMove lastMove) { if (cellTo.figure == null && (posFrom.X == posTo.X - 1 || posFrom.X == posTo.X + 1)) // En passant { if ((GetOwner() == Player.White && posFrom.Y == posTo.Y + 1) || (GetOwner() == Player.Black && posFrom.Y == posTo.Y - 1)) { Figure opponentsFigure = field[posTo.X, posFrom.Y].figure; if (opponentsFigure is Pawn && opponentsFigure.GetOwner() != GetOwner()) { Pawn opponentsPawn = (Pawn)opponentsFigure; if (lastMove.Fig == opponentsPawn && Math.Abs(lastMove.GetPrevPos().Y - posFrom.Y) == 2) { return true; } } } } return false; }
public bool CanMove(ChessGameField.Cell[,] field, Point posFrom, Point posTo, ChessMove lastMove) { ChessGameField.Cell cellTo = field[posTo.X, posTo.Y]; if (CanMoveOneStep(cellTo, posFrom, posTo)) { return true; } else if (CanMoveTwoSteps(cellTo, posFrom, posTo)) { return true; } else if (CanCapture(cellTo, posFrom, posTo)) { return true; } else if (CanCaptureByEnPassant(field, cellTo, posFrom, posTo, lastMove)) { return true; } return false; }
private void SelectCell(Point cellPos, ChessGameField.Cell cell) { if (cell.figure != null && cell.figure.GetOwner() == CurrentPlayer) { SelectedPoint = cellPos; State = ActionState.Selected; } }
public bool CanMoveTwoSteps(ChessGameField.Cell cellTo, Point posFrom, Point posTo) { if (cellTo.figure == null && posFrom.X == posTo.X) { if (IsFirstMove(posFrom) && ((GetOwner() == Player.White && posFrom.Y == posTo.Y + 2) || (GetOwner() == Player.Black && posFrom.Y == posTo.Y - 2))) { return true; } } return false; }
public ChessMove Move(ref ChessGameField.Cell[,] field, Point posFrom, Point posTo, ChessMove lastMove) { ChessGameField.Cell cellTo = field[posTo.X, posTo.Y]; ChessMove move = new ChessMove(); if (CanMoveOneStep(cellTo, posFrom, posTo)) { move.AddAction(new ChessMove.MoveAction(posFrom, posTo)); return move; } else if (CanMoveTwoSteps(cellTo, posFrom, posTo)) { move.AddAction(new ChessMove.MoveAction(posFrom, posTo)); return move; } else if (CanCapture(cellTo, posFrom, posTo)) { move.AddAction(new ChessMove.RemoveAction(posTo)); move.AddAction(new ChessMove.MoveAction(posFrom, posTo)); return move; } else if (CanCaptureByEnPassant(field, cellTo, posFrom, posTo, lastMove)) { move.AddAction(new ChessMove.RemoveAction(new Point(posTo.X, posFrom.Y))); move.AddAction(new ChessMove.MoveAction(posFrom, posTo)); return move; } return null; }
public void UnDo(ref ChessGameField.Cell[,] field) { field[Pos.X, Pos.Y].figure = Fig; Fig = null; }
public void Do(ref ChessGameField.Cell[,] field) { Fig = field[Pos.X, Pos.Y].figure; field[Pos.X, Pos.Y].figure = null; }
public void UnDo(ref ChessGameField.Cell[,] field) { field[From.X, From.Y].figure = Fig; field[To.X, To.Y].figure = null; Fig = null; }
public void Do(ref ChessGameField.Cell[,] field) { Fig = field[From.X, From.Y].figure; field[From.X, From.Y].figure = null; field[To.X, To.Y].figure = Fig; }