#include "ComputerPlayer.h"
void ComputerPlayer::initial_score_chess()
{
int i,j;
for(i = 0; i < chess_N; i ++)
{
for(j = 0; j < chess_N; j ++)
{
int xright = chess_N - i - 1;
int ydown = chess_N - j - 1;
if(i < j)
{
if(xright < ydown)
{
if(i < xright)
{
score_chess[i][j] = i+1;
}
else
{
score_chess[i][j] = xright+1;
}
}
else
{
if(i < ydown)
{
score_chess[i][j] = i+1;
}
else
{
score_chess[i][j] = ydown+1;
}
}
}
else
{
if(xright < ydown)
{
if(j < xright)
{
score_chess[i][j] = j+1;
}
else
{
score_chess[i][j] = xright+1;
}
}
else
{
if(j < ydown)
{
score_chess[i][j] = j+1;
}
else
{
score_chess[i][j] = ydown+1;
}
}
}
}
}
}
/*
求每个点的得分
*/
//int ComputerPlayer::checkBestPoint_score(int x, int y, int locate[chess_N][chess_N])
void ComputerPlayer::checkBestPoint_score(int locate[chess_N][chess_N])
{
/*int score;
int startX = ((x-4) >= 0)?(x-4):0;
int startY = ((y-4) >= 0)?(x-4):0;
int endX = ((x+4) < 14)?(x+4):14;
int endY = ((y+4) < 14)?(y+4):14;
int arrayX[9] = {-1};
int arrayY[9] = {-1};
int arrayZ[9] = {-1};
int arrayF[9] = {-1};
//活四
int array_huosi[] = {0,2,2,2,2,0};
//眠四
int array_miansi_1[] = {0,2,2,2,2,1};
int array_miansi_2[] = {1,2,2,2,2,0};
int array_miansi_3[] = {2,0,2,2,2};
int array_miansi_4[] = {2,2,0,2,2};
int array_miansi_5[] = {2,2,2,0,2};
//活三
int array_huosan_1[] = {0,2,2,2,0,0};
int array_huosan_2[] = {0,0,2,2,2,0};
int array_huosan_3[] = {0,2,0,2,2,0};
int array_huosan_4[] = {0,2,2,0,2,0};
//眠三
int array_miansan_1[] = {0,0,2,2,2,1};
int array_miansan_2[] = {0,2,0,2,2,1};
int array_miansan_3[] = {0,2,2,0,2,1};
int array_miansan_4[] = {2,0,0,2,2};
int array_miansan_5[] = {2,0,2,0,2};
int array_miansan_6[] = {2,2,0,0,2};
int array_miansan_7[] = {1,0,2,2,2,0,1};
//活二
int array_huoer_1[] = {0,0,2,2,0};
int array_huoer_2[] = {0,2,2,0,0};
int array_huoer_3[] = {0,2,0,2,0};
int array_huoer_4[] = {0,2,0,0,2,0};
//眠二
int array_mianer_1[] = {0,0,0,2,2,1};
int array_mianer_2[] = {1,2,2,0,0,0};
int array_mianer_3[] = {0,0,2,0,2,1};
int array_mianer_4[] = {1,2,0,2,0,0};
int array_mianer_6[] = {0,2,0,0,2,1};
int array_mianer_7[] = {1,2,0,0,2,0};
int array_mianer_8[] = {2,0,0,0,2};
int array_mianer_9[] = {1,0,2,0,2,0,1};
int array_mianer_10[] = {1,0,2,2,0,0,1};
int array_mianer_11[] = {1,0,0,0,2,2,1};
//死四
int array_sisi[] = {1,2,2,2,2,1};
//死三
int array_sisan[] = {1,2,2,2,1};
//死二
int array_sier[] = {1,2,2,1};
//提取横向棋子状态到数组arrayX
for(int i = startX; i < endX; i++)
{
int j = 0;
if(i == x)
{
arrayX[j++] = 2;
}
else
{
arrayX[j++] = locate[i][y];
}
}
//提取纵向棋子状态到数组arrayY
for(int i = startY; i < endY; i++)
{
int j = 0;
if(i == y)
{
arrayX[j++] = 2;
}
else
{
arrayY[j++] = locate[x][i];
}
}
//提取正斜方向棋子状态到数组arrayZ
for(int i = startY, j = startY; i < endX && j < endY; i++,j++)
{
int k = 0;
if(i == x && j == y)
{
arrayZ[k++] = 2;
}
else
{
arrayZ[k++] = locate[i][j];
}
}
//提取反斜方向棋子状态到数组arrayF
for(int i = endX, j = startY; i >=startX && j < startY; i--,j++)
{
int k = 0;
if(i == x && j == y)
{
arrayZ[k++] = 2;
}
else
{
arrayZ[k++] = locate[i][j];
}
}
//棋型匹配,返回1或0
if(matchShape(arrayX, array_huosi) || matchShape(arrayY, array_huosi) || matchShape(arrayZ, array_huosi) ||matchShape(arrayF, array_huosi))
{
score = 100000;
}else if(matchShape(arrayX, array_miansi_1)||matchShape(arrayX, array_miansi_2)||matchShape(arrayX, array_miansi_3)||matchShape(arrayX, array_miansi_4)||matchShape(arrayX, array_miansi_5)
||matchShape(arrayY, array_miansi_1)||matchShape(arrayY, array_miansi_2)||matchShape(arrayY, array_miansi_3)||matchShape(arrayY, array_miansi_4)||matchShape(arrayY, array_miansi_5)
||matchShape(arrayZ, array_miansi_1)||matchShape(arrayZ, array_miansi_2)||matchShape(arrayZ, array_miansi_3)||matchShape(arrayZ, array_miansi_4)||matchShape(arrayZ, array_miansi_5)
||matchShape(arrayF, array_miansi_1)||matchShape(arrayF, array_miansi_2)||matchShape(arrayF, array_miansi_3)||matchShape(arrayF, array_miansi_4)||matchShape(arrayF, array_miansi_5))
{
score = score + 10000;
}else if(matchShape(arrayX, array_huosan_1)||matchShape(arrayX, array_huosan_2)||matchShape(arrayX, array_huosan_3)||matchShape(arrayX, array_huosan_4)
||matchShape(arrayY, array_huosan_1)||matchShape(arrayY, array_huosan_2)||matchShape(arrayY, array_huosan_3)||matchShape(arrayY, array_huosan_4)
||matchShape(arrayZ, array_huosan_1)||matchShape(arrayZ, array_huosan_2)||matchShape(arrayZ, array_huosan_3)||matchShape(arrayZ, array_huosan_4)
||matchShape(arrayF, array_huosan_1)||matchShape(arrayF, array_huosan_2)||matchShape(arrayF, array_huosan_3)||matchShape(arrayF, array_huosan_4))
{
score = score + 10000;
}*/
int x,y,i,m,n,lianzi1=0,lianzi2=0,life=0;
for(int p = 0; p < 15; p++)
{
for(int q = 0; q < 15; q++)
{
score[p][q] = 0;
}
}
for(x=0; x<=14; x++)
{
for(y=0; y<=14; y++)
{
if(locate[x][y]==0)
{
for(m=-1; m<=1; m++)
{
for(n=-1; n<=1; n++)
{
if(m!=0 || n!=0)
{
for(i=1; i<=4; i++)
{
if( x+i*m>=0 && x+i*m<=14 && y+i*n>=0 && y+i*n<=14 && locate[x+i*m][y+i*n]==1 )
{
lianzi1++;
}
else if(locate[x+i*m][y+i*n]==0)
{
life++;
break;
}
else
{
break;
}
}
for(i=-1; i>=-4; i--)
{
if( x+i*m>=0 && x+i*m<=14 && y+i*n>=0 && y+i*n<=14 && locate[x+i*m][y+i*n]==1 )
{
lianzi1++;
}
else if(locate[x+i*m][y+i*n]==0)
{
life++;
break;
}
else
{
break;
}
}
if(lianzi1==1)
{
score[x][y]+=1;
}
else if(lianzi1==2)
{
if(life==1)
{
score[x][y]+=5;
}
else if(life==2)
{
score[x][y]+=10;
}
}
else if(lianzi1==3)
{
if(life==1)
{
score[x][y]+=20;
}
评论0