public IMove EvaluatePosition()
        {
            CheckersMove move = new CheckersMove(null, false, this.currentPlayer.GetPlayerID());
            if (this.gameOver)
            {
                if (currentPlayer.GetPlayerID() == Winner)
                {

                    move.SetMoveScore(double.MaxValue );
                }
                else
                {
                    move.SetMoveScore(double.MinValue);

                }
                return move as IMove;
            }
            double finalScore = 0;

            if (currentPlayer.GetPlayerID() == 1)
            {
                finalScore = this.whitePieceCount * this.weights[0] + this.whiteKingcount * this.weights[1]
                    - this.blackKingCount * this.weights[1] - this.blackPieceCount * this.weights[0];
                finalScore += (whiteSidePieces - blackSidePieces) * this.weights[2];
                if (whitePieceCount > 0)
                    finalScore += (-whiteKingBlocked) * weights[3];
                if (blackPieceCount > 0)
                    finalScore += (blackKingBlocked) * weights[3];
                finalScore += (-whiteDogHole) * weights[4];
                finalScore += (blackDogHole) * weights[4];
                finalScore += this.legalMoves.Count * weights[5];
                finalScore += weights[6];
                finalScore += -trappedWhiteKing * weights[7];
                finalScore += trappedBlackKing * weights[7];
                finalScore += -whiteDustHole * weights[8];
                finalScore += blackDustHole * weights[8];
                finalScore += whiteKingCentered * weights[9];
                finalScore += -blackKingCentered * weights[9];
                finalScore += whitePieceCentered * weights[10];
                finalScore += -blackPieceCentered * weights[10];
                move.SetMoveScore(finalScore);
            }
            else
            {

                finalScore = -this.whitePieceCount * this.weights[0] - this.whiteKingcount * this.weights[1]
                    + this.blackKingCount * this.weights[1] + this.blackPieceCount * this.weights[0];
                finalScore += (blackSidePieces - whiteSidePieces) * this.weights[2];
                if (whitePieceCount > 0)
                    finalScore += (whiteKingBlocked) * weights[3];
                if (blackPieceCount > 0)
                    finalScore += (-blackKingBlocked) * weights[3];
                finalScore += (whiteDogHole) * weights[4];
                finalScore += (-blackDogHole) * weights[4];
                finalScore += this.legalMoves.Count * weights[5];
                finalScore += weights[6];
                finalScore += trappedWhiteKing * weights[7];
                finalScore += -trappedBlackKing * weights[7];
                finalScore += whiteDustHole * weights[8];
                finalScore += -blackDustHole * weights[8];
                finalScore += -whiteKingCentered * weights[9];
                finalScore += blackKingCentered * weights[9];
                finalScore += -whitePieceCentered * weights[10];
                finalScore += blackPieceCentered * weights[10];
                move.SetMoveScore(finalScore);
            }
            return move as IMove;
        }