我正致力于在XNA C#中编写一个俄罗斯方块克隆,并且不确定在高级别上接近游戏数据结构方面的最佳方法.
我对碰撞检测,旋转,动画等完全没问题.我需要知道最好的方法来存储"掉落的块" - 即不再受玩家控制的块.
我认为每个Tetromino块应该存储在由4x4阵列组成的自己的类中,以便可以轻松地旋转块.问题是如何将tetromino的最终位置存储到游戏网格中,然后将tetromino切割成单个块(对于每个单元格),然后设置主游戏网格的相应位置以保持这些相同的块,然后消失tetromino一次它已达到最终位置.也许我的方法有一些缺点.
我应该为主游戏网格创建一个可以存储的10x20矩阵吗?或者我应该使用堆栈或队列以某种方式存储丢弃的块.或者可能有一些更好的方法/数据结构来存储东西?
我相信我的方式会起作用,但我正在伸出手去看看是否有人知道更好的方式或者我的方式是否足够好?
PS不是作业,这将是我的投资组合的项目.谢谢.
一旦一个块不动,就没有任何区别于现在不动的任何其他块.在这方面,我认为将整个网格存储为矩阵是最有意义的,其中每个正方形是否填充(如果是,则与块的颜色一起).
我觉得矩阵有很多优点.它将使碰撞检测变得简单(无需与多个对象进行比较,只需与矩阵上的位置进行比较).将其存储为矩阵还可以更容易地确定何时创建了整行.最重要的是,当线条消失时,您不必担心拼接不动的Tetromino.当有人这样做时,你可以一举将整个矩阵向下移动.