Ejemplo n.º 1
0
        public GameInfo MakeAMove(CheckerBoardArray currentCheckerBoard, int callingPlayer)
        {
            Random          random            = new Random();
            List <GameInfo> possibleNextMoves = new List <GameInfo>();
            GameInfo        currentGame       = new GameInfo();

            currentGame = currentGame.Serialization(currentCheckerBoard);


            var SameBoardState = (from GI in db.gameInfo
                                  where GI.square1 == currentGame.square1 && GI.square3 == currentGame.square3 && GI.square5 == currentGame.square5 && GI.square7 == currentGame.square7 && GI.square10 == currentGame.square10 && GI.square12 == currentGame.square1 &&
                                  GI.square14 == currentGame.square14 && GI.square16 == currentGame.square16 && GI.square17 == currentGame.square17 && GI.square19 == currentGame.square19 && GI.square21 == currentGame.square21 && GI.square23 == currentGame.square23 &&
                                  GI.square26 == currentGame.square26 && GI.square28 == currentGame.square28 && GI.square30 == currentGame.square30 && GI.square32 == currentGame.square32 && GI.square33 == currentGame.square33 && GI.square35 == currentGame.square35 &&
                                  GI.square37 == currentGame.square37 && GI.square39 == currentGame.square39 && GI.square42 == currentGame.square42 && GI.square44 == currentGame.square44 && GI.square46 == currentGame.square46 && GI.square48 == currentGame.square49 &&
                                  GI.square51 == currentGame.square51 && GI.square53 == currentGame.square53 && GI.square55 == currentGame.square55 && GI.square58 == currentGame.square58 && GI.square60 == currentGame.square60 && GI.square62 == currentGame.square62 &&
                                  GI.square64 == currentGame.square64
                                  select GI).ToList();

            if (SameBoardState != null)
            {
                List <CheckerBoardArray> possibleBoardStates = new List <CheckerBoardArray>();
                foreach (var item in SameBoardState)
                {
                    int nextTurn = item.turn + 1;
                    possibleNextMoves = (from PNM in db.gameInfo where PNM.gameNumber == item.gameNumber && PNM.turn == nextTurn && PNM.winner == callingPlayer select PNM).ToList();
                    foreach (var item2 in possibleNextMoves)
                    {
                        possibleBoardStates.Add(currentCheckerBoard.serialization(item2));
                    }
                }
            }


            if (random.Next(0, 5) > 1)
            {
                switch (possibleNextMoves.Count)
                {
                case 0:
                    break;

                case 1:

                    currentGame = possibleNextMoves[0];
                    break;

                default:
                    MinMaxEvaluation(possibleNextMoves);
                    break;
                }
            }
            else
            {
            }

            return(currentGame);
        }
Ejemplo n.º 2
0
        public CheckerBoardArray ShallowCopy()
        {
            CheckerBoardArray copy = new CheckerBoardArray();

            copy.gameID = this.gameID;
            copy.turn   = this.turn;

            for (int i = 0; i < 8; i++)
            {
                for (int ii = 0; ii < 8; ii++)
                {
                    copy.SelectedStatus[i][ii] = this.SelectedStatus[i][ii];
                    copy.CheckerBoard[i][ii]   = this.CheckerBoard[i][ii];
                }
            }
            return(copy);
        }
Ejemplo n.º 3
0
        //public virtual List<GameInfo> gameInfo { get; set; }

        public GameInfo Serialization(CheckerBoardArray checkerBoard)
        {
            this.turn       = checkerBoard.turn;
            this.gameNumber = checkerBoard.gameID;
            this.square1    = checkerBoard.CheckerBoard[0][0];
            this.square3    = checkerBoard.CheckerBoard[0][2];
            this.square5    = checkerBoard.CheckerBoard[0][4];
            this.square7    = checkerBoard.CheckerBoard[0][6];
            this.square10   = checkerBoard.CheckerBoard[1][1];
            this.square12   = checkerBoard.CheckerBoard[1][3];
            this.square14   = checkerBoard.CheckerBoard[1][5];
            this.square16   = checkerBoard.CheckerBoard[1][7];
            this.square17   = checkerBoard.CheckerBoard[2][0];
            this.square19   = checkerBoard.CheckerBoard[2][2];
            this.square21   = checkerBoard.CheckerBoard[2][4];
            this.square23   = checkerBoard.CheckerBoard[2][6];
            this.square26   = checkerBoard.CheckerBoard[3][1];
            this.square28   = checkerBoard.CheckerBoard[3][3];
            this.square30   = checkerBoard.CheckerBoard[3][5];
            this.square32   = checkerBoard.CheckerBoard[3][7];
            this.square33   = checkerBoard.CheckerBoard[4][0];
            this.square35   = checkerBoard.CheckerBoard[4][2];
            this.square37   = checkerBoard.CheckerBoard[4][4];
            this.square39   = checkerBoard.CheckerBoard[4][6];
            this.square42   = checkerBoard.CheckerBoard[5][1];
            this.square44   = checkerBoard.CheckerBoard[5][3];
            this.square46   = checkerBoard.CheckerBoard[5][5];
            this.square48   = checkerBoard.CheckerBoard[5][7];
            this.square49   = checkerBoard.CheckerBoard[6][0];
            this.square51   = checkerBoard.CheckerBoard[6][2];
            this.square53   = checkerBoard.CheckerBoard[6][4];
            this.square55   = checkerBoard.CheckerBoard[6][6];
            this.square58   = checkerBoard.CheckerBoard[7][1];
            this.square60   = checkerBoard.CheckerBoard[7][3];
            this.square62   = checkerBoard.CheckerBoard[7][5];
            this.square64   = checkerBoard.CheckerBoard[7][7];
            return(this);
        }
Ejemplo n.º 4
0
 public void StoreAMove(CheckerBoardArray CheckerBoard)
 {
 }
Ejemplo n.º 5
0
        public List <CheckerBoardArray> GetPossibleMoves(CheckerBoardArray CurrentGame, int CallingPlayer)
        {
            List <CheckerBoardArray> PossibleMoves = new List <CheckerBoardArray>();

            switch (CallingPlayer)
            {
            case 1:
                for (int i = 0; i < 8; i++)
                {
                    for (int ii = 0; ii < 8; ii++)
                    {
                        if (CurrentGame.CheckerBoard[i][ii] > 0)
                        {
                            //diagonal right unpromoted or king
                            if (i <= 6 && ii <= 6 && CurrentGame.CheckerBoard[i + 1][ii + 1] == 0)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i + 1][ii + 1] = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }
                            //diagonal left Unpromoted or promoted
                            if (i <= 6 && ii >= 1 && CurrentGame.CheckerBoard[i + 1][ii - 1] == 0)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i + 1][ii - 1] = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }
                            //diagonal right back  king
                            if (i >= 1 && ii <= 6 && CurrentGame.CheckerBoard[i - 1][ii + 1] == 0 && CurrentGame.CheckerBoard[i][ii] == 2)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i - 1][ii + 1] = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }
                            //diagonal left back king
                            if (i >= 1 && ii >= 1 && CurrentGame.CheckerBoard[i - 1][ii - 1] == 0 && CurrentGame.CheckerBoard[i][ii] == 2)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i - 1][ii - 1] = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal Jump right Unpromoted or promoted
                            if (i <= 5 && ii <= 5 && CurrentGame.CheckerBoard[i + 1][ii + 1] < 0 && CurrentGame.CheckerBoard[i + 2][ii + 2] == 0)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i + 1][ii + 1] = 0;
                                PossibleMove.CheckerBoard[i + 2][ii + 2] = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal jump left Unpromoted or promoted
                            if (i <= 5 && ii >= 2 && CurrentGame.CheckerBoard[i + 1][ii - 1] < 0 && CurrentGame.CheckerBoard[i + 2][ii - 2] == 0)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i + 1][ii - 1] = 0;
                                PossibleMove.CheckerBoard[i + 2][ii - 2] = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal Jump right king back
                            if (i >= 2 && ii <= 5 && CurrentGame.CheckerBoard[i - 1][ii + 1] < 0 && CurrentGame.CheckerBoard[i - 2][ii + 2] == 0 && CurrentGame.CheckerBoard[i][ii] == 2)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i - 1][ii + 1] = 0;
                                PossibleMove.CheckerBoard[i - 2][ii + 2] = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal jump left king back
                            if (i >= 2 && ii >= 2 && CurrentGame.CheckerBoard[i - 1][ii - 1] < 0 && CurrentGame.CheckerBoard[i - 2][ii - 2] == 0 && CurrentGame.CheckerBoard[i][ii] == 2)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i - 1][ii - 1] = 0;
                                PossibleMove.CheckerBoard[i - 2][ii - 2] = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal double Jump right Unpromoted or promoted
                            if (i <= 3 && ii <= 3 && CurrentGame.CheckerBoard[i + 1][ii + 1] < 0 && CurrentGame.CheckerBoard[i + 2][ii + 2] == 0 && CurrentGame.CheckerBoard[i + 3][ii + 3] < 0 && CurrentGame.CheckerBoard[i + 4][ii + 4] == 0)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i + 1][ii + 1] = 0;
                                PossibleMove.CheckerBoard[i + 2][ii + 2] = 0;
                                PossibleMove.CheckerBoard[i + 3][ii + 3] = 0;
                                PossibleMove.CheckerBoard[i + 4][ii + 4] = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal double Jump left Unpromoted or promoted
                            if (i <= 3 && ii >= 4 && CurrentGame.CheckerBoard[i + 1][ii - 1] < 0 && CurrentGame.CheckerBoard[i + 2][ii - 2] == 0 && CurrentGame.CheckerBoard[i + 3][ii - 3] < 0 && CurrentGame.CheckerBoard[i + 4][ii - 4] == 0)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i + 1][ii - 1] = 0;
                                PossibleMove.CheckerBoard[i + 2][ii - 2] = 0;
                                PossibleMove.CheckerBoard[i + 3][ii - 3] = 0;
                                PossibleMove.CheckerBoard[i + 4][ii - 4] = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal double Jump right then middle Unpromoted or promoted
                            if (i <= 3 && ii <= 5 && CurrentGame.CheckerBoard[i + 1][ii + 1] < 0 && CurrentGame.CheckerBoard[i + 2][ii + 2] == 0 && CurrentGame.CheckerBoard[i + 3][ii + 1] < 0 && CurrentGame.CheckerBoard[i + 4][ii] == 0)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i + 1][ii + 1] = 0;
                                PossibleMove.CheckerBoard[i + 2][ii + 2] = 0;
                                PossibleMove.CheckerBoard[i + 3][ii + 1] = 0;
                                PossibleMove.CheckerBoard[i + 4][ii]     = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal double Jump left then middle Unpromoted or promoted
                            if (i <= 3 && ii >= 2 && CurrentGame.CheckerBoard[i + 1][ii - 1] < 0 && CurrentGame.CheckerBoard[i + 2][ii - 2] == 0 && CurrentGame.CheckerBoard[i + 3][ii - 1] < 0 && CurrentGame.CheckerBoard[i + 4][ii] == 0)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i + 1][ii - 1] = 0;
                                PossibleMove.CheckerBoard[i + 2][ii - 2] = 0;
                                PossibleMove.CheckerBoard[i + 3][ii - 1] = 0;
                                PossibleMove.CheckerBoard[i + 4][ii]     = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal double Jump right back king
                            if (i >= 4 && ii <= 3 && CurrentGame.CheckerBoard[i - 1][ii + 1] < 0 && CurrentGame.CheckerBoard[i - 2][ii + 2] == 0 && CurrentGame.CheckerBoard[i - 3][ii + 3] < 0 && CurrentGame.CheckerBoard[i - 4][ii + 4] == 0 && CurrentGame.CheckerBoard[i][ii] == 2)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i - 1][ii + 1] = 0;
                                PossibleMove.CheckerBoard[i - 2][ii + 2] = 0;
                                PossibleMove.CheckerBoard[i - 3][ii + 3] = 0;
                                PossibleMove.CheckerBoard[i - 4][ii + 4] = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal double Jump left back king
                            if (i >= 4 && ii >= 4 && CurrentGame.CheckerBoard[i - 1][ii - 1] < 0 && CurrentGame.CheckerBoard[i - 2][ii - 2] == 0 && CurrentGame.CheckerBoard[i - 3][ii - 3] < 0 && CurrentGame.CheckerBoard[i - 4][ii - 4] == 0 && CurrentGame.CheckerBoard[i][ii] == 2)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i - 1][ii - 1] = 0;
                                PossibleMove.CheckerBoard[i - 2][ii - 2] = 0;
                                PossibleMove.CheckerBoard[i - 1][ii - 3] = 0;
                                PossibleMove.CheckerBoard[i - 1][ii - 4] = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal double Jump right then middle back king
                            if (i <= 3 && ii <= 5 && CurrentGame.CheckerBoard[i + 1][ii + 1] < 0 && CurrentGame.CheckerBoard[i + 2][ii + 2] == 0 && CurrentGame.CheckerBoard[i + 3][ii + 1] < 0 && CurrentGame.CheckerBoard[i + 4][ii] == 0 && CurrentGame.CheckerBoard[i][ii] == 2)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i + 1][ii + 1] = 0;
                                PossibleMove.CheckerBoard[i + 2][ii + 2] = 0;
                                PossibleMove.CheckerBoard[i + 3][ii + 1] = 0;
                                PossibleMove.CheckerBoard[i + 4][ii]     = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal double Jump left then middle back king
                            if (i <= 3 && ii >= 2 && CurrentGame.CheckerBoard[i + 1][ii - 1] < 0 && CurrentGame.CheckerBoard[i + 2][ii - 2] == 0 && CurrentGame.CheckerBoard[i + 3][ii - 1] < 0 && CurrentGame.CheckerBoard[i + 4][ii] == 0 && CurrentGame.CheckerBoard[i][ii] == 2)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i + 1][ii - 1] = 0;
                                PossibleMove.CheckerBoard[i + 2][ii - 2] = 0;
                                PossibleMove.CheckerBoard[i + 3][ii - 1] = 0;
                                PossibleMove.CheckerBoard[i + 4][ii]     = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal double Jump right front sideways King
                            if (i <= 5 && ii <= 3 && CurrentGame.CheckerBoard[i + 1][ii + 1] < 0 && CurrentGame.CheckerBoard[i + 2][ii + 2] == 0 && CurrentGame.CheckerBoard[i + 1][ii + 3] < 0 && CurrentGame.CheckerBoard[i][ii + 4] == 0 && CurrentGame.CheckerBoard[i][ii] == 2)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i + 1][ii + 1] = 0;
                                PossibleMove.CheckerBoard[i + 2][ii + 2] = 0;
                                PossibleMove.CheckerBoard[i + 1][ii + 3] = 0;
                                PossibleMove.CheckerBoard[i][ii + 4]     = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal double Jump left right sideways king
                            if (i <= 3 && ii >= 4 && CurrentGame.CheckerBoard[i + 1][ii - 1] < 0 && CurrentGame.CheckerBoard[i + 2][ii - 2] == 0 && CurrentGame.CheckerBoard[i + 1][ii - 3] < 0 && CurrentGame.CheckerBoard[i][ii - 4] == 0 && CurrentGame.CheckerBoard[i][ii] == 2)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i + 1][ii - 1] = 0;
                                PossibleMove.CheckerBoard[i + 2][ii - 2] = 0;
                                PossibleMove.CheckerBoard[i + 1][ii - 3] = 0;
                                PossibleMove.CheckerBoard[i][ii - 4]     = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal double Jump right back sideways King
                            if (i >= 2 && ii <= 3 && CurrentGame.CheckerBoard[i - 1][ii + 1] < 0 && CurrentGame.CheckerBoard[i - 2][ii + 2] == 0 && CurrentGame.CheckerBoard[i - 1][ii + 3] < 0 && CurrentGame.CheckerBoard[i][ii + 4] == 0 && CurrentGame.CheckerBoard[i][ii] == 2)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i - 1][ii + 1] = 0;
                                PossibleMove.CheckerBoard[i - 2][ii + 2] = 0;
                                PossibleMove.CheckerBoard[i - 1][ii + 3] = 0;
                                PossibleMove.CheckerBoard[i][ii + 4]     = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal double Jump left back sideways king
                            if (i >= 2 && ii >= 4 && CurrentGame.CheckerBoard[i - 1][ii - 1] < 0 && CurrentGame.CheckerBoard[i - 2][ii - 2] == 0 && CurrentGame.CheckerBoard[i - 1][ii - 3] < 0 && CurrentGame.CheckerBoard[i][ii - 4] == 0 && CurrentGame.CheckerBoard[i][ii] == 2)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i - 1][ii - 1] = 0;
                                PossibleMove.CheckerBoard[i - 2][ii - 2] = 0;
                                PossibleMove.CheckerBoard[i - 1][ii - 3] = 0;
                                PossibleMove.CheckerBoard[i][ii - 4]     = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }
                        }
                    }
                }
                break;

            case -1:
                for (int i = 0; i < 8; i++)
                {
                    for (int ii = 0; ii < 8; ii++)
                    {
                        if (CurrentGame.CheckerBoard[i][ii] < 0)
                        {
                            //diagonal blue right unpromoted or king
                            if (i >= 1 && ii <= 6 && CurrentGame.CheckerBoard[i - 1][ii + 1] == 0)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i - 1][ii + 1] = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }
                            //diagonal blue left Unpromoted or promoted
                            if (i >= 1 && ii >= 1 && CurrentGame.CheckerBoard[i - 1][ii - 1] == 0)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i - 1][ii - 1] = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal blue right back  king
                            if (i <= 6 && ii <= 6 && CurrentGame.CheckerBoard[i + 1][ii + 1] == 0 && CurrentGame.CheckerBoard[i][ii] == -2)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i + 1][ii + 1] = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal blue left back king
                            if (i <= 6 && ii >= 1 && CurrentGame.CheckerBoard[i + 1][ii - 1] == 0 && CurrentGame.CheckerBoard[i][ii] == -2)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i + 1][ii - 1] = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal blue Jump right Unpromoted or promoted
                            if (i >= 2 && ii <= 5 && CurrentGame.CheckerBoard[i - 1][ii + 1] > 0 && CurrentGame.CheckerBoard[i - 2][ii + 2] == 0)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i - 1][ii + 1] = 0;
                                PossibleMove.CheckerBoard[i - 2][ii + 2] = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal jump left Unpromoted or promoted
                            if (i >= 2 && ii >= 2 && CurrentGame.CheckerBoard[i - 1][ii - 1] > 0 && CurrentGame.CheckerBoard[i - 2][ii - 2] == 0)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i - 1][ii - 1] = 0;
                                PossibleMove.CheckerBoard[i - 2][ii - 2] = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal Jump right king back
                            if (i <= 5 && ii <= 5 && CurrentGame.CheckerBoard[i + 1][ii + 1] > 0 && CurrentGame.CheckerBoard[i + 2][ii + 2] == 0 && CurrentGame.CheckerBoard[i][ii] == -2)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i + 1][ii + 1] = 0;
                                PossibleMove.CheckerBoard[i + 2][ii + 2] = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal jump left king back
                            if (i <= 5 && ii >= 2 && CurrentGame.CheckerBoard[i + 1][ii - 1] > 0 && CurrentGame.CheckerBoard[i + 2][ii - 2] == 0 && CurrentGame.CheckerBoard[i][ii] == -2)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i + 1][ii - 1] = 0;
                                PossibleMove.CheckerBoard[i + 2][ii - 2] = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal double Jump right Unpromoted or promoted
                            if (i >= 4 && ii <= 3 && CurrentGame.CheckerBoard[i - 1][ii + 1] > 0 && CurrentGame.CheckerBoard[i - 2][ii + 2] == 0 && CurrentGame.CheckerBoard[i - 3][ii + 3] > 0 && CurrentGame.CheckerBoard[i - 4][ii + 4] == 0)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i - 1][ii + 1] = 0;
                                PossibleMove.CheckerBoard[i - 2][ii + 2] = 0;
                                PossibleMove.CheckerBoard[i - 3][ii + 3] = 0;
                                PossibleMove.CheckerBoard[i - 4][ii + 4] = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal double Jump left Unpromoted or promoted
                            if (i >= 4 && ii >= 4 && CurrentGame.CheckerBoard[i - 1][ii - 1] > 0 && CurrentGame.CheckerBoard[i - 2][ii - 2] == 0 && CurrentGame.CheckerBoard[i - 3][ii - 3] > 0 && CurrentGame.CheckerBoard[i - 4][ii - 4] == 0)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i - 1][ii - 1] = 0;
                                PossibleMove.CheckerBoard[i - 2][ii - 2] = 0;
                                PossibleMove.CheckerBoard[i - 3][ii - 3] = 0;
                                PossibleMove.CheckerBoard[i - 4][ii - 4] = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal double Jump right then middle Unpromoted or promoted
                            if (i >= 4 && ii <= 5 && CurrentGame.CheckerBoard[i - 1][ii + 1] > 0 && CurrentGame.CheckerBoard[i - 2][ii + 2] == 0 && CurrentGame.CheckerBoard[i - 3][ii + 1] > 0 && CurrentGame.CheckerBoard[i - 4][ii] == 0)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i - 1][ii + 1] = 0;
                                PossibleMove.CheckerBoard[i - 2][ii + 2] = 0;
                                PossibleMove.CheckerBoard[i - 3][ii + 1] = 0;
                                PossibleMove.CheckerBoard[i - 4][ii]     = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal double Jump left then middle Unpromoted or promoted
                            if (i >= 4 && ii >= 2 && CurrentGame.CheckerBoard[i - 1][ii - 1] > 0 && CurrentGame.CheckerBoard[i - 2][ii - 2] == 0 && CurrentGame.CheckerBoard[i - 3][ii - 1] > 0 && CurrentGame.CheckerBoard[i - 4][ii] == 0)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i - 1][ii - 1] = 0;
                                PossibleMove.CheckerBoard[i - 2][ii - 2] = 0;
                                PossibleMove.CheckerBoard[i - 3][ii - 1] = 0;
                                PossibleMove.CheckerBoard[i - 4][ii]     = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal double Jump right back king
                            if (i <= 3 && ii <= 3 && CurrentGame.CheckerBoard[i + 1][ii + 1] > 0 && CurrentGame.CheckerBoard[i + 2][ii + 2] == 0 && CurrentGame.CheckerBoard[i + 3][ii + 3] > 0 && CurrentGame.CheckerBoard[i + 4][ii + 4] == 0 && CurrentGame.CheckerBoard[i][ii] == -2)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i + 1][ii + 1] = 0;
                                PossibleMove.CheckerBoard[i + 2][ii + 2] = 0;
                                PossibleMove.CheckerBoard[i + 3][ii + 3] = 0;
                                PossibleMove.CheckerBoard[i + 4][ii + 4] = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal double Jump left back king
                            if (i <= 3 && ii >= 4 && CurrentGame.CheckerBoard[i + 1][ii - 1] > 0 && CurrentGame.CheckerBoard[i + 2][ii - 2] == 0 && CurrentGame.CheckerBoard[i + 3][ii - 3] > 0 && CurrentGame.CheckerBoard[i + 4][ii - 4] == 0 && CurrentGame.CheckerBoard[i][ii] == -2)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i + 1][ii - 1] = 0;
                                PossibleMove.CheckerBoard[i + 2][ii - 2] = 0;
                                PossibleMove.CheckerBoard[i + 1][ii - 3] = 0;
                                PossibleMove.CheckerBoard[i + 1][ii - 4] = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }
                            //diagonal double Jump right then middle back king
                            if (i <= 3 && ii <= 5 && CurrentGame.CheckerBoard[i + 1][ii + 1] > 0 && CurrentGame.CheckerBoard[i + 2][ii + 2] == 0 && CurrentGame.CheckerBoard[i + 3][ii + 1] > 0 && CurrentGame.CheckerBoard[i + 4][ii] == 0 && CurrentGame.CheckerBoard[i][ii] == -2)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i + 1][ii + 1] = 0;
                                PossibleMove.CheckerBoard[i + 2][ii + 2] = 0;
                                PossibleMove.CheckerBoard[i + 3][ii + 1] = 0;
                                PossibleMove.CheckerBoard[i + 4][ii]     = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal double Jump left then middle back king
                            if (i <= 3 && ii >= 2 && CurrentGame.CheckerBoard[i + 1][ii - 1] > 0 && CurrentGame.CheckerBoard[i + 2][ii - 2] == 0 && CurrentGame.CheckerBoard[i + 3][ii - 1] > 0 && CurrentGame.CheckerBoard[i + 4][ii] == 0 && CurrentGame.CheckerBoard[i][ii] == -2)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i + 1][ii - 1] = 0;
                                PossibleMove.CheckerBoard[i + 2][ii - 2] = 0;
                                PossibleMove.CheckerBoard[i + 3][ii - 1] = 0;
                                PossibleMove.CheckerBoard[i + 4][ii]     = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal double Jump right front sideways King
                            if (i <= 5 && ii <= 3 && CurrentGame.CheckerBoard[i + 1][ii + 1] > 0 && CurrentGame.CheckerBoard[i + 2][ii + 2] == 0 && CurrentGame.CheckerBoard[i + 1][ii + 3] > 0 && CurrentGame.CheckerBoard[i][ii + 4] == 0 && CurrentGame.CheckerBoard[i][ii] == -2)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i + 1][ii + 1] = 0;
                                PossibleMove.CheckerBoard[i + 2][ii + 2] = 0;
                                PossibleMove.CheckerBoard[i + 1][ii + 3] = 0;
                                PossibleMove.CheckerBoard[i][ii + 4]     = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal double Jump left right sideways king
                            if (i <= 3 && ii >= 4 && CurrentGame.CheckerBoard[i + 1][ii - 1] > 0 && CurrentGame.CheckerBoard[i + 2][ii - 2] == 0 && CurrentGame.CheckerBoard[i + 1][ii - 3] > 0 && CurrentGame.CheckerBoard[i][ii - 4] == 0 && CurrentGame.CheckerBoard[i][ii] == -2)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i + 1][ii - 1] = 0;
                                PossibleMove.CheckerBoard[i + 2][ii - 2] = 0;
                                PossibleMove.CheckerBoard[i + 1][ii - 3] = 0;
                                PossibleMove.CheckerBoard[i][ii - 4]     = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal double Jump right back sideways King
                            if (i >= 2 && ii <= 3 && CurrentGame.CheckerBoard[i - 1][ii + 1] > 0 && CurrentGame.CheckerBoard[i - 2][ii + 2] == 0 && CurrentGame.CheckerBoard[i - 1][ii + 3] > 0 && CurrentGame.CheckerBoard[i][ii + 4] == 0 && CurrentGame.CheckerBoard[i][ii] == -2)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i - 1][ii + 1] = 0;
                                PossibleMove.CheckerBoard[i - 2][ii + 2] = 0;
                                PossibleMove.CheckerBoard[i - 1][ii + 3] = 0;
                                PossibleMove.CheckerBoard[i][ii + 4]     = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }

                            //diagonal double Jump left back sideways king
                            if (i >= 2 && ii >= 4 && CurrentGame.CheckerBoard[i - 1][ii - 1] > 0 && CurrentGame.CheckerBoard[i - 2][ii - 2] == 0 && CurrentGame.CheckerBoard[i - 1][ii - 3] > 0 && CurrentGame.CheckerBoard[i][ii - 4] == 0 && CurrentGame.CheckerBoard[i][ii] == -2)
                            {
                                CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy();
                                PossibleMove.turn   = CurrentGame.turn + 1;
                                PossibleMove.gameID = CurrentGame.gameID;
                                PossibleMove.CheckerBoard[i - 1][ii - 1] = 0;
                                PossibleMove.CheckerBoard[i - 2][ii - 2] = 0;
                                PossibleMove.CheckerBoard[i - 1][ii - 3] = 0;
                                PossibleMove.CheckerBoard[i][ii - 4]     = PossibleMove.CheckerBoard[i][ii];
                                PossibleMove.CheckerBoard[i][ii]         = 0;
                                PossibleMoves.Add(PossibleMove);
                            }
                        }
                    }
                }
                break;

            default:
                break;
            }

            PossibleMoves = FindKings(PossibleMoves);
            if (PossibleMoves.Count == 0)
            {
            }

            return(PossibleMoves);
        }