📄 wzqpcgo.cpp
字号:
else
AfxMessageBox("DownBaizhi()函数有错误!");
}
else
{
if(QiPan[y][x].Qizhi==0)
{
QiPan[y][x].Qizhi=2;
dc->BitBlt(x*29+7,y*29+7,28,28,mask,0,0,MERGEPAINT);
dc->BitBlt(x*29+7,y*29+7,28,28,qzb,0,0,SRCAND);
}
else
AfxMessageBox("DownBaizhi()函数有错误!");
}
}
void WzqPcGo::Downheizhi(int x,int y)//电脑下黑子
{
if(Model==2)
{
if(flag)
{
flag=FALSE;
if(QiPan[x][y].Qizhi==0)
{
QiPan[x][y].Qizhi=1;
dc->BitBlt(y*29+7,x*29+7,28,28,mask,0,0,MERGEPAINT);
dc->BitBlt(y*29+7,x*29+7,28,28,qzh,0,0,SRCAND);
}
else
AfxMessageBox("Downheizhi()函数有错误!");
}
else
{
if(QiPan[y][x].Qizhi==0)
{
QiPan[y][x].Qizhi=1;
dc->BitBlt(x*29+7,y*29+7,28,28,mask,0,0,MERGEPAINT);
dc->BitBlt(x*29+7,y*29+7,28,28,qzh,0,0,SRCAND);
}
else
AfxMessageBox("Downheizhi()函数有错误!");
}
}
else if(QiPan[x][y].Qizhi==0)
{
QiPan[x][y].Qizhi=1;
dc->BitBlt(y*29+7,x*29+7,28,28,mask,0,0,MERGEPAINT);
dc->BitBlt(y*29+7,x*29+7,28,28,qzh,0,0,SRCAND);
}
else
AfxMessageBox("Downheizhi()函数有错误!");
}
BOOL WzqPcGo::WhoWin(int x,int y)
{
int count=0;
int winflag=0;
if(QiPan[x][y].Qizhi==2)
{
for(int left=y-1;count!=4;left--)
{
if(y==0)
break;
else if(left==-1)
break;
else if(QiPan[x][left].Qizhi==0 || QiPan[x][left].Qizhi==1)
break;
else
{
QiPan[x][left].color=1;
winflag++;
}
}
count=0;
for(int right=y+1;count!=4;right++)
{
if(y==14)
break;
else if(right==15)
break;
else if(QiPan[x][right].Qizhi==0 || QiPan[x][right].Qizhi==1)
break;
else
{
QiPan[x][right].color=1;
winflag++;
}
}
if(winflag>=4)
{
QiPan[x][y].color=1;
return TRUE;
}
else
winflag=0;
count=0;
//-----------------------------------------------------------------------
for(int up=x-1;count!=4;up--)
{
if(x==0)
break;
else if(up==-1)
break;
else if(QiPan[up][y].Qizhi==0 || QiPan[up][y].Qizhi==1)
break;
else
{
QiPan[up][y].color=2;
winflag++;
}
}
count=0;
for(int down=x+1;count!=4;down++)
{
if(x==14)
break;
else if(down==15)
break;
else if(QiPan[down][y].Qizhi==0 ||QiPan[down][y].Qizhi==1)
break;
else
{
QiPan[down][y].color=2;
winflag++;
}
}
if(winflag>=4)
{
QiPan[x][y].color=2;
return TRUE;
}
else
winflag=0;
count=0;
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
for(int xleftup=x-1,yleftup=y-1;count!=4;xleftup--,yleftup--)
{
if(x==0 || y==0)
break;
else if(xleftup==-1 || yleftup==-1)
break;
else if(QiPan[xleftup][yleftup].Qizhi==0 || QiPan[xleftup][yleftup].Qizhi==1)
break;
else
{
QiPan[xleftup][yleftup].color=3;
winflag++;
}
}
count=0;
for(int xrightdown=x+1,yrightdown=y+1;count!=4;xrightdown++,yrightdown++)
{
if(x==14 || y==14)
break;
else if(xrightdown==15 || yrightdown==15)
break;
else if(QiPan[xrightdown][yrightdown].Qizhi==0 || QiPan[xrightdown][yrightdown].Qizhi==1)
break;
else
{
QiPan[xrightdown][yrightdown].color=3;
winflag++;
}
}
if(winflag>=4)
{
QiPan[x][y].color=3;
return TRUE;
}
else
winflag=0;
count=0;
//-----------------------------------------------------------------------
for(int xrightup=x-1,yrightup=y+1;count!=4;xrightup--,yrightup++)
{
if(x==0 || y==14)
break;
else if(xrightup==-1 || yrightup==15)
break;
else if(QiPan[xrightup][yrightup].Qizhi==0 || QiPan[xrightup][yrightup].Qizhi==1)
break;
else
{
QiPan[xrightup][yrightup].color=4;
winflag++;
}
}
count=0;
for(int xleftdown=x+1,yleftudown=y-1;count!=4;xleftdown++,yleftudown--)
{
if(x==14 || y==0)
break;
else if(xleftdown==15 || yleftudown==-1)
break;
else if(QiPan[xleftdown][yleftudown].Qizhi==0 || QiPan[xleftdown][yleftudown].Qizhi==1)
break;
else
{
QiPan[xleftdown][yleftudown].color=4;
winflag++;
}
}
if(winflag>=4)
{
QiPan[x][y].color=4;
return TRUE;
}
else
winflag=0;
count=0;
for(int i=0;i<=14;i++)
for(int j=0;j<=14;j++)
QiPan[i][j].color=0;
}
//================================================================================
//================================================================================
else if(QiPan[x][y].Qizhi==1)
{
for(int left=y-1;count!=4;left--)
{
if(y==0)
break;
else if(left==-1)
break;
else if(QiPan[x][left].Qizhi==0 || QiPan[x][left].Qizhi==2)
break;
else
{
QiPan[x][left].color=1;
winflag++;
}
}
count=0;
for(int right=y+1;count!=4;right++)
{
if(y==14)
break;
else if(right==15)
break;
else if(QiPan[x][right].Qizhi==0 || QiPan[x][right].Qizhi==2)
break;
else
{
QiPan[x][right].color=1;
winflag++;
}
}
if(winflag>=4)
{
QiPan[x][y].color=1;
return TRUE;
}
else
winflag=0;
count=0;
//-----------------------------------------------------------------------
for(int up=x-1;count!=4;up--)
{
if(x==0)
break;
else if(up==-1)
break;
else if(QiPan[up][y].Qizhi==0 || QiPan[up][y].Qizhi==2)
break;
else
{
QiPan[up][y].color=2;
winflag++;
}
}
count=0;
for(int down=x+1;count!=4;down++)
{
if(x==14)
break;
else if(down==15)
break;
else if(QiPan[down][y].Qizhi==0 || QiPan[down][y].Qizhi==2)
break;
else
{
QiPan[down][y].color=2;
winflag++;
}
}
if(winflag>=4)
{
QiPan[x][y].color=2;
return TRUE;
}
else
winflag=0;
count=0;
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
for(int xleftup=x-1,yleftup=y-1;count!=4;xleftup--,yleftup--)
{
if(x==0 || y==0)
break;
else if(xleftup==-1 || yleftup==-1)
break;
else if(QiPan[xleftup][yleftup].Qizhi==0 || QiPan[xleftup][yleftup].Qizhi==2)
break;
else
{
QiPan[xleftup][yleftup].color=3;
winflag++;
}
}
count=0;
for(int xrightdown=x+1,yrightdown=y+1;count!=4;xrightdown++,yrightdown++)
{
if(x==14 || y==14)
break;
else if(xrightdown==15 ||yrightdown==15)
break;
else if(QiPan[xrightdown][yrightdown].Qizhi==0 || QiPan[xrightdown][yrightdown].Qizhi==2)
break;
else
{
QiPan[xrightdown][yrightdown].color=3;
winflag++;
}
}
if(winflag>=4)
{
QiPan[x][y].color=3;
return TRUE;
}
else
winflag=0;
count=0;
//-----------------------------------------------------------------------
for(int xrightup=x-1,yrightup=y+1;count!=4;xrightup--,yrightup++)
{
if(x==0 || y==14)
break;
else if(xrightup==-1 || yrightup==15)
break;
else if(QiPan[xrightup][yrightup].Qizhi==0 || QiPan[xrightup][yrightup].Qizhi==2)
break;
else
{
QiPan[xrightup][yrightup].color=4;
winflag++;
}
}
count=0;
for(int xleftdown=x+1,yleftudown=y-1;count!=4;xleftdown++,yleftudown--)
{
if(x==14 || y==0)
break;
else if(xleftdown==15 || yleftudown==-1)
break;
else if(QiPan[xleftdown][yleftudown].Qizhi==0 || QiPan[xleftdown][yleftudown].Qizhi==2)
break;
else
{
QiPan[xleftdown][yleftudown].color=4;
winflag++;
}
}
if(winflag>=4)
{
QiPan[x][y].color=4;
return TRUE;
}
else
winflag=0;
count=0;
for(int i=0;i<=14;i++)
for(int j=0;j<=14;j++)
QiPan[i][j].color=0;
}
else
AfxMessageBox("WhoWin(int x,int y)函数错误!");
return FALSE;
}
void WzqPcGo::DrawAgain()
{
int hen=0,shu=0,zxie=0,yxie=0;
int flag;
CSize xk=qp->GetSize();
dc->BitBlt(0, 0,xk.cx,xk.cy,qp,0,0,SRCCOPY);//画棋盘
for(int i=0;i<=14;i++)
for(int j=0;j<=14;j++)
{
flag=QiPan[i][j].color;
switch(flag)
{
case 1:hen++;break;
case 2:shu++;break;
case 3:zxie++;break;
case 4:yxie++;break;
}
if(QiPan[i][j].Qizhi==1)
{
dc->BitBlt(j*29+7,i*29+7,28,28,mask,0,0,MERGEPAINT);
dc->BitBlt(j*29+7,i*29+7,28,28,qzh,0,0,SRCAND);
}
else if(QiPan[i][j].Qizhi==2)
{
dc->BitBlt(j*29+7,i*29+7,28,28,mask,0,0,MERGEPAINT);
dc->BitBlt(j*29+7,i*29+7,28,28,qzb,0,0,SRCAND);
}
}
if(hen>=5)
flag=1;
else if(shu>=5)
flag=2;
else if(zxie>=5)
flag=3;
else if(yxie>=5)
flag=4;
else
return;
for(int x=0;x<=14;x++)
for(int y=0;y<=14;y++)
{
if(QiPan[x][y].color==flag)
{
dc->BitBlt(y*29+7,x*29+7,28,28,mask,0,0,MERGEPAINT);
dc->BitBlt(y*29+7,x*29+7,28,28,dead,0,0,SRCAND);
}
}
}
void WzqPcGo::BuildHuiQi(int x,int y)
{
/* AfxMessageBox("rrrrrrrrrrrr");*/
HuiQi *ps=new HuiQi;
HuiQi *pd;
if(head==NULL)
{
ps->x=x;
ps->y=y;
head=ps;
head->next=NULL;
}
else
{
ps->x=x;
ps->y=y;
pd=head;
head=ps;
head->next=pd;
}
}
void WzqPcGo::HuiQiGo()
{
/* AfxMessageBox("qqqqqqqqqqqqqqqqqq");*/
if(head==NULL)
{
AfxMessageBox("没有棋悔");
}
else
{
QiPan[head->x][head->y].Qizhi=0;
QiPan[head->x][head->y].color=0;
QiPan[head->x][head->y].YouxianPerson=0;
QiPan[head->x][head->y].YouxianPc=0;
QiPan[head->x][head->y].YouxiantPerson=0;
QiPan[head->x][head->y].YouxiantPc=0;
stophand=FALSE;
head=head->next;
}
}
BOOL WzqPcGo::YuChe(YuCheQi *yc)
{
/* AfxMessageBox("88888888888888888");*/
if(yuchegoflag)
{
BuildHuiQi(yc->x,yc->y);
QiPan[yc->x][yc->y].Qizhi=2;
if(WhoWin(yc->x,yc->y))
{
HuiQiGo();
return TRUE;
}
}
else
{
BuildHuiQi(yc->x,yc->y);
QiPan[yc->x][yc->y].Qizhi=1;
yuchegoflag=TRUE;
if(WhoWin(yc->x,yc->y))
{
HuiQiGo();
return TRUE;
}
}
for(int i=0;i<15;i++)//预测20步
{
PcThink();
if(!yuchegoflag)
{
yuchegoflag=TRUE;
if(yuchewinflag)
{
/* AfxMessageBox("vvvvvvvvvv");*/
yuchewinflag=FALSE;
for(int j=0;j<=i+1;j++)
HuiQiGo();
return TRUE;
}
}
else
{
yuchegoflag=FALSE;
if(yuchedangerflag)
{
/* AfxMessageBox("3333333333333");*/
yuchedangerflag=FALSE;
for(int j=0;j<=i+1;j++)
HuiQiGo();
return FALSE;
}
}
}
for(int j=0;j<=i;j++)
HuiQiGo();
return FALSE;
}
void WzqPcGo::GetyucheMax()
{
int max=0;
int xd,yd;
for(int i=0;i<=14;i++)
{
for(int j=0;j<=14;j++)
{
if(QiPan[i][j].Qizhi==0)
{
for(int k=0;k<4;k++)
{
BestGo[i][j]+=PersonBestGo[i][j][k]+PcBestGo[i][j][k];
}
if(BestGo[i][j]>=max)
{
max=BestGo[i][j];
xd=i;
yd=j;
}
}
}
}
if(yuchegoflag)
{
BuildHuiQi(xd,yd);
QiPan[xd][yd].Qizhi=2;
}
else
{
BuildHuiQi(xd,yd);
QiPan[xd][yd].Qizhi=1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -