我有一个简单的游戏,你可以在一个网格中垂直或水平移动1平方的游戏块,以形成一排相同类型的三个. 游戏网格是8个方格宽,7个方格高,我想找到最有效的方法来检查是否没有剩下的移动
游戏网格是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 . . . . . . . . . . . . * . . . . . . . . . . . . . . . . . . . . . . . .
实际上,C列中没有单元格等于其左侧或右侧,并且第2行中的单元格不等于其上方或下方.然而,我们可以交换C1和C2来创建一个3-in-a-row.
正如@Patashu建议的那样,一个天真的解决方案在这里可能是最好的,特别是对于概念化,例如如果有人要读你的代码.我会一次跟踪三个单元格(在有界FIFO队列中),先是按行,然后是按列,当三个中的两个匹配时,检查可能被交换成填充第三个的2到6个周围单元格.例如,
. . . . . . . . . . * . . * . . . * . a a . * . . . * . . * . . . . . . . . . . . . . . . . . . . . . . . . . .
要么
. . . . . . . . . . . . * . . . . . . a . a . . . . . . * . . . . . . . . . . . . . . . . . . . . . . . . . . .
要么
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . * . . . . . . * . a a
如果这些* ed单元格中的任何一个匹配(例如a),那么你就知道另一个3-in-a-row是可能的.