2013-03-09 72 views
2

我首先想说明的是,我不在这个小型项目中使用任何XNA或LINQ。基本上,我想用C#windows应用程序制作一个俄罗斯方块的克隆。我已经画出了我的网格,我的图片框大小为250x500,使每个方形块25像素x 25像素。如何在C#中绘制图形来制作俄罗斯方块克隆?

现在,我是一个业余的绘图形状。我可以在网格上绘制直线和矩形,圆形,椭圆形和多边形,并且可以用颜色等填充它们。这就是它。我无法用绘画做很多事情。换句话说,使用基本形状,使用创建的点来绘制多边形,例如Tetris中的“T”形状。我的问题是,当制作我的俄罗斯方块形状时,我应该使用C#中的绘图方法绘制它们,还是应该创建并导入俄罗斯方块形状的位图图片并使用它们来创建我的俄罗斯方块克隆?

一旦我能弄清楚如何绘制形状,我可以自己找出其余的部分。此外,在游戏网格上工作时,是否继承我的类GameBox中的Picturebox属性?

+1

这绝对取决于目标的项目。如果你的目标是制作一个俄罗斯方块克隆,那么你可以做任何你想做的事情!如果您使用位图(或者无论如何,可能有更漂亮的图形),您将拥有更漂亮的图形,但是绘制一些彩色方块可能更容易/更快速。另一方面,如果你的目标包括按大多数人的方式学习制作游戏,那么你可能想要去位图路由,因为这更常见。真的,这里没有正确或错误的答案。 – livingtech 2013-03-10 21:48:14

回答

0

使用位图和预渲染的图像是首选,因为它加快了每帧的渲染速度。这是大多数这样的游戏所做的。

0

渲染形状的方式将对碰撞检测产生影响。例如,如果您使用的是位图形状,则必须有一种方法来检测何时可能发生每像素碰撞或保持特定形状的单独结构。而如果你只是维护一个正在使用的块的列表,碰撞检测变得简单得多。

如果你的形状是块的矩阵,很像原始游戏,你可能会发现渲染,处理和碰撞要容易得多。

例如,看看下面的伪代码:

class Shape 
{ 
    bool [3][3] Blocks; 

    Pos pos; 
} 

Shape T = new Shape(); 

T.Blocks[0][0] = true; 
T.Blocks[0][1] = true; 
T.Blocks[0][2] = true; 

T.Blocks[1][0] = false; 
T.Blocks[1][1] = true; 
T.Blocks[1][2] = false; 

T.Blocks[2][0] = false; 
T.Blocks[2][1] = true; 
T.Blocks[2][2] = false; 

渲染时,你可以做大意如下的内容:

foreach(Shape s in currentBlocks) 
{ 
    for(int x = 0; i < 3) 
    { 
     for(int y = 0; y < 3; y++) 
     { 
      if(s.Blocks[x][y]) 
      { 
       gameGrid.Render(s.Pos.X + x, s.Pos.Y + y); 
      } 
     } 
    } 
} 
+0

感谢您的反馈。我用photoshop制作了我的作品,因为每个区块都是25x25像素,全部用.bmp扩展名保存。这个个人项目的全部目的是习惯于处理图像和使用多维数组。 – 2013-03-11 07:14:20

+0

@KarimOumghar完美。上面的代码示例很好地使用了多维数组。每个“块”块可以用你的25x25像素图像渲染。您也可以进一步添加不同的颜色为每个块等... – rhughes 2013-03-11 07:19:11