求 五子棋 禁手判断

j_prosper 2007-04-26 03:40:08
只需要人和人对战的 禁手判断,比如3、3,4、4,长连的禁手判断, 不需要加入AI
...全文
509 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
j_prosper 2007-05-13
  • 打赏
  • 举报
回复
非常感谢
baili35 2007-05-01
  • 打赏
  • 举报
回复

首先在四个单向判3,4
这个要求在五个连续个格子里只有一种颜色得棋子
有三个就是单向得3,四个就是4
我们得任务还是到一个方向上
123456789
0000*0000
就如以上得9给位置其中第五位就是我们得落子位置
我们分别判断4321,6789
这次我们判断的和上面的不一样
两反向判断的时候
每个方向上我们从相邻的向边判断
遇到的不同颜色的推出空位不推出
把一个方向上的同色棋子和空位保存到一个数组中

123456789
210110010
我们判断是1
那么我们从第二位开始保存
保存到第9位
后先判断数组中的个数
大于等于5个然后进行以下判断
从数组的头向后数五位包括首位
看其中有几个棋子
3就是有单向三,4就是有单向四
分别单向三,四计数器加一
然后从第二位向后数重复上面的操作
但是如果同向上有3或4的计数器增加那么
单向三,单向四的计数器不增加
直到从哪位数最后一位正好是数组的最后一位
最后判断单向三,单向四的计数器
如果有单向3两个以上并无单向4那么为3-3禁手
如果有单向4两个以上并无单向3那么为4-4禁手
如果单向3,4都有那么是3-4 or 4-3禁手
代码我没时间写了你自己写了我要工作
有时间给你写了
j_prosper 2007-04-30
  • 打赏
  • 举报
回复
楼上这位大哥,这个是长连的禁手阿,不是我需要的3.3 或4.4 的禁手阿。。。。。
求高手指教!!!!!
baili35 2007-04-27
  • 打赏
  • 举报
回复
从落子位置为原点分别分析水平,竖直,正对角线,反对角线四个方向进行判断.
在每个方向上按两个相反的方向分别数与落子颜色相同的颜色(最多数四个),
遇到反色或空位置就停止数.
然后把两个方向上数得的数相加后再加1,
如果得到的数是大于5的那么这就是禁手了,等于就是赢了.

我看我写的也有点绕口那么我就写一下水平方向上的delphi代码
假设所有棋子都保存在一个而为数组Gobang[maxx,maxy]中如果
Gobang[x,y](x<=maxx,y<=maxy)的值为0那么代表空位置,1代表黑棋,2代表白棋
InColor;表示现在落子颜色,Pos;表示落子的位置.

var i,j,count: Integer;

count := 0;
for i := 1 to 4 do
begin
if(pos.X+i<=maxx)and(pos.Y+i<=maxY)//确保棋子在棋盘内
and (Gobang[pos.X+i,pos.Y+i]=InColor then
inc(count)
else
break;
end;
for i := 1 to 4 do
begin
if (0<=pos.X-i)and(0<=pos.Y-i)
and (Gobang[pos.X-i,pos.Y-i]=InColor then
inc(count)
else
break;
end;
inc(count);
if count>5 then
begin
...//到这里就是有禁手了
exit;//并退出本次整个过程
end;

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧