1、当落子时程序进行判断五子连珠的情况,判断要在8个方向进行,8个方向分成4组,每组包含两个完全相反的方向。当向右方向试探时,对应棋子位置的数组元素的行下标不增加(加0),列增下标加1,这样对应一个2元组(0,1);向下方向试探时,对应棋子位置的数组元素的的行下标加1,列下标加0,对应的二元组为(1,0),。依次类推。行列右1右下下左下-1左左上上右上为了方便算法设计,将8个方向拆开成两个对应相反方向的二维数组,存储4个方向及对应相反方向值。一个数组为:cc42= 0, 1, 1, 1, 1, 0, 1, -1 ;另一个数组为:dd42= 0, -1, -1, -1, -1, 0, -1, 1 ;
2、当落子时,同时向4个方向及其相反方向在连续的位置上搜索同色棋子的对应的数组元素值,并求和,两个相反方向求和的结果相加,如果是=6并且=60,判断黑方胜出。参考算法:int CWin:win(int x, int y) const int cc42= 0, 1, 1, 1, 1, 0, 1, -1; const int dd42= 0, -1, -1, -1, -1, 0, -1, 1; int s,s1,s2,x1,y1; for(int i=0;i=0)&(x1(y1=6&(s1+s2)0) top-; e1=elementtop; return e1;class CWin public:
3、void init(); int win(int x,int y); int chess1515; CWin(); virtual CWin();/Win.cppCWin:CWin() this-init();CWin() const int dd42= 0, -1, -1, -1,void CWin:init() for(int i1=0;i115;i1+) for(int j1=0;j1MoveTo(30,i);LineTo(450,i);MoveTo(i,30);LineTo(i,450); double x; double y; for(int n1=0;n1n1+) for(int m1=0;m1m1+) if(win.chessm1n1=1)|win.chessm1n1=10) draw(pDC,n1,m1);void CFiveView:O