Пример #1
0
        // move soldier to the target position and change the last position to empty
        public void basicMove(Coords start, Coords end)
        {
            SoldierBase temp = board[start.getY(), start.getX()];

            board[start.getY(), start.getX()] = new EmptySoldier(" ", " ", false, start.getY(), start.getX());
            temp.setY(end.getY());
            temp.setX(end.getX());
            board[end.getY(), end.getX()] = temp;
            board[end.getY(), end.getX()].isMoved(true);
        }
Пример #2
0
 public void doEnPassant(Coords start, Coords end)
 {
     basicMove(start, end);
     if (WhiteTurn())
     {
         removeObj(new Coords(end.getY() + 1, end.getX()));
     }
     else
     {
         removeObj(new Coords(end.getY() - 1, end.getX()));
     }
 }
Пример #3
0
 public bool validPawnPromotion(Coords start, Coords end)
 {
     if (WhiteTurn() && GetSoldierByPosition(start).getType() == "P" && end.getY() == 0)
     {
         return(true);
     }
     if (!WhiteTurn() && GetSoldierByPosition(start).getType() == "P" && end.getY() == 7)
     {
         return(true);
     }
     return(false);
 }
Пример #4
0
 public bool StraightLines(ChessBoard board, Coords start, Coords end)
 {
     if (start.getX() == end.getX())
     {
         if (start.getY() < end.getY())
         {
             for (int i = start.getY() + 1; i < end.getY(); i++)
             {
                 if (board.GetSoldierByPosition(new Coords(i, start.getX())).getColor() != " ")
                 {
                     return(false);  // If there is one (not empty) movement isn't allowed
                 }
             }
         }
         else
         {
             for (int i = start.getY() - 1; i > end.getY(); i--)
             {
                 if (board.GetSoldierByPosition(new Coords(i, start.getX())).getColor() != " ")
                 {
                     return(false);
                 }
             }
         }
         return(canIeat(board, start, end) || board.GetSoldierByPosition(end).getColor() == " ");
     }
     else if (start.getY() == end.getY())
     {
         if (start.getX() < end.getX())
         {
             for (int i = start.getX() + 1; i < end.getX(); i++)
             {
                 if (board.GetSoldierByPosition(new Coords(start.getY(), i)).getColor() != " ")
                 {
                     return(false);
                 }
             }
         }
         else
         {
             for (int i = start.getX() - 1; i > end.getX(); i--)
             {
                 if (board.GetSoldierByPosition(new Coords(start.getY(), i)).getColor() != " ")
                 {
                     return(false);
                 }
             }
         }
         return(canIeat(board, start, end) || board.GetSoldierByPosition(end).getColor() == " ");
     }
     return(false);
 }
Пример #5
0
        public bool DiagonalMoves(ChessBoard board, Coords start, Coords end)
        {
            if (Math.Abs(start.getX() - end.getX()) == Math.Abs(start.getY() - end.getY()))
            {
                if (start.getY() > end.getY() && start.getX() > end.getX())
                {//y--x--
                    for (int tempStartY = start.getY() - 1, tempStartX = start.getX() - 1; tempStartY > end.getY() && tempStartX > end.getX(); tempStartY--, tempStartX--)
                    {
                        if (board.GetSoldierByPosition(new Coords(tempStartY, tempStartX)).getColor() != " ")
                        {
                            return(false);  // If there is one (not empty) movement isn't allowed
                        }
                    }
                }
                else if (start.getY() > end.getY() && start.getX() < end.getX())
                {//y--x++
                    for (int tempStartY = start.getY() - 1, tempStartX = start.getX() + 1; tempStartY > end.getY() && tempStartX < end.getX(); tempStartY--, tempStartX++)
                    {
                        if (board.GetSoldierByPosition(new Coords(tempStartY, tempStartX)).getColor() != " ")
                        {
                            return(false);  // If there is one (not empty) movement isn't allowed
                        }
                    }
                }
                else if (start.getY() < end.getY() && start.getX() < end.getX())
                {//y++x++
                    for (int tempStartY = start.getY() + 1, tempStartX = start.getX() + 1; tempStartY > end.getY() && tempStartX < end.getX(); tempStartY++, tempStartX++)
                    {
                        if (board.GetSoldierByPosition(new Coords(tempStartY, tempStartX)).getColor() != " ")
                        {
                            return(false);  // If there is one (not empty) movement isn't allowed
                        }
                    }
                }
                else if (start.getY() < end.getY() && start.getX() > end.getX())
                {//y++x--
                    for (int tempStartY = start.getY() + 1, tempStartX = start.getX() - 1; tempStartY > end.getY() && tempStartX < end.getX(); tempStartY++, tempStartX--)
                    {
                        if (board.GetSoldierByPosition(new Coords(tempStartY, tempStartX)).getColor() != " ")
                        {
                            return(false);  // If there is one (not empty) movement isn't allowed
                        }
                    }
                }

                return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end));
            }
            return(false);
        }
Пример #6
0
        //if input between 0 to 7
        public bool ValidInput(Coords start, Coords end)
        {
            if (start.getY() >= 0 && start.getY() <= 7 &&
                start.getX() >= 0 && start.getX() <= 7 &&
                end.getY() >= 0 && end.getY() <= 7 &&
                end.getX() >= 0 && end.getX() <= 7)
            {
                row          = start.getY();
                column       = start.getX();
                targetRow    = end.getY();
                targetColumn = end.getX();
                return(true);
            }



            return(false);
        }
Пример #7
0
        public bool validEnPassant(Coords start, Coords end)
        {
            int direction;

            if (WhiteTurn())
            {
                direction = -1;
            }
            else
            {
                direction = 1;
            }
            if (((GetValidIndex(start.getX() + 1, false) == end.getX() || GetValidIndex(start.getX() - 1, true) == end.getX()) &&
                 start.getY() + direction == end.getY() &&
                 GetSoldierByPosition(end).getColor() == " "))
            {
                if (WhiteTurn() && start.getY() == 3 &&
                    GetSoldierByPosition(start).getType() == "P" &&
                    GetSoldierByPosition(start).getColor() == "W" &&
                    board[3, end.getX()].getType() == "P" &&
                    board[3, end.getX()].getColor() == "B")
                {
                    if (board[end.getY() - direction, end.getX()] is PawnPiece &&
                        ((PawnPiece)board[end.getY() - direction, end.getX()]).getMovedTwoSteps() == true)
                    {
                        return(true);
                    }
                }
                if (!WhiteTurn() && start.getY() == 4 &&
                    GetSoldierByPosition(start).getType() == "P" &&
                    GetSoldierByPosition(start).getColor() == "W" &&

                    board[4, end.getX()].getType() == "P" &&
                    board[4, end.getX()].getColor() == "B")
                {
                    if (board[end.getY() - direction, end.getX()] is PawnPiece &&
                        ((PawnPiece)board[end.getY() - direction, end.getX()]).getMovedTwoSteps() == true)
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
Пример #8
0
        //Castling
        public bool validCastling(Coords start, Coords end)
        {
            if (GetSoldierByPosition(start).getType() == "K" && GetSoldierByPosition(start).getMoved() == false)
            {
                //2 spaces castling
                if (start.getX() < end.getX())
                {
                    //clear pass? then move the rook

                    if (GetSoldierByPosition(new Coords(start.getY(), GetValidIndex(start.getX() + 1, false))).getType() == " " &&
                        GetSoldierByPosition(new Coords(start.getY(), GetValidIndex(start.getX() + 2, false))).getType() == " " &&
                        GetSoldierByPosition(new Coords(start.getY(), GetValidIndex(start.getX() + 3, false))).getType() == "R" &&
                        GetSoldierByPosition(new Coords(start.getY(), GetValidIndex(start.getX() + 3, false))).getMoved() == false &&
                        GetSoldierByPosition(new Coords(start.getY(), GetValidIndex(start.getX() + 2, false))) ==
                        GetSoldierByPosition(new Coords(end.getY(), end.getX())) &&
                        !(inCheck(FindKing())))

                    {
                        return(true);
                    }
                }
                else
                {
                    //clear pass? then move the rook
                    if (GetSoldierByPosition(new Coords(start.getY(), GetValidIndex(start.getX() - 1, true))).getType() == " " &&
                        GetSoldierByPosition(new Coords(start.getY(), GetValidIndex(start.getX() - 2, true))).getType() == " " &&
                        GetSoldierByPosition(new Coords(start.getY(), GetValidIndex(start.getX() - 3, true))).getType() == " " &&
                        GetSoldierByPosition(new Coords(start.getY(), GetValidIndex(start.getX() - 4, true))).getType() == "R" &&
                        GetSoldierByPosition(new Coords(start.getY(), GetValidIndex(start.getX() - 4, true))).getMoved() == false &&
                        GetSoldierByPosition(new Coords(start.getY(), GetValidIndex(start.getX() - 2, true))) ==
                        GetSoldierByPosition(new Coords(end.getY(), end.getX())) &&
                        !(inCheck(FindKing())))
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
Пример #9
0
        public bool PawnMove(ChessBoard board, Coords start, Coords end)
        {
            int direction;

            if (board.WhiteTurn())
            {
                direction = -1;
            }
            else
            {
                direction = 1;
            }

            if (!this.getMoved() &&//first move 2 steps
                start.getX() == end.getX() &&
                start.getY() + (2 * direction) == end.getY() &&
                board.GetSoldierByPosition(new Coords(start.getY() + (2 * direction), end.getX())).getType() == " ")
            {
                firstMoveTwoSteps = true;
                return(true);
            }
            if (start.getX() == end.getX() &&//move 1 step
                start.getY() + direction == end.getY() &&
                board.GetSoldierByPosition(new Coords(start.getY() + direction, end.getX())).getType() == " ")
            {
                return(true);
            }
            if ((start.getX() + 1 == end.getX() || start.getX() - 1 == end.getX()) &&//eating
                start.getY() + direction == end.getY() &&
                board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor() &&
                board.GetSoldierByPosition(end).getColor() != " ")
            {
                return(canIeat(board, start, end));
            }
            if (board.validEnPassant(start, end))//en passant
            {
                return(true);
            }
            return(false);
        }
Пример #10
0
        //possible move to cancel check?
        public bool PossibleToCancelCheck(Coords start, Coords end)

        {
            bool movePosition = false;

            if (GetSoldierByPosition(start).getMoved())
            {
                movePosition = true;
            }
            else
            {
                movePosition = false;
            }
            SoldierBase tempStart;
            SoldierBase tempEnd;

            if (GetSoldierByPosition(start).validMove(this, start, end))
            {
                tempStart = (GetSoldierByPosition(start));
                tempEnd   = (GetSoldierByPosition(end));
                basicMove(start, end);
                tempStart.setY(start.getY());
                tempStart.setX(start.getX());
                if (!(inCheck(FindKing())))
                {
                    board[start.getY(), start.getX()] = tempStart;
                    board[end.getY(), end.getX()]     = tempEnd;
                    board[start.getY(), start.getX()].isMoved(movePosition);
                    return(true);
                }
                else
                {
                    board[start.getY(), start.getX()] = tempStart;
                    board[end.getY(), end.getX()]     = tempEnd;
                    board[start.getY(), start.getX()].isMoved(movePosition);
                }
            }
            return(false);
        }
Пример #11
0
 public bool KingMoves(ChessBoard board, Coords start, Coords end)
 {
     if (start.getX() + 1 == end.getX() && start.getY() + 1 == end.getY() &&//x+1//y+1
         board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor())
     {
         return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end));
     }
     if (start.getX() + 1 == end.getX() && start.getY() - 1 == end.getY() &&//x+1//y-1
         board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor())
     {
         return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end));
     }
     if (start.getX() - 1 == end.getX() && start.getY() + 1 == end.getY() &&//x-1//y+1
         board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor())
     {
         return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end));
     }
     if (start.getX() - 1 == end.getX() && start.getY() - 1 == end.getY() &&//x-1//y-1
         board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor())
     {
         return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end));
     }//
     if (start.getX() == end.getX() && start.getY() - 1 == end.getY() &&//x//y-1
         board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor())
     {
         return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end));
     }
     if (start.getX() == end.getX() && start.getY() + 1 == end.getY() &&//x//y+1
         board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor())
     {
         return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end));
     }
     if (start.getX() - 1 == end.getX() && start.getY() == end.getY() &&//x-1//y
         board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor())
     {
         return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end));
     }
     if (start.getX() + 1 == end.getX() && start.getY() == end.getY() &&//x+1//y
         board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor())
     {
         return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end));
     }
     if (board.validCastling(start, end))
     {
         return(true);
     }
     return(false);
 }
Пример #12
0
 public bool rMoves(ChessBoard board, Coords start, Coords end)
 {
     if (start.getX() + 2 == end.getX() && start.getY() + 1 == end.getY() &&//x+2//y+1
         board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor())
     {
         return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end));
     }
     if (start.getX() + 2 == end.getX() && start.getY() - 1 == end.getY() &&//x+2//y-1
         board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor())
     {
         return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end));
     }
     if (start.getX() - 2 == end.getX() && start.getY() + 1 == end.getY() &&//x-2//y+1
         board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor())
     {
         return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end));
     }
     if (start.getX() - 2 == end.getX() && start.getY() - 1 == end.getY() &&//x-2//y-1
         board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor())
     {
         return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end));
     }
     if (start.getX() - 1 == end.getX() && start.getY() - 2 == end.getY() &&//x-1//y-2
         board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor())
     {
         return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end));
     }
     if (start.getX() + 1 == end.getX() && start.getY() - 2 == end.getY() &&//x+1//y-2
         board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor())
     {
         return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end));
     }
     if (start.getX() - 1 == end.getX() && start.getY() + 2 == end.getY() &&//x-1//y+2
         board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor())
     {
         return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end));
     }
     if (start.getX() + 1 == end.getX() && start.getY() + 2 == end.getY() &&//x+1//y+2
         board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor())
     {
         return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end));
     }
     return(false);
 }
Пример #13
0
        public void doCastlingMove(Coords start, Coords end)
        {
            //temp soldier for the king  to clear the move for the rook

            if (start.getX() < end.getX() && GetSoldierByPosition(start).getColor() == "W")
            {
                SoldierBase tempKing = board[start.getY(), start.getX()];
                board[start.getY(), start.getX()] = new EmptySoldier(" ", " ", false, start.getY(), start.getX());
                basicMove(new Coords(7, 7), new Coords(7, 5));
                tempKing.setY(start.getY());
                tempKing.setX(start.getX() + 2);
                board[start.getY(), start.getX() + 2] = tempKing;
            }
            else if (start.getX() < end.getX() && GetSoldierByPosition(start).getColor() == "B")
            {
                SoldierBase tempKing = board[start.getY(), start.getX()];
                board[start.getY(), start.getX()] = new EmptySoldier(" ", " ", false, start.getY(), start.getX());
                basicMove(new Coords(0, 7), new Coords(0, 5));
                tempKing.setY(start.getY());
                tempKing.setX(start.getX() + 2);
                board[start.getY(), start.getX() + 2] = tempKing;
            }
            else if (start.getX() > end.getX() && GetSoldierByPosition(start).getColor() == "W")
            {
                SoldierBase tempKing = board[start.getY(), start.getX()];
                board[start.getY(), start.getX()] = new EmptySoldier(" ", " ", false, start.getY(), start.getX());
                basicMove(new Coords(7, 0), new Coords(7, 3));
                tempKing.setY(start.getY());
                tempKing.setX(start.getX() - 2);
                board[start.getY(), start.getX() - 2] = tempKing;
            }
            else if (start.getX() > end.getX() && GetSoldierByPosition(start).getColor() == "B")
            {
                SoldierBase tempKing = board[start.getY(), start.getX()];
                board[start.getY(), start.getX()] = new EmptySoldier(" ", " ", false, start.getY(), start.getX());
                basicMove(new Coords(0, 0), new Coords(0, 3));
                tempKing.setY(start.getY());
                tempKing.setX(start.getX() - 2);
                board[end.getY(), start.getX() - 2] = tempKing;
            }
        }
Пример #14
0
 // get the soldier type
 public SoldierBase GetSoldierByPosition(Coords start)
 {
     return(board[start.getY(), start.getX()]);
 }
Пример #15
0
 public void doPromotion(Coords start, Coords end)
 {
     removeObj(start);
     board[end.getY(), end.getX()] = new QueenPiece("Q", "W", false, start.getY(), start.getX());
 }
Пример #16
0
 public void removeObj(Coords start)
 {
     board[start.getY(), start.getX()] = new EmptySoldier(" ", " ", false, start.getY(), start.getX());
 }