五子棋胜负判定c 语言,【C语言】五子棋胜负判定算法及源代码

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

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

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

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

算法2源代码如下:

static 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(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;}

}

以上源码编译器为VS2010。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值