0

最近,我在一家不错的公司面试,被要求用高效的数据结构设计俄罗斯方块游戏。我回答了每个形状的二维数组,但面试官正在寻找更好的答案。然后,他让我也设计 Ludo。

对这两个问题有任何意见吗?

4

2 回答 2

4

一个不错的选择是列出每件从原点开始的三对偏移量(第四个偏移量是{0.0})。这将让您对形状进行如下编码:

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 结构不同,这种结构可以让您使用单个循环进行测试,如果您展开其琐碎的四个步骤,甚至可以不使用循环。

于 2012-11-21T19:14:45.163 回答
4

我不知道如何做 Ludo,但俄罗斯方块首先想到的是使用位掩码。

您可以制作一个足够大的“超级形状”以包含俄罗斯方块中的所有形状,然后打开掩码中的位以制作“形状”。

这样每个形状都可以是相同的对象类型。当它们“着陆”时,您可以打开代表电路板的更大位掩码中的位。当正确的位组都在“制作一条线”时,您可以处理该事件。

于 2012-11-21T19:09:15.997 回答