C语言五子棋算法

C语言五子棋算法,第1张

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

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

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

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

算法2源代码如下:

123456789101112131415161718192021static void IfWin(int x,int y,int color){ TCHAR win[20]; int a,b; if(stone[x][y]==1) wcscpy_s(win,_T("黑棋胜利!")); else wcscpy_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(XqwlhWnd,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(XqwlhWnd,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(XqwlhWnd,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(XqwlhWnd,win,TEXT(""),MB_OK);return;}}

把一个棋盘看着一个矩阵如25行25列用二维数组arry[25][25]表示,初始化数组所有数据为0;当用户1 在某个arry[i][j]位置输下子后,将arry[i][j]=1;赋值1,用户2下子的位置arry[i][j]=2;同时我们还可以设置一个标识数组,来识别某个位置是否下子了flag[25][25]={0};初始化0;

当用户1在arry[i][j]处下子后同时把falg[i][j]=1;来标识该处已经下子了所以下次就不能再在此处下子如要打印出棋谱只需吧arry[i][j]打印出来, 为1的地方就是w ,,,为2的地方就是b,,为0的地方表示该处未下子

以上就是关于C语言五子棋算法全部的内容,包括:C语言五子棋算法、c语言:设计一个五子棋游戏,无需人机对战,只要人人对战就可以。、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9317083.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存