设计俄罗斯方块游戏

时间:2012-11-21 19:02:32

标签: c

最近,我接受了一些好公司的采访,被要求用高效的数据结构设计俄罗斯方块游戏。我为每个形状回答了2D数组,但是面试官正在寻找更好的答案。然后,他让我也设计了卢多。

对这两个问题的任何意见?

2 个答案:

答案 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执行其简单的四个步骤,即使没有循环也是如此。