C语言五子棋算法

五子棋胜负的判定,一般有一下两种算法:

1.扫描整个棋盘,分别扫描四个方向是否有5个连子。网上找了很多五子棋源码都是用此算法,这意味着每下一个棋子都要扫描一遍19×19的棋盘,复杂而且低效,代码略。

2.每下一字,从该子开始扫描其四个方向(例如:从该子的(x-4,y)坐标开始扫描横向)是否存在5个连子。此算法较为常用,而且不涉及更为复杂的数据结构。

另外为解决扫描越界的问题,在声明棋盘棋子位置时,可声明一个(4+19+4)×(4+19+4)的棋盘,而让棋子偏移(4,4)个坐标。

算法2源代码如下:

?123456789101112131415161718192021staticvoidIfWin(intx,inty,intcolor){TCHARwin[20];inta,b;if(stone[x][y]==1)wcscpy_s(win,_T(黑棋胜利!));elsewcscpy_s(win,_T(白棋胜利!));for(a=x-4;a<=x+4;a++)//判断横if(stone[a][y]==color&&stone[a+1][y]==color&&stone[a+2][y]==color&&stone[a+3][y]==color&&stone[a+4][y]==color){MessageBoxW(Xqwl.hWnd,win,TEXT(),MB_OK);return;}for(b=y-4;b<=y+4;b++)//判断竖if(stone[x][b]==color&&stone[x][b+1]==color&&stone[x][b+2]==color&&stone[x][b+3]==color&&stone[x][b+4]==color){MessageBoxW(Xqwl.hWnd,win,TEXT(),MB_OK);return;}for(a=x-4,b=y-4;a<=x+4;a++,b++)//判断右斜if(stone[a][b]==color&&stone[a+1][b+1]==color&&stone[a+2][b+2]==color&&stone[a+3][b+3]==color&&stone[a+4][b+4]==color){MessageBoxW(Xqwl.hWnd,win,TEXT(),MB_OK);return;}for(a=x-4,b=y+4;a<=x+4;a++,b--)//判断左斜if(stone[a][b]==color&&stone[a+1][b-1]==color&&stone[a+2][b-2]==color&&stone[a+3][b-3]==color&&stone[a+4][b-4]==color){MessageBoxW(Xqwl.hWnd,win,TEXT(),MB_OK);return;}}

免责声明:本站发布的游戏攻略(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场。
如果本文侵犯了您的权益,请联系站长邮箱进行举报反馈,一经查实,我们将在第一时间处理,感谢您对本站的关注!