Esempio n. 1
0
 public static void WasDoubleJump(DataStructure.Point prev, DataStructure.Point current)
 {
     if (Math.Abs(prev.i - current.i) > 1)
     {
         EnPassant = current;
     }
 }
Esempio n. 2
0
        public static bool IsOpponent(DataStructure.Point possition, int[,] boardMatrix)
        {
            try
            {
                //if (int)color % 2 != 0 it means its 1 therefore an odd number = white.
                //if (color == (int)DataStructure.Color.white)
                if (EnvironmentVariables.Player == DataStructure.Color.white)
                {
                    //than if value on the possition is equal to 0 (even number) than its black and can be kicked out
                    //value needs to be bigger than 0 as it is empty value.
                    if (boardMatrix[possition.i, possition.j] > 0 && boardMatrix[possition.i, possition.j] % 2 == 0)
                    {
                        return(true);
                    }
                }
                else
                {
                    //than if value on the possition is equal to 1 (odd number) than its white and can be kicked out
                    if (boardMatrix[possition.i, possition.j] % 2 == 1)
                    {
                        return(true);
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("IsOpponent methid failure: Values of x and y axis needs to be between 0 to 7.");
                Console.WriteLine(e.ToString());
            }

            return(false);
        }
Esempio n. 3
0
 public static void KickingOutEnPassant(DataStructure.Point prev, DataStructure.Point current, int[,] boardMatrix)
 {
     if (current.j == EnPassant.j && prev.j != current.j)
     {
         if (current.i != EnPassant.i)
         {
             boardMatrix[EnPassant.i, EnPassant.j] = (int)DataStructure.Figures.empty;
         }
     }
 }
Esempio n. 4
0
 public List <DataStructure.Point> FindPossibleMoves(DataStructure.Point possition, int[,] boardMatrix)
 {
     if (EnvironmentVariables.Player == DataStructure.Color.white)
     {
         return(FindMovesWhite(possition, boardMatrix));
     }
     else
     {
         return(FindMovesBlack(possition, boardMatrix));
     }
 }
Esempio n. 5
0
 /// <summary>
 /// Method that moves figures on the board
 /// </summary>
 /// <param name="currentPosition">Current position of the figure</param>
 /// <param name="newPosition">Next position of the figure</param>
 protected void MoveFigure(DataStructure.Point currentPosition, DataStructure.Point newPosition)
 {
     try
     {
         boardMatrix[newPosition.i, newPosition.j]         = boardMatrix[currentPosition.i, currentPosition.j];
         boardMatrix[currentPosition.i, currentPosition.j] = 0;
     }
     catch (Exception e)
     {
         Console.WriteLine("MoveFigure method failure: Values of x and y axis needs to be between 0 to 7.");
         Console.WriteLine(e.ToString());
     }
 }
Esempio n. 6
0
        /// <summary>
        /// Check if pawn landed on the last row of the column. If yes the promote to queen (for now)
        /// </summary>
        /// <param name="possition"></param>
        /// <param name="boardMatrix"></param>
        public static void EndofTheColumn(DataStructure.Point possition, int[,] boardMatrix)
        {
            //TODO UX,UI etc
            if (possition.i == 0)
            {
                boardMatrix[possition.i, possition.j] = (int)DataStructure.Figures.black_queen;
            }
            else if (possition.i == 7)
            {
                boardMatrix[possition.i, possition.j] = (int)DataStructure.Figures.white_queen;
            }

            EnPassant.i = -2;
            EnPassant.j = -2;
        }
Esempio n. 7
0
 static bool KnightCanMove(DataStructure.Point possition, int[,] boardMatrix, DataStructure.Color color)
 {
     if (Validation.IsEmpty(possition, boardMatrix))
     {
         return(true);
     }
     else
     {
         if (Validation.IsOpponent(possition, boardMatrix))
         {
             return(true);
         }
     }
     return(false);
 }
Esempio n. 8
0
 /// <summary>
 /// Find out what color is a selected piece.
 /// </summary>
 /// <param name="selectedField">x,y coordinates for selected field</param>
 /// <param name="boardMatrix">matrix itself</param>
 /// <returns>Color of the selected figure, or that no figure was selected (empty)</returns>
 public static DataStructure.Color FigureColor(DataStructure.Point selectedField, int[,] boardMatrix)
 {
     if (boardMatrix[selectedField.i, selectedField.j] == 0)
     {
         return(DataStructure.Color.empty);
     }
     if (boardMatrix[selectedField.i, selectedField.j] % 2 == (int)DataStructure.Color.white)
     {
         return(DataStructure.Color.white);
     }
     else
     {
         return(DataStructure.Color.black);
     }
 }
Esempio n. 9
0
 /// <summary>
 /// Method to determinade if a field is empty.
 /// </summary>
 /// <param name="possition">Position to move.</param>
 /// <returns></returns>
 public static bool IsEmpty(DataStructure.Point possition, int[,] boardMatrix)
 {
     try
     {
         if (boardMatrix[possition.i, possition.j] == 0)
         {
             return(true);
         }
     }
     catch (Exception e)
     {
         Console.WriteLine("IsEmpty methid failure: Values of x and y axis needs to be between 0 to 7.");
         Console.WriteLine(e.ToString());
     }
     return(false);
 }
Esempio n. 10
0
 /// <summary>
 /// Method for validating a position. It has to be matrix 0 to 7 in x and y axis.
 /// </summary>
 /// <param name="possition">position to be validated</param>
 /// <returns></returns>
 public static bool IsValidPosition(DataStructure.Point possition)
 {
     try
     {
         if (possition.i < 0 || possition.i > 7)
         {
             return(false);
         }
         else if (possition.j < 0 || possition.j > 7)
         {
             return(false);
         }
     }
     catch (Exception e)
     {
         Console.WriteLine("IsValidPosition method failure: Values of x and y axis needs to be between 0 to 7.");
         Console.WriteLine(e.ToString());
     }
     return(true);
 }
Esempio n. 11
0
        public static bool IsOpponent(DataStructure.Point enemyPossition, DataStructure.Point allyPossition, int[,] boardMatrix)
        {
            try
            {
                if (boardMatrix[enemyPossition.i, enemyPossition.j] != (int)DataStructure.Figures.empty)
                {
                    if (boardMatrix[enemyPossition.i, enemyPossition.j] % 2 != boardMatrix[allyPossition.i, allyPossition.j] % 2)
                    {
                        return(true);
                    }
                }

                ////if (int)color % 2 != 0 it means its 1 therefore an odd number = white.
                //if ((int)color % 2 != 0)
                //{
                //    //than if value on the possition is equal to 0 (even number) than its black and can be kicked out
                //    //value needs to be bigger than 0 as it is empty value.
                //    if (boardMatrix[possition.i, possition.j] > 0 && boardMatrix[possition.i, possition.j] % 2 == 0)
                //    {
                //        return true;
                //    }
                //}
                //else
                //{
                //    //than if value on the possition is equal to 1 (odd number) than its white and can be kicked out
                //    if (boardMatrix[possition.i, possition.j] % 2 == 1)
                //    {
                //        return true;
                //    }
                //}
            }
            catch (Exception e)
            {
                Console.WriteLine("IsOpponent methid failure: Values of x and y axis needs to be between 0 to 7.");
                Console.WriteLine(e.ToString());
            }

            return(false);
        }
Esempio n. 12
0
        static List <DataStructure.Point> FindMovesBlack(DataStructure.Point possition, int[,] boardMatrix)
        {
            List <DataStructure.Point> possiblePossitions = new List <DataStructure.Point>();

            DataStructure.Point p;

            p = new DataStructure.Point(possition.i + 2, possition.j - 1);
            if (Validation.IsValidPosition(p))
            {
                if (KnightCanMove(p, boardMatrix, DataStructure.Color.black))
                {
                    possiblePossitions.Add(p);
                }
            }
            p = new DataStructure.Point(possition.i + 1, possition.j - 2);
            if (Validation.IsValidPosition(p))
            {
                if (KnightCanMove(p, boardMatrix, DataStructure.Color.black))
                {
                    possiblePossitions.Add(p);
                }
            }
            p = new DataStructure.Point(possition.i - 1, possition.j - 2);
            if (Validation.IsValidPosition(p))
            {
                if (KnightCanMove(p, boardMatrix, DataStructure.Color.black))
                {
                    possiblePossitions.Add(p);
                }
            }
            p = new DataStructure.Point(possition.i - 2, possition.j - 1);
            if (Validation.IsValidPosition(p))
            {
                if (KnightCanMove(p, boardMatrix, DataStructure.Color.black))
                {
                    possiblePossitions.Add(p);
                }
            }
            p = new DataStructure.Point(possition.i - 2, possition.j + 1);
            if (Validation.IsValidPosition(p))
            {
                if (KnightCanMove(p, boardMatrix, DataStructure.Color.black))
                {
                    possiblePossitions.Add(p);
                }
            }
            p = new DataStructure.Point(possition.i - 1, possition.j + 2);
            if (Validation.IsValidPosition(p))
            {
                if (KnightCanMove(p, boardMatrix, DataStructure.Color.black))
                {
                    possiblePossitions.Add(p);
                }
            }
            p = new DataStructure.Point(possition.i + 1, possition.j + 2);
            if (Validation.IsValidPosition(p))
            {
                if (KnightCanMove(p, boardMatrix, DataStructure.Color.black))
                {
                    possiblePossitions.Add(p);
                }
            }
            p = new DataStructure.Point(possition.i + 2, possition.j + 1);
            if (Validation.IsValidPosition(p))
            {
                if (KnightCanMove(p, boardMatrix, DataStructure.Color.black))
                {
                    possiblePossitions.Add(p);
                }
            }

            return(possiblePossitions);
        }
Esempio n. 13
0
        /// <summary>
        /// color of the fields are set.
        /// This method set correct color of the figures and background as of actual matrix which is saved in  myCollection;
        /// </summary>
        private void DrawBackground()
        {
            myCollection = new Dictionary <string, DataStructure.Point>();
            DataStructure.Point p = new DataStructure.Point();
            int k = 0;

            for (int i = 0; i < 8; i++)
            {
                for (int j = 0; j < 8; j++)
                {
                    if ((i + j) % 2 == 0)
                    {
                        switch (boardMatrix[i, j])
                        {
                        case (int)DataStructure.Figures.empty:
                            listOfControllers[k].BackColor = Color.White;
                            listOfControllers[k].Image     = null;
                            break;

                        case (int)DataStructure.Figures.white_pawn:
                            listOfControllers[k].Image = Properties.Resources.white_pawn_white;
                            break;

                        case (int)DataStructure.Figures.black_pawn:
                            listOfControllers[k].Image = Properties.Resources.black_pawn_white;
                            break;

                        case (int)DataStructure.Figures.white_rock:
                            listOfControllers[k].Image = Properties.Resources.white_rock_white;
                            break;

                        case (int)DataStructure.Figures.black_rock:
                            listOfControllers[k].Image = Properties.Resources.black_rock_white;
                            break;

                        case (int)DataStructure.Figures.white_knight:
                            listOfControllers[k].Image = Properties.Resources.white_knight_white;
                            break;

                        case (int)DataStructure.Figures.black_knight:
                            listOfControllers[k].Image = Properties.Resources.black_knight_white;
                            break;

                        case (int)DataStructure.Figures.white_bishop:
                            listOfControllers[k].Image = Properties.Resources.white_bishop_white;
                            break;

                        case (int)DataStructure.Figures.black_bishop:
                            listOfControllers[k].Image = Properties.Resources.black_bishop_white;
                            break;

                        case (int)DataStructure.Figures.white_queen:
                            listOfControllers[k].Image = Properties.Resources.white_queen_white;
                            break;

                        case (int)DataStructure.Figures.black_queen:
                            listOfControllers[k].Image = Properties.Resources.black_queen_white;
                            break;

                        case (int)DataStructure.Figures.white_king:
                            listOfControllers[k].Image = Properties.Resources.white_king_white;
                            break;

                        case (int)DataStructure.Figures.black_king:
                            listOfControllers[k].Image = Properties.Resources.black_King_white;
                            break;

                        default:
                            break;
                        }
                    }
                    else
                    {
                        switch (boardMatrix[i, j])
                        {
                        case (int)DataStructure.Figures.empty:
                            listOfControllers[k].BackColor = Color.RosyBrown;
                            listOfControllers[k].Image     = null;
                            break;

                        case (int)DataStructure.Figures.white_pawn:
                            listOfControllers[k].Image = Properties.Resources.white_pawn_brown;
                            break;

                        case (int)DataStructure.Figures.black_pawn:
                            listOfControllers[k].Image = Properties.Resources.black_pawn_brown;
                            break;

                        case (int)DataStructure.Figures.white_rock:
                            listOfControllers[k].Image = Properties.Resources.white_rock_brown;
                            break;

                        case (int)DataStructure.Figures.black_rock:
                            listOfControllers[k].Image = Properties.Resources.black_rock_brown;
                            break;

                        case (int)DataStructure.Figures.white_knight:
                            listOfControllers[k].Image = Properties.Resources.white_knight_brown;
                            break;

                        case (int)DataStructure.Figures.black_knight:
                            listOfControllers[k].Image = Properties.Resources.black_knight_brown;
                            break;

                        case (int)DataStructure.Figures.white_bishop:
                            listOfControllers[k].Image = Properties.Resources.white_bishop_brown;
                            break;

                        case (int)DataStructure.Figures.black_bishop:
                            listOfControllers[k].Image = Properties.Resources.black_bishop_brown;
                            break;

                        case (int)DataStructure.Figures.white_queen:
                            listOfControllers[k].Image = Properties.Resources.white_queen_brown;
                            break;

                        case (int)DataStructure.Figures.black_queen:
                            listOfControllers[k].Image = Properties.Resources.black_queen_brown;
                            break;

                        case (int)DataStructure.Figures.white_king:
                            listOfControllers[k].Image = Properties.Resources.white_king_brown;
                            break;

                        case (int)DataStructure.Figures.black_king:
                            listOfControllers[k].Image = Properties.Resources.black_King_brown;
                            break;

                        default:
                            break;
                        }
                    }
                    p.i = i;
                    p.j = j;
                    myCollection.Add(listOfControllers[k].Name.ToString(), p);
                    k++;
                }
            }
        }
Esempio n. 14
0
        static List <DataStructure.Point> FindMovesWhite(DataStructure.Point possition, int[,] boardMatrix)
        {
            List <DataStructure.Point> possiblePossitions = new List <DataStructure.Point>();

            DataStructure.Point p;
            for (int i = possition.i - 1; i > -1; i--)
            {
                p = new DataStructure.Point(i, possition.j);
                if (Validation.IsEmpty(p, boardMatrix))
                {
                    possiblePossitions.Add(p);
                }
                else
                {
                    if (Validation.IsOpponent(p, boardMatrix))
                    {
                        possiblePossitions.Add(p);
                    }
                    break;
                }
            }
            for (int i = possition.i + 1; i < 8; i++)
            {
                p = new DataStructure.Point(i, possition.j);
                if (Validation.IsEmpty(p, boardMatrix))
                {
                    possiblePossitions.Add(p);
                }
                else
                {
                    if (Validation.IsOpponent(p, boardMatrix))
                    {
                        possiblePossitions.Add(p);
                    }
                    break;
                }
            }
            for (int j = possition.j - 1; j > -1; j--)
            {
                p = new DataStructure.Point(possition.i, j);
                if (Validation.IsEmpty(p, boardMatrix))
                {
                    possiblePossitions.Add(p);
                }
                else
                {
                    if (Validation.IsOpponent(p, boardMatrix))
                    {
                        possiblePossitions.Add(p);
                    }
                    break;
                }
            }
            for (int j = possition.j + 1; j < 8; j++)
            {
                p = new DataStructure.Point(possition.i, j);
                if (Validation.IsEmpty(p, boardMatrix))
                {
                    possiblePossitions.Add(p);
                }
                else
                {
                    if (Validation.IsOpponent(p, boardMatrix))
                    {
                        possiblePossitions.Add(p);
                    }
                    break;
                }
            }

            try
            {
                int i = possition.i - 1;
                int j = possition.j - 1;
                while (i > -1 && j > -1)
                {
                    p = new DataStructure.Point(i, j);
                    if (Validation.IsEmpty(p, boardMatrix))
                    {
                        possiblePossitions.Add(p);
                    }
                    else
                    {
                        if (Validation.IsOpponent(p, boardMatrix))
                        {
                            possiblePossitions.Add(p);
                        }
                        break;
                    }
                    i--;
                    j--;
                }
                i = possition.i - 1;
                j = possition.j + 1;
                while (i > -1 && j < 8)
                {
                    p = new DataStructure.Point(i, j);
                    if (Validation.IsEmpty(p, boardMatrix))
                    {
                        possiblePossitions.Add(p);
                    }
                    else
                    {
                        if (Validation.IsOpponent(p, boardMatrix))
                        {
                            possiblePossitions.Add(p);
                        }
                        break;
                    }
                    i--;
                    j++;
                }
                i = possition.i + 1;
                j = possition.j - 1;
                while (i < 8 && j > -1)
                {
                    p = new DataStructure.Point(i, j);
                    if (Validation.IsEmpty(p, boardMatrix))
                    {
                        possiblePossitions.Add(p);
                    }
                    else
                    {
                        if (Validation.IsOpponent(p, boardMatrix))
                        {
                            possiblePossitions.Add(p);
                        }
                        break;
                    }
                    i++;
                    j--;
                }
                i = possition.i + 1;
                j = possition.j + 1;
                while (i < 8 && j < 8)
                {
                    p = new DataStructure.Point(i, j);
                    if (Validation.IsEmpty(p, boardMatrix))
                    {
                        possiblePossitions.Add(p);
                    }
                    else
                    {
                        if (Validation.IsOpponent(p, boardMatrix))
                        {
                            possiblePossitions.Add(p);
                        }
                        break;
                    }
                    i++;
                    j++;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
            return(possiblePossitions);
        }
Esempio n. 15
0
 /// <summary>
 /// Checks if selectedField is in possiblePossitions
 /// </summary>
 /// <param name="possiblePossitions">list of x,y coordinates</param>
 /// <param name="selectedField">one x,y coordinate. </param>
 /// <returns>true/false based if selectedfield x,y coordinate is in the list of possiblePossitions coordinates</returns>
 public static bool IsItHighlightedField(List <DataStructure.Point> possiblePossitions, DataStructure.Point selectedField)
 {
     foreach (DataStructure.Point p in possiblePossitions)
     {
         if (p.i == selectedField.i && p.j == selectedField.j)
         {
             return(true);
         }
     }
     return(false);
 }
Esempio n. 16
0
        void SelectUnselectPiece(PictureBox oBox)
        {
            //if figure is picked conteniu.
            if (!pickedFlag)
            {
                //if player is white conteniu
                if (EnvironmentVariables.Player == DataStructure.Color.white)
                {
                    //save coordination data to variable and check what piece was picked up.
                    pickedPiece.i = myCollection[oBox.Name].i;
                    pickedPiece.j = myCollection[oBox.Name].j;
                    if (Validation.FigureColor(pickedPiece, boardMatrix) == DataStructure.Color.white)
                    {
                        pickedFlag = true;

                        switch (boardMatrix[myCollection[oBox.Name].i, myCollection[oBox.Name].j])
                        {
                        case (int)DataStructure.Figures.white_pawn:
                            possiblePossitions = pawn.FindPossibleMoves(pickedPiece, boardMatrix);
                            break;

                        case (int)DataStructure.Figures.white_rock:
                            possiblePossitions = rock.FindPossibleMoves(pickedPiece, boardMatrix);
                            break;

                        case (int)DataStructure.Figures.white_knight:
                            possiblePossitions = knight.FindPossibleMoves(pickedPiece, boardMatrix);
                            break;

                        case (int)DataStructure.Figures.white_bishop:
                            possiblePossitions = bishopcs.FindPossibleMoves(pickedPiece, boardMatrix);
                            break;

                        case (int)DataStructure.Figures.white_queen:
                            possiblePossitions = queen.FindPossibleMoves(pickedPiece, boardMatrix);
                            break;

                        case (int)DataStructure.Figures.white_king:
                            possiblePossitions = king.FindPossibleMoves(pickedPiece, boardMatrix);
                            break;

                        default:
                            break;
                        }
                        DrawBackground();
                        HighligtSelectedPiece(oBox);
                    }
                }
                else
                {
                    pickedPiece.i = myCollection[oBox.Name].i;
                    pickedPiece.j = myCollection[oBox.Name].j;
                    if (Validation.FigureColor(pickedPiece, boardMatrix) == DataStructure.Color.black)
                    {
                        pickedFlag = true;
                        switch (boardMatrix[myCollection[oBox.Name].i, myCollection[oBox.Name].j])
                        {
                        case (int)DataStructure.Figures.black_pawn:
                            possiblePossitions = pawn.FindPossibleMoves(pickedPiece, boardMatrix);
                            break;

                        case (int)DataStructure.Figures.black_rock:
                            possiblePossitions = rock.FindPossibleMoves(pickedPiece, boardMatrix);
                            break;

                        case (int)DataStructure.Figures.black_knight:
                            possiblePossitions = knight.FindPossibleMoves(pickedPiece, boardMatrix);
                            break;

                        case (int)DataStructure.Figures.black_bishop:
                            possiblePossitions = bishopcs.FindPossibleMoves(pickedPiece, boardMatrix);
                            break;

                        case (int)DataStructure.Figures.black_queen:
                            possiblePossitions = queen.FindPossibleMoves(pickedPiece, boardMatrix);
                            break;

                        case (int)DataStructure.Figures.black_king:
                            possiblePossitions = king.FindPossibleMoves(pickedPiece, boardMatrix);
                            break;

                        default:
                            break;
                        }
                        DrawBackground();
                        HighligtSelectedPiece(oBox);
                    }
                }
            }
            else
            {
                //if clicked at the same square as before, "drop figure" and clear highlights
                if (pickedPiece.i == myCollection[oBox.Name].i && pickedPiece.j == myCollection[oBox.Name].j)
                {
                    pickedPiece.i = -1;
                    pickedPiece.j = -1;

                    pickedFlag = false;
                    DrawBackground();
                }
                else
                {
                    DataStructure.Point temp = new DataStructure.Point(myCollection[oBox.Name].i, myCollection[oBox.Name].j);
                    //if it is one of highlighted fields go on. if not than
                    //if it is a empty field or not highlighted enemy piece do nothing if it is a friendly piece select it
                    if (Validation.IsItHighlightedField(possiblePossitions, temp))
                    {
                        MoveFigure(pickedPiece, temp);
                        if (boardMatrix[temp.i, temp.j] == (int)DataStructure.Figures.white_pawn ||
                            boardMatrix[temp.i, temp.j] == (int)DataStructure.Figures.black_pawn)
                        {
                            Pawn.KickingOutEnPassant(pickedPiece, temp, boardMatrix);
                            Pawn.EndofTheColumn(temp, boardMatrix);
                            Pawn.WasDoubleJump(pickedPiece, temp);
                        }
                        if (EnvironmentVariables.Player == DataStructure.Color.white)
                        {
                        }
                        pickedFlag = false;
                        DrawBackground();
                        ChangePlayer();
                    }
                    else if (Validation.IsEmpty(temp, boardMatrix))
                    {
                        //do nothing
                    }
                    else
                    {
                        if (boardMatrix[pickedPiece.i, pickedPiece.j] % 2 == (int)DataStructure.Color.white)
                        {
                            if (!Validation.IsOpponent(temp, boardMatrix))
                            {
                                pickedPiece.i = -1;
                                pickedPiece.j = -1;

                                pickedFlag = false;
                                SelectUnselectPiece(oBox);
                            }
                            //else do nothing
                        }
                        else if (boardMatrix[pickedPiece.i, pickedPiece.j] % 2 == (int)DataStructure.Color.black)
                        {
                            if (!Validation.IsOpponent(temp, boardMatrix))
                            {
                                pickedPiece.i = -1;
                                pickedPiece.j = -1;

                                pickedFlag = false;
                                SelectUnselectPiece(oBox);
                            }
                            //else do nothing
                        }
                    }
                }
            }
        }
Esempio n. 17
0
        List <DataStructure.Point> FindMovesBlack(DataStructure.Point possition, int[,] boardMatrix)
        {
            List <DataStructure.Point> possiblePossitions = new List <DataStructure.Point>();

            DataStructure.Point p;

            //if it is first move of the pawn than check 2 columns
            if (possition.i == 6)
            {//if first is empty than add it and check second
                p = new DataStructure.Point(possition.i - 1, possition.j);
                if (Validation.IsEmpty(p, boardMatrix))
                {//if second is empty add it
                    possiblePossitions.Add(p);
                    p = new DataStructure.Point(possition.i - 2, possition.j);
                    if (Validation.IsEmpty(p, boardMatrix))
                    {
                        possiblePossitions.Add(p);
                    }
                }
            }
            else
            {
                p = new DataStructure.Point(possition.i - 1, possition.j);
                if (Validation.IsEmpty(p, boardMatrix))
                {
                    possiblePossitions.Add(p);
                }
            }
            //check for corner pawns. if it is first or last the moves won`t be add together
            //with occupied possitions with friendly characters.
            p = new DataStructure.Point(possition.i - 1, possition.j - 1);
            if (Validation.IsValidPosition(p))
            {
                if (Validation.IsOpponent(p, boardMatrix))
                {
                    possiblePossitions.Add(p);
                }
                if (EnPassant.i == possition.i && EnPassant.j == possition.j - 1)
                {
                    possiblePossitions.Add(p);
                }
                if (EnPassant.i == possition.i + 1 && EnPassant.j == possition.j - 1)
                {
                    possiblePossitions.Add(p);
                }
            }
            p = new DataStructure.Point(possition.i - 1, possition.j + 1);
            if (Validation.IsValidPosition(p))
            {
                if (Validation.IsOpponent(p, boardMatrix))
                {
                    possiblePossitions.Add(p);
                }
                if (EnPassant.i == possition.i && EnPassant.j == possition.j + 1)
                {
                    possiblePossitions.Add(p);
                }
                if (EnPassant.i == possition.i + 1 && EnPassant.j == possition.j + 1)
                {
                    possiblePossitions.Add(p);
                }
            }
            return(possiblePossitions);
        }
Esempio n. 18
0
        static List <DataStructure.Point> FindMovesBlack(DataStructure.Point possition, int[,] boardMatrix)
        {
            List <DataStructure.Point> possiblePossitions = new List <DataStructure.Point>();

            DataStructure.Point p;
            for (int i = possition.i - 1; i > -1; i--)
            {
                p = new DataStructure.Point(i, possition.j);
                if (Validation.IsEmpty(p, boardMatrix))
                {
                    possiblePossitions.Add(p);
                }
                else
                {
                    if (Validation.IsOpponent(p, boardMatrix))
                    {
                        possiblePossitions.Add(p);
                    }
                    break;
                }
            }
            for (int i = possition.i + 1; i < 8; i++)
            {
                p = new DataStructure.Point(i, possition.j);
                if (Validation.IsEmpty(p, boardMatrix))
                {
                    possiblePossitions.Add(p);
                }
                else
                {
                    if (Validation.IsOpponent(p, boardMatrix))
                    {
                        possiblePossitions.Add(p);
                    }
                    break;
                }
            }
            for (int j = possition.j - 1; j > -1; j--)
            {
                p = new DataStructure.Point(possition.i, j);
                if (Validation.IsEmpty(p, boardMatrix))
                {
                    possiblePossitions.Add(p);
                }
                else
                {
                    if (Validation.IsOpponent(p, boardMatrix))
                    {
                        possiblePossitions.Add(p);
                    }
                    break;
                }
            }
            for (int j = possition.j + 1; j < 8; j++)
            {
                p = new DataStructure.Point(possition.i, j);
                if (Validation.IsEmpty(p, boardMatrix))
                {
                    possiblePossitions.Add(p);
                }
                else
                {
                    if (Validation.IsOpponent(p, boardMatrix))
                    {
                        possiblePossitions.Add(p);
                    }
                    break;
                }
            }

            return(possiblePossitions);
        }