有没有更好的六子棋估值算法??

这个估值算法能用..但是有没有更好的方式去估值

class Evaluation
{
public:
    //我方路数和敌方路数
    int MyRoadNumber[7], EnemyRoadNumber[7];
    //评估函数
    int Evaluate(char CheckerBoard[ROUTES][ROUTES], char side)
    {
        for (int i = 0; i < 7; i++)
        {
            MyRoadNumber[i] = 0;
            EnemyRoadNumber[i] = 0;
        }
        //各路数的的价值
        int ScoreOfRoad[7] = { 0,20,80,150,800,1000,100000 };
        //估值分数
        int score = 0;
        //初始化敌我双方的路数信息!(是否有必要进行初始化?)
        for (int i = 0; i < 7; i++)
        {
            MyRoadNumber[i] = 0;
            EnemyRoadNumber[i] = 0;
        }
        //各个方向进行路数的计算
        AnalysisHorizon(CheckerBoard, side);
        AnalysisLeft(CheckerBoard, side);
        AnalysisRight(CheckerBoard, side);
        AnalysisVertical(CheckerBoard, side);
        /*
        for(int i = 0; i < 7 ; i++)
        {
            cout<<i<<"myroad"<<MyRoadNumber[i]<<endl;
            cout<<i<<"enemyroad"<<EnemyRoadNumber[i]<<endl;
        }
        */
        //MyRoadNumber[1] /= 4;
        //EnemyRoadNumber[1] /= 4;
        //分数统计

        for (int i = 1; i < 7; i++)
        {
            //cout<<i<<":"<<MyRoadNumber[i]<<"  "<<EnemyRoadNumber[i]<<endl;
            score += MyRoadNumber[i] * ScoreOfRoad[i] - EnemyRoadNumber[i] * ScoreOfRoad[i];
        }

        if (side == BLACKSIDE)
            return score;
        else
            return -score;
    }
private:
    //计算水平方向双方每路具有的条数
    int AnalysisHorizon(char CheckerBoard[ROUTES][ROUTES], char side)
    {
        for (int i = 0; i < ROUTES; i++)
        {
            for (int j = 0; j < ROUTES - 5; j++)
            {
                int number = CheckerBoard[i][j] + CheckerBoard[i][j + 1]
                    + CheckerBoard[i][j + 2] + CheckerBoard[i][j + 3]
                    + CheckerBoard[i][j + 4] + CheckerBoard[i][j + 5];
                //cout<<"AnalysisHorizon number:"<<number<<endl;
                if (number == 0 || (number > 6 && number % 7 != 0))
                {
                    continue;
                }
                if (number < 7)
                {
                    //如果side相反的话会在Evaluate上进行反转
                    //白棋的相应路数增加
                    EnemyRoadNumber[number]++;
                }
                else
                {
                    //黑棋的相应路数增加
                    MyRoadNumber[number / 7]++;
                }
            }
        }
        //如果敌我双方四路和五路的数量大约0 返回1
        if (side == BLACKSIDE && MyRoadNumber[4] + MyRoadNumber[5] > 0)
            return 1;
        if (side == WHITESIDE && EnemyRoadNumber[4] + EnemyRoadNumber[5] > 0)
            return 1;
        return 0;

    }
    //计算垂直方向双方每路具有的条数
    int AnalysisVertical(char CheckerBoard[ROUTES][ROUTES], char side)
    {
        for (int i = 0; i < ROUTES - 5; i++)
        {
            for (int j = 0; j < ROUTES; j++)
            {
                //考虑的类型不周全 需要更改
                int number = CheckerBoard[i][j] + CheckerBoard[i + 1][j]
                    + CheckerBoard[i + 2][j] + CheckerBoard[i + 3][j]
                    + CheckerBoard[i + 4][j] + CheckerBoard[i + 5][j];
                //cout<<"AnalysisVertical number:"<<number<<endl;
                if (number == 0 || (number > 6 && number % 7 != 0))
                {
                    continue;
                }
                if (number < 7)
                {
                    //如果side相反的话会在Evaluate上进行反转
                    //白棋的相应路数增加
                    EnemyRoadNumber[number]++;
                }
                else
                {
                    //黑棋的相应路数增加
                    MyRoadNumber[number / 7]++;
                }
            }
        }
        //如果敌我双方四路和五路的数量大约0 返回1
        if (side == BLACKSIDE && MyRoadNumber[4] + MyRoadNumber[5] > 0)
            return 1;
        if (side == WHITESIDE && EnemyRoadNumber[4] + EnemyRoadNumber[5] > 0)
            return 1;
        return 0;

    }
    //计算左斜方向双方每路具有的条数
    int AnalysisLeft(char CheckerBoard[ROUTES][ROUTES], char side)
    {
        for (int i = 0; i < ROUTES - 5; i++)
        {
            for (int j = 0; j < ROUTES - 5; j++)
            {
                //考虑的类型不周全 需要更改
                int number = CheckerBoard[i][j] + CheckerBoard[i + 1][j + 1]
                    + CheckerBoard[i + 2][j + 2] + CheckerBoard[i + 3][j + 3]
                    + CheckerBoard[i + 4][j + 4] + CheckerBoard[i + 5][j + 5];
                //cout<<"AnalysisLeft number:"<<number<<endl;
                if (number == 0 || (number > 6 && number % 7 != 0))
                {
                    continue;
                }
                if (number < 7)
                {
                    //如果side相反的话会在Evaluate上进行反转
                    //白棋的相应路数增加
                    EnemyRoadNumber[number]++;
                }
                else
                {
                    //黑棋的相应路数增加
                    MyRoadNumber[number / 7]++;
                }
            }
        }
        //如果敌我双方四路和五路的数量大约0 返回1
        if (side == BLACKSIDE && MyRoadNumber[4] + MyRoadNumber[5] > 0)
            return 1;
        if (side == WHITESIDE && EnemyRoadNumber[4] + EnemyRoadNumber[5] > 0)
            return 1;
        return 0;
    }
    //计算右斜方向双方每路具有的条数
    int AnalysisRight(char CheckerBoard[ROUTES][ROUTES], char side)
    {
        for (int i = 0; i < ROUTES; i++)
        {
            for (int j = 0; j < ROUTES - 5; j++)
            {
                //考虑的类型不周全 需要更改
                int number = CheckerBoard[ROUTES - j - 1][j] + CheckerBoard[ROUTES - j - 2][j + 1]
                    + CheckerBoard[ROUTES - j - 3][j + 2] + CheckerBoard[ROUTES - j - 4][j + 3]
                    + CheckerBoard[ROUTES - j - 5][j + 4] + CheckerBoard[ROUTES - j - 6][j + 5];
                //cout<<"AnalysisRight number:"<<number<<endl;
                if (number == 0 || (number > 6 && number % 7 != 0))
                {
                    continue;
                }
                if (number < 7)
                {
                    //如果side相反的话会在Evaluate上进行反转
                    //白棋的相应路数增加
                    EnemyRoadNumber[number]++;
                }
                else
                {
                    //黑棋的相应路数增加
                    MyRoadNumber[number / 7]++;
                }
            }
        }
        //如果敌我双方四路和五路的数量大约0 返回1
        if (side == BLACKSIDE && MyRoadNumber[4] + MyRoadNumber[5] > 0)
            return 1;
        if (side == WHITESIDE && EnemyRoadNumber[4] + EnemyRoadNumber[5] > 0)
            return 1;
        return 0;
    }

};

drawWhiteChess 或drawBlackChess 函数 是否有局部变量越界的情况?可以把这两个函数注释后再运行