制作俄罗斯方块时被困住了

时间:2013-05-13 11:54:29

标签: c# wpf tetris

我正在尝试制作我自己的俄罗斯方块游戏版本。到目前为止,我能够展示碎片,旋转它们。但我陷入困境,不确定如何继续。

enter image description here

我有一个

  • BoardClass,其中包含网格的静态整数数组board。使用不同的整数,我显示不同的颜色。
  • Block类,它具有生成随机块并旋转它们的方法。
  • Graphic类,根据board数组和
  • 显示颜色
  • 一个GameLogic课程,用于开始,暂停游戏。

对于目前的作品,我采用了一个4x4阵列,并放在前四行board

的电路板上

一切都很好。但是我该如何开始搬东西呢。如何建立块之间的关系是我被困住的地方。

我的问题

  • 我是在正确的轨道上工作吗?
  • 如何自动化事物,我的意思是,这些块将如何自动出现。我知道我可以有一个DispatcherTimer并在tick事件中移动块,但绘制和重绘整个网格的速度很慢。我只想重绘游戏网格的一部分。
  • 如果我向左/向右/向下移动我的棋子,整个棋子阵列会移动,这意味着一个4x4的棋子移动,而不仅仅是1x3或2x2的棋子。
  • 如何知道这件作品是新的还是旧作品。我知道我可以取一个布尔值,但我认为10x20的布尔数组会很大。

我知道这些可能不是一个很好的问题,但是我被困住了,任何帮助都会受到赞赏。并问我是否要查看任何代码。

4 个答案:

答案 0 :(得分:2)

  

我是在正确的轨道上工作吗?

我想你是。

  

如何自动化事物,我的意思是,这些块将如何一个接一个地自动出现。我知道我可以有一个DispatcherTimer并在tick事件中移动块,但绘制和重绘整个网格的速度很慢。我只想重绘游戏网格的一部分。

你测量过吗?大多数游戏以每秒30帧的速率重绘整个场景。首先让它工作,然后再进行优化。

  

如果我向左/向右/向下移动我的棋子,整个棋子阵列会移动,这意味着一个4x4的棋子移动,而不仅仅是1x3或2x2的棋子。

你需要在每次移动前检查边界。你可以为每个广场做,你只有16个比较。这不是很困难,也不会很慢。

  

如何知道这件作品是新作品还是旧作品。我知道我可以采用布尔值,但我认为10x20的布尔数组会很大。

不大。

答案 1 :(得分:1)

  

如何自动化绘图和重绘整个网格的速度很慢。我只想重绘游戏网格的一部分。

当用户对一行进行评分时,您无论如何都必须重绘整个网格。 (降低在线顶部的数字);

  

如果我向左/向右/向下移动我的棋子,整个棋子阵列会移动,这意味着一个4x4的棋子移动,而不仅仅是1x3或2x2的棋子。

我认为错误在于当你真正需要1x4块列表时(每个俄罗斯方块图),为每个数字制作一个4x4阵列;你使用4倍的内存和空间!。

  

如何知道这件作品是新作品还是旧作品。我知道我可以采用布尔值,但我认为10x20的布尔数组会很大。

阵列永远不会太大(如果我们不是在谈论数百万); 你可以采取我的方式:制作一个列表,你可以存储所有" old"游戏的各个部分。并制作一个VARIABLE(一个数字对象),它将指向" new"在板上的数字。在" new"之后数字已经降落 - 你只需将它放在LIST中,你就拥有了#34; old"件。并将VARIABLE指向" new"在你的网格上添加了数字。

希望有所帮助。

您可以查看我的tetris实施示例(使用Java)here

答案 2 :(得分:0)

到目前为止,你所做的一切听起来还不错。至于你的其他问题:

  

如何自动化事物,我的意思是,块会如何出现   自动一个接一个。我知道我可以有一个DispatcherTimer   并在tick事件中移动块,但绘制并重绘完整   网格很慢。我只想重绘游戏网格的一部分。

  • 你可以使用脏的recatangle来找出重绘的位置。但是,如果你真的使用像俄罗斯方块游戏一样简单的应用程序会遇到性能问题,我宁愿弄清楚为什么你的绘图代码如此之慢。在过去10年中生产的任何硬件上,即使每帧重绘整个电路板,也应轻松存档100 + fps。
  

如何知道这件作品是新作品还是旧作品。我知道我可以   取一个布尔值,但我认为一个10x20的布尔数组   大。

坦率地说,没有。只需使用一个数组。 10x20 =数组中的200个条目。 AFAIK bools在arra中每个将占用1个字节,这意味着200字节,因此对于过去30年内制造的机器来说这应该不是问题。即使你使用整数,你仍然会使用不到1 kb的内存。

答案 3 :(得分:0)

  

我是在正确的轨道上工作吗?

如果您希望学习游戏编程而不是在每一个细节上拔出头发,我建议使用像Box2D这样的库来处理世界空间和物体碰撞。

除了Box2D之外,我还建议使用一个游戏框架来处理游戏编程,频率,输入,声音等许多基础知识...... PlayN和LibGDX非常棒。免费框架,为您提供一个快速启动。

使用这些工具,您的重点将更多地放在游戏上,而不是基础知识上。

https://code.google.com/p/playn/

https://code.google.com/p/libgdx/