作者yvb (yvb)
看板PttBug
标题[情报] 另一个五子棋禁手的小 bug
时间Fri Jun 27 00:21:16 2008
除了先前所述的 bug 之外, 尚有另一个 bug.
此 bug 需先将前一个 bug fix 後才会发现.
状况: 附录的五子棋谱, 下 A 会误判为禁手.
说明:
在 dirchk() 的
if ((style == 3) || (style == 2)) {
中, 有一段
if ((dirchk(ku, nx, ny, color, 0, dx, dy) == 0x06) &&
而 dirchk() 的第五个参数, 表示是否进行禁手判断, 此处误写为 0,
因此造成 以白棋的规则, 检查是否为活四.
建议:
将
if ((dirchk(ku, nx, ny, color, 0, dx, dy) == 0x06) &&
的 0 改为 1 或 limit,
即 改为
if ((dirchk(ku, nx, ny, color, 1, dx, dy) == 0x06) &&
或 改为
if ((dirchk(ku, nx, ny, color, limit, dx, dy) == 0x06) &&
另解:
盈月与繁星 (MoonStar, 某 BBS 站) 的处理方式为
将
if ((dirchk(ku, nx, ny, color, 0, dx, dy) == 0x06) &&
的 0 改为 2, 即 改为
if ((dirchk(ku, nx, ny, color, 2, dx, dy) == 0x06) &&
并在
style >>= 4;
前一行加上
if (limit==2) return (style>>4);
[注] 目前 Ptt 站上 五子棋型检查的程式码, 乃 MoonStar (站名)
於 1998.11 开发完成第一版; MoonStar 并於 1999.04 根据
一篇 杀手文出题 的 "禁点判断" 而发现上述 bug, 并修正之.
附录:
如下图, A 不为禁手点.
因下了 A 後, b 仍为双三禁手,
且 A, c, d 将构成长连禁,
故下 A 为活三.
A B C D E F G H I J K L M N
15
╔╤╤╤╤╤╤╤╤╤╤╤╤╤╗
14
╟┼┼┼┼┼┼┼┼┼┼┼┼┼╢
13
╟┼┼┼┼┼┼┼┼┼┼┼┼┼╢
12
╟┼┼+┼┼┼+┼┼┼+┼┼╢
11
╟┼┼┼┼┼┼┼┼┼┼┼┼┼╢
10
╟┼┼┼●○○┼┼●○┼┼┼╢
9
╟┼┼┼┼●┼○○┼●┼┼┼╢
8
╟┼┼●dcA●●b┼+┼┼╢
7
╟┼┼┼┼○┼┼┼●○┼┼┼╢
6
╟┼┼┼┼┼○●┼┼○┼┼┼╢
5
╟┼┼┼┼┼┼┼┼┼┼┼┼┼╢
4
╟┼┼+┼┼┼+┼┼┼+┼┼╢
3
╟┼┼┼┼┼┼┼┼┼┼┼┼┼╢
2
╟┼┼┼┼┼┼┼┼┼┼┼┼┼╢
1
╚╧╧╧╧╧╧╧╧╧╧╧╧╧╝
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 60.199.200.53