注:代码放在我的百度云网盘(引擎文件放在界面程序里使用)
评估函数
int nPlayTurn = p0->z -1; //该位置代表的玩家
score[nPlayTurn] += PosValue[i][j];
switch (m_nRecord[i][j][k])
{
case FIVE://五连
m_nRecordCount[nPlayTurn][FIVE]++;
score[nPlayTurn] += 100000;
break;
case FOUR://活四
m_nRecordCount[nPlayTurn][FOUR]++;
score[nPlayTurn] += 10000;
break;
case THREE + STHREE://活三眠三
m_nRecordCount[nPlayTurn][THREE]++;
m_nRecordCount[nPlayTurn][STHREE]++;
score[nPlayTurn] += 1000;
break;
case TWO * 2://两个活二(这种情况只会出现在分析棋型时为单独一子的情况)
m_nRecordCount[nPlayTurn][TWO] += 2;
score[nPlayTurn] += 100;
break;
case THREE * 2://
m_nRecordCount[nPlayTurn][THREE] += 2;
score[nPlayTurn] += 5000;
break;
case SFOUR://冲四
m_nRecordCount[nPlayTurn][SFOUR]++;
score[nPlayTurn] += 500;
break;
case THREE://活三
m_nRecordCount[nPlayTurn][THREE]++;
score[nPlayTurn] += 200;
break;
case STHREE://眠三
m_nRecordCount[nPlayTurn][STHREE]++;
score[nPlayTurn] += 50;
break;
case TWO://活二
m_nRecordCount[nPlayTurn][TWO]++;
score[nPlayTurn] += 5;
break;
default:
break;
修改成这样在原来的基础上比没有多大变化
另一个修改策略
int evaluate(int player)
{
//pipeOut("DEBUG evaluate");
int i, j, k;
//初始化 位置分析记录表
for (i = 0;i < width;i++)
{
for (j = 0; j < height; j++)
{
m_nRecord[i][j][0] = TOBEANALYZE;
m_nRecord[i][j][1] = TOBEANALYZE;
m_nRecord[i][j][2] = TOBEANALYZE;
m_nRecord[i][j][3] = TOBEANALYZE;
}
}
//初始化 各棋型 总数记录表
for (i = 0;i < 2;i++)
{
for (j = 0;j< 7;j++)
{
m_nRecordCount[i][j] = 0;
}
}
//pipeOut("DEBUG before analyze");
//分析统计横、竖、左斜、右斜的棋型
for (i = 0; i< width;i++)
{
for (j = 0; j<height;j++)
{
for (int k = 0; k < 4; k++)
{
int s = diroff[k];
Psquare p0 = Square(i, j);
if (m_nRecord[i][j][k] == TOBEANALYZE && p0->z != EMPTY_MOVE)//该位置上面的棋子不为空
{
ChessAnalyzeData* data = new ChessAnalyzeData();//记录棋行相关统计信息的结构
AnalysisLine(p0, s, data);