Ejemplo n.º 1
0
        //Kollar om ett drag är tillåtet för en springare
        public override Boolean isValidMove(Move move)
        {
            if(Math.Abs(move.gettoX() - move.getfromX()) == Math.Abs(move.gettoY() - move.getfromY()))
            {
                return true;
            }else if (move.gettoX() - move.getfromX() == move.getfromY() - move.gettoY())
            {
                return true;
            }

            return false;
        }
Ejemplo n.º 2
0
 //Kollar om draget är godkänt för en häst
 public override Boolean isValidMove(Move move)
 {
     if(move.getfromY() - move.gettoY() == 2 || move.getfromY() - move.gettoY() == -2)
     {
         if(move.getfromX() - move.gettoX() == 1 || move.getfromX() - move.gettoX() == -1)
         {
             return true;
         }
     }
     if (move.getfromX() - move.gettoX() == 2 || move.getfromX() - move.gettoX() == -2)
     {
         if (move.getfromY() - move.gettoY() == 1 || move.getfromY() - move.gettoY() == -1)
         {
             return true;
         }
     }
     return false;
 }
Ejemplo n.º 3
0
 //Kollar om ett drag är godkänt för en kung
 public override Boolean isValidMove(Move move)
 {
     if (move.gettoY() - move.getfromY() == 1 && (move.gettoX() - move.getfromX() == 1 ||
           move.gettoX() - move.getfromX() == -1 || move.gettoX() == move.getfromX()))
     {
         return true;
     }
     else if (move.gettoY() - move.getfromY() == -1 && (move.gettoX() - move.getfromX() == 1 ||
          move.gettoX() - move.getfromX() == -1 || move.gettoX() == move.getfromX()))
     {
         return true;
     }
     else if ((move.gettoX() - move.getfromX() == 1 || move.gettoX() - move.getfromX() == -1) &&
         (move.gettoY() - move.getfromY() == 0 ))
     {
         return true;
     }
     else
     {
         return false;
     }
 }
Ejemplo n.º 4
0
 //Kollar om det är ett tillåtet drag
 public bool isValid(Move move, String gameStatus, ChessPiece[,] currentBoard)
 {
     if (board.colourOfPiece(move, currentBoard) == gameStatus)
     {
         if (currentBoard[move.getfromX(), move.getfromY()].isValidMove(move) && isLeagalMove(move, currentBoard))
         {
             if (isCheck(move, gameStatus))
             {
                 return false;
             }
             return true;
         }
         else
         {
             return false;
         }
     }
     return false;
 }
Ejemplo n.º 5
0
        //Kollar om ett diagonalt drag är godkänt
        public bool checkDiagonal(Move move, ChessPiece[,] currentBoard)
        {
            if (move.getfromX() < move.gettoX() && move.getfromY() < move.gettoY()) //x och y ökar
            {
                int y = move.getfromY()  + 1;
                for (int x = move.getfromX() + 1; x <= move.gettoX(); x++)
                {
                    if (y < 8)
                    {
                        if (currentBoard[x, y] != null) //om någon pjäs står i vägen
                        {
                            if (x == move.gettoX() && y == move.gettoY()) //pjäsen har nått sitt mål
                            {
                                if (board.squareStatus(move, currentBoard) == 2)//Pjäsen har eliminerat en motståndare
                                {
                                    return true;
                                }
                            }
                            return false;
                        }
                    }
                    y++;
                }
                return true;
            }

            if (move.getfromX() > move.gettoX() && move.getfromY() > move.gettoY()) //x och y minskar
            {
                int y = move.getfromY() - 1;
                for (int x = move.getfromX() - 1; x >= move.gettoX(); x--)
                {
                    if (y < 8)
                    {
                        if (currentBoard[x, y] != null)//om någon pjäs står i vägen
                        {
                            if (x == move.gettoX() && y == move.gettoY()) //pjäsen har nått sitt mål
                            {
                                if (board.squareStatus(move, currentBoard) == 2)//Pjäsen har eliminerat en motståndare
                                {
                                    return true;
                                }
                            }
                            return false;
                        }
                    }
                    y--;
                }
                return true;
            }

            if (move.getfromX() < move.gettoX() && move.getfromY() > move.gettoY()) //x ökar, y minskar
            {
                int y = move.getfromY() - 1;
                for (int x = move.getfromX() + 1; x <= move.gettoX(); x++)
                {
                    if (y < 8)
                    {
                        if (currentBoard[x, y] != null)//om någon pjäs står i vägen
                        {
                            if (x == move.gettoX() && y == move.gettoY()) //pjäsen har nått sitt mål
                            {
                                if (board.squareStatus(move, currentBoard) == 2)//Pjäsen har eliminerat en motståndare
                                {
                                    return true;
                                }
                            }
                            return false;
                        }
                    }
                    y--;
                }
                return true;
            }

            if (move.getfromX() > move.gettoX() && move.getfromY() < move.gettoY()) //x minskar, y ökar, alltid här
            {
                int y = move.getfromY() + 1;

                for (int x = move.getfromX() - 1; x >= move.gettoX(); x--)
                {

                    if (y < 8)
                    {
                        if (currentBoard[x, y] != null)//om någon pjäs står i vägen
                        {
                            if (x == move.gettoX() && y == move.gettoY()) //pjäsen har nått sitt mål
                            {
                                if (board.squareStatus(move, currentBoard) == 2)//Pjäsen har eliminerat en motståndare
                                {
                                    return true;
                                }
                            }
                            return false;
                        }
                    }

                    y++;
                }
                return true;
            }
            return false;
        }
Ejemplo n.º 6
0
        //Kollar om draget är tillåtet enligt reglerna
        public bool isLeagalMove(Move move, ChessPiece[,] currentBoard)
        {
            ChessPiece current = currentBoard[move.getfromX(), move.getfromY()];

            if (current is Horse)
            {
                if (board.squareStatus(move, currentBoard) == 1)//En av spelarens egna pjäser står i vägen
                {
                    return false;
                }
                return true;
            }
               else if (current is Farmer)
            {
                if ((move.getfromX() != move.gettoX() && board.squareStatus(move, currentBoard) == 2) ||
                    (move.gettoX() == move.getfromX() && board.squareStatus(move, currentBoard) == 3))
                //bonden har tagit en enemy på sidan eller gått rak fram och inte träffat på ngn pjäs
                {
                    return true;
                }
                return false;
            }
            else
            {
                if (move.isHorizontal() == true)
                {
                    return checkHorizontal(move, currentBoard);
                }
                if (move.isVertical() == true)
                {
                    return checkVertical(move, currentBoard);
                }
                if (move.isDiagonal() == true)
                {
                    return checkDiagonal(move, currentBoard);
                }
                return false;
            }
        }
Ejemplo n.º 7
0
        //kollar om kungen står i check
        public bool isCheck(Move move, String gamestatus)
        {
            ChessPiece[,] temp = board.getCopy();//kopierar bordet

            //Uppdatera temporärt bord, som det kommer se ut om movet skulle gå igenom:
            temp[move.gettoX(), move.gettoY()] = temp[move.getfromX(), move.getfromY()];
            temp[move.getfromX(), move.getfromY()] = null;

            //Hämta kungens position
            ChessPiece king = board.getKingFromBoard(temp, gamestatus);

            //loopa över nya brädet:
            for (int x = 0; x <= 7; x++)
            {
                for (int y = 0; y <= 7; y++)
                {
                    //om vi hittar en pjäs:
                    if (temp[x, y] != null)
                    {
                        ChessPiece temp2 = temp[x, y];
                        //Om det är motståndarens pjäs
                        if (temp2.Color != gamestatus)
                        {
                            Move checkMove = new Move(x, y, king.posX, king.posY);//move tar motståndarens position mot spelarens egen kung
                            if (temp2.isValidMove(checkMove) && isLeagalMove(checkMove, temp))//om det går igenom har man satt sin egen kung i shack
                            {
                                return true;
                            }

                        }

                    }
                }

            }
            return false;
        }
Ejemplo n.º 8
0
        //Kollar om ett vertikalt drag är tillåtet
        public bool checkVertical(Move move, ChessPiece[,] currentBoard)
        {
            //kolla om det går att hoppa över skaer
            if (move.getfromY() < move.gettoY())
            {
                for (int y = move.getfromY() + 1; y <= move.gettoY(); y++)
                {
                    if (currentBoard[move.getfromX(), y] != null)
                    {
                        if (y == move.gettoY() && board.squareStatus(move, currentBoard) != 1)
                        {
                            return true;
                        }
                        return false;
                    }

                }
                return true;
            }

            else if (move.getfromY() > move.gettoY())
            {
                for (int y = move.getfromY() - 1; y >= move.gettoY(); y--)
                {
                    if (currentBoard[move.getfromX(), y] != null)
                    {
                        if (y == move.gettoY() && (board.squareStatus(move, currentBoard) != 1))
                        {
                            return true;
                        }
                        return false;
                    }
                }
                return true;
            }
            return false;
        }
Ejemplo n.º 9
0
        //Kollar om ett horisontellt drag är tillåtet
        public bool checkHorizontal(Move move, ChessPiece[,] currentBoard)
        {
            if (move.getfromX() < move.gettoX())
            {
                for (int x = move.getfromX() + 1; x <= move.gettoX(); x++)
                {
                    if (currentBoard[x, move.getfromY()] != null)
                    {
                        if (x == move.gettoX() && board.squareStatus(move, currentBoard) != 1)
                        {
                            return true;
                        }
                        return false;
                    }
                }
                return true;
            }

            if (move.getfromX() > move.gettoX())
            {
                for (int x = move.getfromX() - 1; x >= move.gettoX(); x--)
                {
                    if (currentBoard[x, move.getfromY()] != null)
                    {
                        if (x == move.gettoX() && board.squareStatus(move, currentBoard) != 1)
                        {
                            return true;
                        }
                        return false;
                    }
                }
                return true;
            }
            return false;
        }
Ejemplo n.º 10
0
 //Updaterar brädet (arrayen) efter att ett drag genomförts
 public void updateTable(Move move)
 {
     board[move.gettoX(), move.gettoY()] = board[move.getfromX(), move.getfromY()];
     board[move.getfromX(), move.getfromY()] = null;
     board[move.gettoX(), move.gettoY()].posX = move.gettoX();
     board[move.gettoX(), move.gettoY()].posY = move.gettoY();
 }
Ejemplo n.º 11
0
        //1. Egen pjäs
        //2. Motståndares pjäs
        //3. Tom ruta
        public int squareStatus(Move move, ChessPiece[,] currentBoard)
        {
            if (currentBoard[move.gettoX(), move.gettoY()] != null)
            {
                ChessPiece p1 = currentBoard[move.getfromX(), move.getfromY()];
                ChessPiece p2 = currentBoard[move.gettoX(), move.gettoY()];

                if (p1.Color == p2.Color)
                {
                    return 1;
                }
                else
                {
                    return 2;
                }
            }

            return 3;
        }
Ejemplo n.º 12
0
 //Returnerar färgen på pjäsen som flyttas
 public string colourOfPiece(Move move, ChessPiece[,] currentBoard)
 {
     if (currentBoard[move.getfromX(), move.getfromY()] != null)
     {
         return currentBoard[move.getfromX(), move.getfromY()].Color;
     }
     else return "";
 }