我有一个简单的游戏,你可以在一个网格中垂直或水平移动1平方的游戏块,以形成一排相同类型的三个.
游戏网格是8个方格宽,7个方格高,我想找到最有效的方法来检查是否没有剩下的移动将导致连续3个.
到目前为止我所拥有的是:
http://i.imgur.com/jY6wJvZ.png
我的想法是水平测试我只需要检查列C与任何一侧不同的片段类型和列F的相同.
垂直 - 我认为第2行只需要与第3行进行比较以确保没有匹配,第5列应该与第4行和第6行进行比较.
那么,如果这些都不匹配那么就不可能有更多动作了?
我不确定这是否是最有效的方式,或者如果它可能错过可能的比赛,那么有没有比我更好的大脑的人请指出我正确的方向?
您的支票并不能保证不会发生任何变动。例如,假设左上角是:
* *
a a b c . . . .
* c c a b . . . .
b b d a . . . .
. . . . . . . .
* . . . . . . . .
. . . . . . . .
. . . . . . . .
Run Code Online (Sandbox Code Playgroud)
事实上,C 列中的任何单元格都不等于它的左侧或右侧,并且第 2 行中的任何单元格都不等于它的上方或下方。然而,我们可以交换 C1 和 C2 以创建一个 3 排。
正如 @Patashu 所建议的,这里可能最好的解决方案是幼稚的解决方案,特别是对于概念化,例如,如果其他人要阅读您的代码。我会一次跟踪三个单元(在有界 FIFO 队列中),首先按行,然后按列,当三个匹配中的两个匹配时,检查可能交换以填充第三个的 2 到 6 个周围单元。例如,
. . . . . . . .
. . * . . * . .
. * . a a . * .
. . * . . * . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
Run Code Online (Sandbox Code Playgroud)
或者
. . . . . . . .
. . . . * . . .
. . . a . a . .
. . . . * . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
Run Code Online (Sandbox Code Playgroud)
或者
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . * . .
. . . . * . a a
Run Code Online (Sandbox Code Playgroud)
*
如果这些'ed 单元格中的任何一个匹配(例如 a
),那么您就知道可能出现另一个 3 排。