我需要知道在圈和十字游戏中检测获胜动作的最佳方法。源代码并不重要,我只需要一个示例或可以开始的东西。
我唯一能想到的就是使用循环并测试玩家所做的每个动作的每个方向,以搜索例如连续五个。有没有更快更有效的方法呢?
真正简单的解决方案是从最后一步开始检查...显然,之前的任何一步都不可能赢得比赛,否则你就不会在这里...所以你只需要检查是否有 5 (或无论多少)在刚刚放置的棋子周围的行/列/对角线上。
例如,如果棋盘看起来像这样,X 标记最近的移动:
.............
.............
.............
.............
.....X.......
.............
.............
.............
.............
.............
您不需要检查“C”范围之外的任何内容:
.C...C...C...
..C..C..C....
...C.C.C.....
....CCC......
.CCCCXCCCC...
....CCC......
...C.C.C.....
..C..C..C....
.C...C...C...
.............
这有帮助吗? (看起来您可能在最初的问题中提到了这一点,但我不确定。)
除此之外,简单的循环将成为你最好的朋友。您可能可以进行一些微观优化,但是(取决于您的实际应用程序正在做什么)这可能不值得。
需要注意的一件事是,您不能从最近的举动中向任何方向跳出 5 来连续寻找那么多,因为该举动可能处于连续走势的中间。所以我会做类似的事情
From the new move
left = how many in a row we have to the left of the lastest move
right = how many in a row we have to the right of the latest move
if (left + right + 1 >= 5) then you have a winner
up = how many in a row we have above the latest move
down = how many in a row we have below the latest move
if (up + down + 1 >= 5) then you have a winner
// repeat for both diagonal directions.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)