Exemple #1
0
 public void AddTwoBags(PositionsBag bagOne, PositionsBag bagTwo)
 {
     XList.AddRange(bagOne.XList);
     XList.AddRange(bagTwo.XList);
     YList.AddRange(bagOne.YList);
     YList.AddRange(bagTwo.YList);
 }
Exemple #2
0
        private PositionsBag PossibleMovementOfQueen(int x, int y, List <List <int> > mainList)
        {
            PositionsBag bag       = new PositionsBag();
            PositionsBag bagBishop = new PositionsBag();
            PositionsBag bagRook   = new PositionsBag();

            // queen's movement is rook+bishop movement
            bagBishop = PossibleMovementOfBishop(x, y, mainList);
            bagRook   = PossibleMovementOfRook(x, y, mainList);
            bag.AddTwoBags(bagBishop, bagRook);
            return(bag);
        }
Exemple #3
0
        // Prediction of move
        public List <List <int> > GetPossibleMovement(string name, int x, int y)
        {
            List <List <int> > mainList = new List <List <int> >();

            mainList = GetAllPosOfPawns();
            PositionsBag bag   = new PositionsBag();
            string       color = "";

            foreach (Pown item in this.Pawns)
            {
                if (name == item.Name)
                {
                    color = item.Color;
                    //Role 0=pawn/1=rook/2=knight/3=bishop/king=4/queen=5
                    switch (item.Role)
                    {
                    case 0:
                        bag = PossibleMovementOfPawn(item, x, y, mainList);
                        break;

                    case 1:
                        bag = PossibleMovementOfRook(x, y, mainList);
                        break;

                    case 2:
                        bag = PossibleMovementOfKnight(x, y);
                        break;

                    case 3:
                        bag = PossibleMovementOfBishop(x, y, mainList);
                        break;

                    case 4:
                        bag = PossibleMovementOfKing(x, y, item.Color);
                        break;

                    case 5:
                        bag = PossibleMovementOfQueen(x, y, mainList);
                        break;
                    }
                }
            }
            mainList = new List <List <int> >();

            mainList.Add(bag.XList); mainList.Add(bag.YList);
            mainList = RemoveFriendlyPos(mainList, color);
            return(mainList);
        }
Exemple #4
0
        public List <List <int> > GetAllPossibleMovementAdverse(string color)
        {
            List <List <int> > mainList = new List <List <int> >();

            mainList = GetAllPosOfPawns();
            PositionsBag bag       = new PositionsBag();
            string       colorPown = "";

            foreach (Pown item in this.Pawns)
            {
                if (color != item.Color)
                {
                    colorPown = item.Color;
                    //Role 0=pawn/1=rook/2=knight/3=bishop/king=4/queen=5
                    switch (item.Role)
                    {
                    case 0:
                        bag.AddBag(PossibleMovementOfPawn(item, item.PosX, item.PosY, mainList));
                        break;

                    case 1:
                        bag.AddBag(PossibleMovementOfRook(item.PosX, item.PosY, mainList));
                        break;

                    case 2:
                        bag.AddBag(PossibleMovementOfKnight(item.PosX, item.PosY));
                        break;

                    case 3:
                        bag.AddBag(PossibleMovementOfBishop(item.PosX, item.PosY, mainList));
                        break;

                    case 4:
                        // make nothing else overflow
                        break;

                    case 5:
                        bag.AddBag(PossibleMovementOfQueen(item.PosX, item.PosY, mainList));
                        break;
                    }
                }
            }
            mainList = new List <List <int> >();

            mainList.Add(bag.XList); mainList.Add(bag.YList);
            return(mainList);
        }
Exemple #5
0
        private PositionsBag PossibleMovementOfKnight(int x, int y)
        {
            PositionsBag bag   = new PositionsBag();
            List <int>   xList = new List <int>();
            List <int>   yList = new List <int>();

            xList.Add(x + 2); yList.Add(y - 1);
            xList.Add(x + 2); yList.Add(y + 1);
            xList.Add(x + 1); yList.Add(y - 2);
            xList.Add(x - 1); yList.Add(y - 2);
            xList.Add(x - 2); yList.Add(y - 1);
            xList.Add(x - 2); yList.Add(y + 1);
            xList.Add(x - 1); yList.Add(y + 2);
            xList.Add(x + 1); yList.Add(y + 2);
            bag.XList = xList;
            bag.YList = yList;
            return(bag);
        }
Exemple #6
0
        private PositionsBag PossibleMovementOfKing(int x, int y, string colorKing)
        {
            PositionsBag bag   = new PositionsBag();
            List <int>   xList = new List <int>();
            List <int>   yList = new List <int>();

            // each movement with one scope
            for (int i = x - 1; i < x + 2; i++)
            {
                for (int j = y - 1; j < y + 2; j++)
                {
                    xList.Add(i);
                    yList.Add(j);
                }
            }
            bag.XList = xList;
            bag.YList = yList;
            return(bag);
        }
Exemple #7
0
        public void Castling(string source, string second)
        {
            //set rook and king and verificate movement for castling
            Pown         king     = new Pown();
            Pown         rook     = new Pown();
            PositionsBag bag      = new PositionsBag();
            Boolean      castling = false;

            foreach (Pown item in Pawns)
            {
                if (item.Name == source)
                {
                    if (item.Role == 1)
                    {
                        rook = item;
                    }
                    else
                    {
                        king = item;
                    }
                }

                if (item.Name == second)
                {
                    if (item.Role == 1)
                    {
                        rook = item;
                    }
                    else
                    {
                        king = item;
                    }
                }
            }
            if (king.CountMove == 0 && rook.CountMove == 0)
            {
                bag = PossibleMovementOfRook(rook.PosX, rook.PosY, GetAllPosOfPawns());
                for (int i = 0; i < bag.XList.Count; i++)
                {
                    if (king.PosX == bag.XList[i] && king.PosY == bag.YList[i])
                    {
                        castling = true;
                    }
                }
            }

            if (castling == true)
            {
                if (rook.PosX == 1)
                {
                    king.PosX = king.PosX - 2;
                    rook.PosX = rook.PosX + 3;
                }
                else
                {
                    king.PosX = king.PosX + 2;
                    rook.PosX = rook.PosX - 2;
                }
            }
            ChangePos(king.Name, king.PosX, king.PosY);
            ChangePos(rook.Name, king.PosX, king.PosY);
        }
Exemple #8
0
        private PositionsBag PossibleMovementOfBishop(int x, int y, List <List <int> > mainList)
        {
            PositionsBag bag   = new PositionsBag();
            List <int>   xList = new List <int>();
            List <int>   yList = new List <int>();

            bool northeastToken = true;
            bool southeastToken = true;
            bool northwestToken = true;
            bool southwestToken = true;

            for (int i = 1; i < 8; i++)
            {
                // Need separate calcule for each direction
                // Northeast
                if (northeastToken)
                {
                    xList.Add(x + i);
                    yList.Add(y - i);
                }
                // Southeast
                if (southeastToken)
                {
                    xList.Add(x + i);
                    yList.Add(y + i);
                }
                // Northwest
                if (northwestToken)
                {
                    xList.Add(x - i);
                    yList.Add(y - i);
                }
                // Southwest
                if (southwestToken)
                {
                    xList.Add(x - i);
                    yList.Add(y + i);
                }
                for (int j = 0; j < mainList[0].Count; j++)
                {
                    // Northeast
                    if (x + i == mainList[0][j] && mainList[1][j] == y - i)
                    {
                        northeastToken = false;
                    }
                    // Southeast
                    if (x + i == mainList[0][j] && mainList[1][j] == y + i)
                    {
                        southeastToken = false;
                    }
                    // Northwest
                    if (x - i == mainList[0][j] && mainList[1][j] == y - i)
                    {
                        northwestToken = false;
                    }
                    // Southwest
                    if (x - i == mainList[0][j] && mainList[1][j] == y + i)
                    {
                        southwestToken = false;
                    }
                }
            }
            bag.XList = xList;
            bag.YList = yList;
            return(bag);
        }
Exemple #9
0
        private PositionsBag PossibleMovementOfRook(int x, int y, List <List <int> > mainList)
        {
            PositionsBag bag         = new PositionsBag();
            List <int>   xList       = new List <int>();
            List <int>   yList       = new List <int>();
            bool         hitBoxToken = true;

            // Need separate calcule for each direction
            // West
            for (int i = x - 1; i > 0; i--)
            {
                if (hitBoxToken)
                {
                    xList.Add(i);
                    yList.Add(y);
                }
                for (int j = 0; j < mainList[0].Count; j++)
                {
                    if (y == mainList[1][j] && mainList[0][j] == i)
                    {
                        hitBoxToken = false;
                    }
                }
            }
            hitBoxToken = true;
            // East
            for (int i = x + 1; i <= 8; i++)
            {
                if (hitBoxToken)
                {
                    xList.Add(i);
                    yList.Add(y);
                }
                for (int j = 0; j < mainList[0].Count; j++)
                {
                    if (y == mainList[1][j] && mainList[0][j] == i)
                    {
                        hitBoxToken = false;
                    }
                }
            }
            hitBoxToken = true;
            // North
            for (int i = y + 1; i <= 8; i++)
            {
                if (hitBoxToken)
                {
                    xList.Add(x);
                    yList.Add(i);
                }
                for (int j = 0; j < mainList[0].Count; j++)
                {
                    if (x == mainList[0][j] && mainList[1][j] == i)
                    {
                        hitBoxToken = false;
                    }
                }
            }
            hitBoxToken = true;
            // South
            for (int i = y - 1; i > 0; i--)
            {
                if (hitBoxToken)
                {
                    xList.Add(x);
                    yList.Add(i);
                }
                for (int j = 0; j < mainList[0].Count; j++)
                {
                    if (x == mainList[0][j] && mainList[1][j] == i)
                    {
                        hitBoxToken = false;
                    }
                }
            }

            bag.XList = xList;
            bag.YList = yList;
            return(bag);
        }
Exemple #10
0
 public void AddBag(PositionsBag bag)
 {
     XList.AddRange(bag.XList);
     YList.AddRange(bag.YList);
 }
Exemple #11
0
        private PositionsBag PossibleMovementOfPawn(Pown item, int x, int y, List <List <int> > mainList)
        {
            PositionsBag bag               = new PositionsBag();
            List <int>   xList             = new List <int>();
            List <int>   yList             = new List <int>();
            bool         moveDiagonalToken = true;
            bool         twoMoveToken      = true;

            for (int i = 0; i < mainList[0].Count; i++)
            {
                if (item.Color == "black")
                {
                    //check if a pown was in diagonal
                    if (mainList[0][i] == (item.PosX + 1) && (item.PosY + 1) == mainList[1][i])
                    {
                        xList.Add(x + 1); yList.Add(y + 1);
                    }
                    if (mainList[0][i] == (item.PosX - 1) && (item.PosY + 1) == mainList[1][i])
                    {
                        xList.Add(x - 1); yList.Add(y + 1);
                    }
                    //check if a pown was in front
                    if (mainList[1][i] == (item.PosY + 1) && mainList[0][i] == item.PosX)
                    {
                        moveDiagonalToken = false;
                    }
                    if (mainList[1][i] == (item.PosY + 1) && mainList[0][i] == item.PosX)
                    {
                        moveDiagonalToken = false;
                    }
                    if (mainList[1][i] == (item.PosY + 2) && mainList[0][i] == item.PosX)
                    {
                        twoMoveToken = false;
                    }
                    if (moveDiagonalToken == true && mainList[0].Count - 1 == i)
                    {
                        xList.Add(x); yList.Add(y + 1);
                    }
                    // for two case movement
                    if (item.CountMove == 0 && twoMoveToken == true)
                    {
                        xList.Add(x); yList.Add(y + 2);
                    }
                }
                else
                {
                    //check if a pown was in diagonal
                    if (mainList[0][i] == (item.PosX + 1) && (item.PosY - 1) == mainList[1][i])
                    {
                        xList.Add(x + 1); yList.Add(y - 1);
                    }
                    if (mainList[0][i] == (item.PosX - 1) && (item.PosY - 1) == mainList[1][i])
                    {
                        xList.Add(x - 1); yList.Add(y - 1);
                    }
                    //check if a pown was in front
                    if (mainList[1][i] == (item.PosY - 1) && mainList[0][i] == item.PosX)
                    {
                        moveDiagonalToken = false;
                    }
                    if (mainList[1][i] == (item.PosY - 2) && mainList[0][i] == item.PosX)
                    {
                        twoMoveToken = false;
                    }
                    if (moveDiagonalToken == true && mainList[0].Count - 1 == i)
                    {
                        xList.Add(x); yList.Add(y - 1);
                    }
                    // for two case movement
                    if (item.CountMove == 0 && twoMoveToken == true)
                    {
                        xList.Add(x); yList.Add(y - 2);
                    }
                }
            }

            bag.XList = xList;
            bag.YList = yList;
            return(bag);
        }