Ejemplo n.º 1
0
 public void UnDo(ref ChessGameField.Cell[,] field)
 {
     foreach (Action action in Actions.Reverse())
     {
         action.UnDo(ref field);
     }
 }
Ejemplo n.º 2
0
        public void Do(ref ChessGameField.Cell[,] field, ChessFigure figure)
        {
            Fig = figure;

            foreach (Action action in Actions)
            {
                action.Do(ref field);
            }
        }
Ejemplo n.º 3
0
 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;
 }
Ejemplo n.º 4
0
        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;
        }
Ejemplo n.º 5
0
 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;
 }
Ejemplo n.º 6
0
        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;
        }
Ejemplo n.º 7
0
 private void SelectCell(Point cellPos, ChessGameField.Cell cell)
 {
     if (cell.figure != null && cell.figure.GetOwner() == CurrentPlayer)
     {
         SelectedPoint = cellPos;
         State = ActionState.Selected;
     }
 }
Ejemplo n.º 8
0
 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;
 }
Ejemplo n.º 9
0
        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;
        }
Ejemplo n.º 10
0
 public void UnDo(ref ChessGameField.Cell[,] field)
 {
     field[Pos.X, Pos.Y].figure = Fig;
     Fig = null;
 }
Ejemplo n.º 11
0
 public void Do(ref ChessGameField.Cell[,] field)
 {
     Fig = field[Pos.X, Pos.Y].figure;
     field[Pos.X, Pos.Y].figure = null;
 }
Ejemplo n.º 12
0
 public void UnDo(ref ChessGameField.Cell[,] field)
 {
     field[From.X, From.Y].figure = Fig;
     field[To.X, To.Y].figure = null;
     Fig = null;
 }
Ejemplo n.º 13
0
 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;
 }