📄 人机对战五子棋trydoc.cpp
字号:
for(i=0;i<15;i++)
for(j=0;j<15;j++)
{
sco1_nesw[i][j]=0;
sco1_ns[i][j]=0;
sco1_nwse[i][j]=0;
sco1_we[i][j]=0;
sco2_nesw[i][j]=0;
sco2_ns[i][j]=0;
sco2_nwse[i][j]=0;
sco2_we[i][j]=0;
sco_nesw[i][j]=0;
sco_ns[i][j]=0;
sco_nwse[i][j]=0;
sco_we[i][j]=0;
}
for(i=0;i<15;i++)
for(j=0;j<15;j++)
{
///////////////////////////////////////////nwse////////////////////////////////////
if(condition[i][j]==EMPTY&&condition[i+1][j+1]!=EMPTY) //se-defend
{
for(m=i+1,n=j+1,k1=0,count=1;m<=i+4&&condition[m][n]!=COMPUTER&&m<15&&n<15;m++,n++,k1++)
{
if(condition[m][n]==PEOPLE)
{
sco1_nwse[i][j]+=count;
count++;
}
}
if(((m==15||n==15)&&condition[m][n]==PEOPLE)||condition[m][n]==COMPUTER)
sco1_nwse[i][j]-=(count-2);
}
if(condition[i][j]==EMPTY&&condition[i-1][j-1]!=EMPTY) //nw-defend
{
for(m=i-1,n=j-1,k2=0,count=1;m>=i-4&&condition[m][n]!=COMPUTER&&m>0&&n>0;m--,n--,k2++)
{
if(condition[m][n]==PEOPLE)
{
sco1_nwse[i][j]+=count;
count++;
}
}
if(((m==0||n==0)&&condition[m][n]==PEOPLE)||condition[m][n]==COMPUTER)
sco1_nwse[i][j]-=(count-2);
}
if(k1+k2<4) sco1_nwse[i][j]=0;
if(condition[i][j]==EMPTY&&condition[i+1][j+1]!=EMPTY) //se-attack
{
for(m=i+1,n=j+1,k1=0,count=1;m<=i+4&&condition[m][n]!=PEOPLE&&m<15&&n<15;m++,n++,k1++)
{
if(condition[m][n]==COMPUTER)
{
sco2_nwse[i][j]+=count;
count++;
}
}
if(((m==15||n==15)&&condition[m][n]==COMPUTER)||condition[m][n]==PEOPLE)
sco2_nwse[i][j]-=(count-2);
}
if(condition[i][j]==EMPTY&&condition[i-1][j-1]!=EMPTY) //nw-attack
{
for(m=i-1,n=j-1,k2=0,count=1;m>=i-4&&condition[m][n]!=PEOPLE&&m>0&&n>0;m--,n--,k2++)
{
if(condition[m][n]==COMPUTER)
{
sco2_nwse[i][j]+=count;
count++;
}
}
if(((m==0||n==0)&&condition[m][n]==COMPUTER)||condition[m][n]==PEOPLE)
sco2_nwse[i][j]-=(count-2);
}
if(k1+k2<4) sco2_nwse[i][j]=0;
sco_nwse[i][j]=maxx(sco1_nwse[i][j],sco2_nwse[i][j]);
////////////////////////////////////ns/////////////////////////////////////////////
if(condition[i][j]==EMPTY&&condition[i+1][j]!=EMPTY) //s-defend
{
for(m=i+1,n=j,k1=0,count=1;m<=i+4&&condition[m][n]!=COMPUTER&&m<15;m++,k1++)
{
if(condition[m][n]==PEOPLE)
{
sco1_ns[i][j]+=count;
count++;
}
}
if(((m==15)&&condition[m][n]==PEOPLE)||condition[m][n]==COMPUTER)
sco1_ns[i][j]-=(count-2);
}
if(condition[i][j]==EMPTY&&condition[i-1][j]!=EMPTY) //n-defend
{
for(m=i-1,n=j,k2=0,count=1;m>=i-4&&condition[m][n]!=COMPUTER&&m>0;m--,k2++)
{
if(condition[m][n]==PEOPLE)
{
sco1_ns[i][j]+=count;
count++;
}
}
if(((m==0)&&condition[m][n]==PEOPLE)||condition[m][n]==COMPUTER)
sco1_ns[i][j]-=(count-2);
}
if(k1+k2<4) sco1_ns[i][j]=0;
if(condition[i][j]==EMPTY&&condition[i+1][j]!=EMPTY) //s-attack
{
for(m=i+1,n=j,k1=0,count=1;m<=i+4&&condition[m][n]!=PEOPLE&&m<15;m++,k1++)
{
if(condition[m][n]==COMPUTER)
{
sco2_ns[i][j]+=count;
count++;
}
}
if(((m==15)&&condition[m][n]==COMPUTER)||condition[m][n]==PEOPLE)
sco2_ns[i][j]-=(count-2);
}
if(condition[i][j]==EMPTY&&condition[i-1][j]!=EMPTY) //n-attack
{
for(m=i-1,n=j,k2=0,count=1;m>=i-4&&condition[m][n]!=PEOPLE&&m>0;m--,k2++)
{
if(condition[m][n]==COMPUTER)
{
sco2_ns[i][j]+=count;
count++;
}
}
if(((m==0)&&condition[m][n]==COMPUTER)||condition[m][n]==PEOPLE)
sco2_ns[i][j]-=(count-2);
}
if(k1+k2<4) sco2_ns[i][j]=0;
sco_ns[i][j]=maxx(sco1_ns[i][j],sco2_ns[i][j]);
//////////////////////////////////////we//////////////////////////////////////////
if(condition[i][j]==EMPTY&&condition[i][j+1]!=EMPTY) //e-defend
{
for(m=i,n=j+1,k1=0,count=1;n<=j+4&&condition[m][n]!=COMPUTER&&n<15;n++,k1++)
{
if(condition[m][n]==PEOPLE)
{
sco1_we[i][j]+=count;
count++;
}
}
if(((n==15)&&condition[m][n]==PEOPLE)||condition[m][n]==COMPUTER)
sco1_we[i][j]-=(count-2);
}
if(condition[i][j]==EMPTY&&condition[i][j-1]!=EMPTY) //w-defend
{
for(m=i,n=j-1,k2=0,count=1;n>=j-4&&condition[m][n]!=COMPUTER&&n>0;n--,k2++)
{
if(condition[m][n]==PEOPLE)
{
sco1_we[i][j]+=count;
count++;
}
}
if(((n==0)&&condition[m][n]==PEOPLE)||condition[m][n]==COMPUTER)
sco1_we[i][j]-=(count-2);
}
if(k1+k2<4) sco1_we[i][j]=0;
if(condition[i][j]==EMPTY&&condition[i][j+1]!=EMPTY) //e-attack
{
for(m=i,n=j+1,k1=0,count=1;n<=j+4&&condition[m][n]!=PEOPLE&&n<15;n++,k1++)
{
if(condition[m][n]==COMPUTER)
{
sco2_we[i][j]+=count;
count++;
}
}
if(((n==15)&&condition[m][n]==COMPUTER)||condition[m][n]==PEOPLE)
sco2_we[i][j]-=(count-2);
}
if(condition[i][j]==EMPTY&&condition[i][j-1]!=EMPTY) //w-attack
{
for(m=i,n=j-1,k2=0,count=1;n>=j-4&&condition[m][n]!=PEOPLE&&n>0;n--,k2++)
{
if(condition[m][n]==COMPUTER)
{
sco2_we[i][j]+=count;
count++;
}
}
if(((n==0)&&condition[m][n]==COMPUTER)||condition[m][n]==PEOPLE)
sco2_we[i][j]-=(count-2);
}
if(k1+k2<4) sco2_we[i][j]=0;
sco_we[i][j]=maxx(sco1_we[i][j],sco2_we[i][j]);
//////////////////////////////////nesw////////////////////////////////////////////
if(condition[i][j]==EMPTY&&condition[i+1][j-1]!=EMPTY) //sw-defend
{
for(m=i+1,n=j-1,k1=0,count=1;n>=j-4&&condition[m][n]!=COMPUTER&&m<15&&n>0;m++,n--,k1++)
{
if(condition[m][n]==PEOPLE)
{
sco1_nesw[i][j]+=count;
count++;
}
}
if(((m==15||n==0)&&condition[m][n]==PEOPLE)||condition[m][n]==COMPUTER)
sco1_nesw[i][j]-=(count-2);
}
if(condition[i][j]==EMPTY&&condition[i-1][j+1]!=EMPTY) //ne-defend
{
for(m=i-1,n=j+1,k2=0,count=1;n<=j+4&&condition[m][n]!=COMPUTER&&m>0&&n<15;m--,n++,k2++)
{
if(condition[m][n]==PEOPLE)
{
sco1_nesw[i][j]+=count;
count++;
}
}
if(((m==0||n==15)&&condition[m][n]==PEOPLE)||condition[m][n]==COMPUTER)
sco1_nesw[i][j]-=(count-2);
}
if(k1+k2<4) sco1_nesw[i][j]=0;
if(condition[i][j]==EMPTY&&condition[i+1][j-1]!=EMPTY) //sw-attack
{
for(m=i+1,n=j-1,k1=0,count=1;n>=j-4&&condition[m][n]!=PEOPLE&&m<15&&n>0;m++,n--,k1++)
{
if(condition[m][n]==COMPUTER)
{
sco2_nesw[i][j]+=count;
count++;
}
}
if(((m==15||n==0)&&condition[m][n]==COMPUTER)||condition[m][n]==PEOPLE)
sco2_nesw[i][j]-=(count-2);
}
if(condition[i][j]==EMPTY&&condition[i-1][j+1]!=EMPTY) //ne-attack
{
for(m=i-1,n=j+1,k2=0,count=1;n<=j+4&&condition[m][n]!=PEOPLE&&m>0&&n<15;m--,n++,k2++)
{
if(condition[m][n]==COMPUTER)
{
sco2_nesw[i][j]+=count;
count++;
}
}
if(((m==0||n==15)&&condition[m][n]==COMPUTER)||condition[m][n]==PEOPLE)
sco2_nesw[i][j]-=(count-2);
}
if(k1+k2<4) sco2_nesw[i][j]=0;
sco_nesw[i][j]=maxx(sco1_nesw[i][j],sco2_nesw[i][j]);
if(this->maxx(sco_nesw[i][j],sco_ns[i][j],sco_nwse[i][j],sco_we[i][j])>max1)
{
max1=this->maxx(sco_nesw[i][j],sco_ns[i][j],sco_nwse[i][j],sco_we[i][j]);
max1_x=i;
max1_y=j;
}
}
point.x=max1_x;
point.y=max1_y;
number++; //记录电脑走的步数
return point;
}*/
CPoint CTryDoc::ComputerThink1()
{
CPoint point;
int i,j,m,n,ccount,max1=0,max1_x,max1_y;
for(i=0;i<15;i++)
for(j=0;j<15;j++)
{
if(condition[i][j]==EMPTY)
{
for(m=i,n=j,ccount=5;m>=0&&n>=0&&ccount>0;m--,n--,ccount--) //nw
{
switch(condition[m][n])
{
case EMPTY: break;
case PEOPLE: sco_nw[i][j]+=ccount; break;
case COMPUTER: sco_nw[i][j]-=ccount; break;
default: break;
}
}
for(m=i,n=j,ccount=5;m<15&&n<15&&ccount>0;m++,n++,ccount--) //se
{
switch(condition[m][n])
{
case EMPTY: break;
case PEOPLE: sco_se[i][j]+=ccount; break;
case COMPUTER: sco_se[i][j]-=ccount; break;
default: break;
}
}
for(m=i,n=j,ccount=5;m<15&&n>=0&&ccount>0;m++,n--,ccount--)
{
switch(condition[m][n])
{
case EMPTY: break;
case PEOPLE: sco_ne[i][j]+=ccount; break;
case COMPUTER: sco_ne[i][j]-=ccount; break;
default: break;
}
}
for(m=i,n=j,ccount=5;m>=0&&n<15&&ccount>0;m--,n++,ccount--)
{
switch(condition[m][n])
{
case EMPTY: break;
case PEOPLE: sco_sw[i][j]+=ccount; break;
case COMPUTER: sco_sw[i][j]-=ccount; break;
default: break;
}
}
for(m=i,n=j,ccount=5;n>=0&&ccount>0;n--,ccount--)
{
switch(condition[m][n])
{
case EMPTY: break;
case PEOPLE: sco_n[i][j]+=ccount; break;
case COMPUTER: sco_n[i][j]-=ccount; break;
default: break;
}
}
for(m=i,n=j,ccount=5;n<15&&ccount>0;n++,ccount--)
{
switch(condition[m][n])
{
case EMPTY: break;
case PEOPLE: sco_s[i][j]+=ccount; break;
case COMPUTER: sco_s[i][j]-=ccount; break;
default: break;
}
}
for(m=i,n=j,ccount=5;m>=0&&ccount>0;m--,ccount--)
{
switch(condition[m][n])
{
case EMPTY: break;
case PEOPLE: sco_w[i][j]+=ccount; break;
case COMPUTER: sco_w[i][j]-=ccount; break;
default: break;
}
}
for(m=i,n=j,ccount=5;m<15&&ccount>0;m++,ccount--)
{
switch(condition[m][n])
{
case EMPTY: break;
case PEOPLE: sco_e[i][j]+=ccount; break;
case COMPUTER: sco_e[i][j]-=ccount; break;
default: break;
}
}
}
if(this->maxx(abs(sco_n[i][j]),abs(sco_s[i][j]),abs(sco_w[i][j]),abs(sco_e[i][j]),abs(sco_nw[i][j]),abs(sco_se[i][j]),abs(sco_ne[i][j]),abs(sco_sw[i][j]),abs(sco_nw[i][j]+sco_se[i][j]),abs(sco_ne[i][j]+sco_sw[i][j]),abs(sco_w[i][j]+sco_e[i][j]),abs(sco_n[i][j]+sco_s[i][j]))>max1)
{
max1=this->maxx(abs(sco_n[i][j]),abs(sco_s[i][j]),abs(sco_w[i][j]),abs(sco_e[i][j]),abs(sco_nw[i][j]),abs(sco_se[i][j]),abs(sco_ne[i][j]),abs(sco_sw[i][j]),abs(sco_nw[i][j]+sco_se[i][j]),abs(sco_ne[i][j]+sco_sw[i][j]),abs(sco_w[i][j]+sco_e[i][j]),abs(sco_n[i][j]+sco_s[i][j]));
max1_x=i;
max1_y=j;
}
sco_nw[i][j]=0;
sco_se[i][j]=0;
sco_ne[i][j]=0;
sco_sw[i][j]=0;
sco_n[i][j]=0;
sco_s[i][j]=0;
sco_w[i][j]=0;
sco_e[i][j]=0;
}
point.x=max1_x;
point.y=max1_y;
number++; //记录电脑走的步数
return point;
}
int CTryDoc::maxx(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l)
{
int max1=a;
if(max1<b) max1=b;
if(max1<c) max1=c;
if(max1<d) max1=d;
if(max1<e) max1=e;
if(max1<f) max1=f;
if(max1<g) max1=g;
if(max1<h) max1=h;
if(max1<i) max1=i;
if(max1<j) max1=j;
if(max1<k) max1=k;
if(max1<l) max1=l;
return max1;
}
BOOL CTryDoc::IsGameOver()
{
int i,j,countw=0,countb=0,ccount,m,n;
for(i=0;i<15;i++)
for(j=0;j<15;j++)
{
if(condition[i][j]==1||condition[i][j]==2)
{
for(m=i,n=j,ccount=5,countw=0,countb=0;n>=0,ccount>0;n--,ccount--) //n
{
if(condition[m][n]==1) countw++;
else if(condition[m][n]==2) countb++;
}
if(countw==5)
{
return TRUE;
}
else if(countb==5)
{
return TRUE;
}
for(m=i,n=j,ccount=5,countw=0,countb=0;m<15,n>=0,ccount>0;m++,n--,ccount--) //ne
{
if(condition[m][n]==1) countw++;
else if(condition[m][n]==2) countb++;
}
if(countw==5)
{
return TRUE;
}
else if(countb==5)
{
return TRUE;
}
for(m=i,n=j,ccount=5,countw=0,countb=0;m<15,ccount>0;m++,ccount--) //e
{
if(condition[m][n]==1) countw++;
else if(condition[m][n]==2) countb++;
}
if(countw==5)
{
return TRUE;
}
else if(countb==5)
{
return TRUE;
}
for(m=i,n=j,ccount=5,countw=0,countb=0;m<15,n<15,ccount>0;m++,n++,ccount--) //se
{
if(condition[m][n]==1) countw++;
else if(condition[m][n]==2) countb++;
}
if(countw==5)
{
return TRUE;
}
else if(countb==5)
{
return TRUE;
}
}
}
return FALSE;
}
int CTryDoc::Get_number()
{
return number;
}
void CTryDoc::ResetData()
{
for(int i=0;i<15;i++)
for(int j=0;j<15;j++)
{
condition[i][j]=EMPTY;
sco_nesw[i][j]=0;
sco_ns[i][j]=0;
sco_nwse[i][j]=0;
sco_we[i][j]=0;
sco_n[i][j]=0;
sco_s[i][j]=0;
sco_w[i][j]=0;
sco_e[i][j]=0;
sco_ne[i][j]=0;
sco_sw[i][j]=0;
sco_se[i][j]=0;
sco_nw[i][j]=0;
}
decided=FALSE;
number=0;
}
int CTryDoc::maxx(int a, int b)
{
if(a>b)
return a;
else
return b;
}
int CTryDoc::maxx(int a, int b, int c, int d)
{
int max=a;
if(b>max) max=b;
if(c>max) max=c;
if(d>max) max=d;
return max;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -