刘声传毕业设计初稿 联系客服

发布时间 : 星期五 文章刘声传毕业设计初稿更新完毕开始阅读e489b2060740be1e650e9a88

return; } else {

putdown(bpointcan1); return; } }

上面又有两个新函数,分别定义为空函数,如下: 搜索最佳位置 void bestputdown(int i,int j); 放下黑棋 void putdown(CPoint point); 现在,对上面两个空函数进行定义

在指定位置下棋:

由于putdown(CPoint point)函数的原理非常简单,我们先说明如下:

//黑棋下

void CMy3_1View::putdown(CPoint point)

{

CDC *pDC=GetDC(); CDC Dc;

if(Dc.CreateCompatibleDC(pDC)==FALSE) AfxMessageBox(\ Dc.SelectObject(m_bmblack); pDC->BitBlt(point.x*20+32,point.y*20+32,160,160,&Dc,0,0,SRCCOPY);

wzq[point.x][point.y]=-1;

//由于原来我们检查是否结束时用的是鼠标点下的坐标,而现在

//putdown(CPoint point)函数用的是数组棋盘的坐标,所以必须转换 CPoint overpoint;

overpoint.x=point.x*20+30; overpoint.y=point.y*20+30; over(overpoint); colorwhite=true;

}

搜索最佳落棋点:

现在还有void bestputdown(int i,int j)函数没有定义。它的实现原理是:在四个方向上,各自计算那个方向上棋子的状态,利用原来定义的白棋为1,黑棋为-1的思想,让同个方向上的五个棋子的值相加,取绝对值并赋值给为这个方向定义的局部变量num[i]。

如果几个棋子是同色的,无论黑白,它的绝对值必然大,而对于几个棋子中有黑棋和白棋的,其值必然相加而抵消变小。所以我们可以利用这种方法来寻找旁边有多个同色棋子的空位置(前面已经具体说明)。

在每一个棋盘位置,计算以它为起点的四个方向(横、竖、撇、捺),再比较这四个方向中哪个值最大,然后在这个方向上寻找落棋点。

//检查四个方向,各算出五个棋子的和并赋值 void CMy3_1View::bestputdown(int i,int j) {

//四个方向的值 int num[4]; int a,k;

/////////////////////////////// num[0] --> a=0; if(i<15)

for(k=0;k<5;k++) a=a+wzq[i+k][j]; num[0]=abs(a);

////////////////////////////// num[1] \ a=0; if(j<15)

for(k=0;k<5;k++) a=a+wzq[i][j+k]; num[1]=abs(a);

/////////////////////////////// num[2] \