最近,我接受了一些好公司的采访,被要求用高效的数据结构设计俄罗斯方块游戏。我为每个形状回答了2D数组,但是面试官正在寻找更好的答案。然后,他让我也设计了卢多。
对这两个问题的任何意见?
答案 0 :(得分:4)
我不知道怎么做Ludo,但是对于俄罗斯方块来说,首先想到的是使用一点掩码。
你可以制作一个足够大的“超级形状”,以包含俄罗斯方块中的所有形状,然后打开面具中的位来制作“形状”。
这样每个形状可以是相同的对象类型。当它们“着陆”时,您可以在代表电路板的更大位掩码中打开位。当正确的位组全部在“排成一行”时,您可以处理该事件。
答案 1 :(得分:4)
一个不错的选择是每个片段的原点的三对偏移列表(第四个偏移量为{0.0}
)。这样您就可以按如下方式对shapes进行编码:
I {0,1} {0,2} {0,3}
J {0,1} {1,1} {2,1}
L {0,1} {-1,1} {-2,1}
O {0,1} {1,1} {1,0}
S {-1,0} {-1,1} {-2,1}
T {-1,1} {0,1} {1,1}
Z {1,0} {1,1} {2,1}
掌握这些清单后,您将能够绘制形状,检查“玻璃”是否有相应形状的空间可用性,应用旋转,并将玻璃放置在最终的休息处。与大多数操作需要两个嵌套循环的2D结构不同,这种结构允许您使用单个循环进行测试,或者如果您unroll执行其简单的四个步骤,即使没有循环也是如此。