如何在C#中绘制形状来制作俄罗斯方块克隆?

时间:2013-03-09 06:33:59

标签: c# drawing windows-applications tetris

我首先要注意的是,我没有在这个小项目中使用任何XNA或LINQ。基本上,我想使用C#windows应用程序来复制俄罗斯方块。我已经绘制了我的网格,我的图片框大小为250x500,每个方块都是25像素x 25像素。

现在,我是绘画形状的业余爱好者。我可以在网格上绘制线条和矩形,圆形,椭圆形和多边形,然后我可以用颜色等填充它们。这就是它。我不能用绘图做很多事情。换句话说,基本形状,使用我创建的点来绘制多边形,例如俄罗斯方块中的“T”形。

我的问题是,在制作我的俄罗斯方块形状时,我应该使用C#中的绘图方法绘制它们还是应该创建和导入俄罗斯方块形状的位图图片并使用它们来创建我的俄罗斯方块克隆?

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

2 个答案:

答案 0 :(得分:0)

首选使用位图和预渲染图像,因为它可以加快每帧的渲染速度。这就是大多数此类游戏所做的事情。

答案 1 :(得分:0)

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

如果您将形状作为块的矩阵,就像原始游戏一样,您可能会发现渲染,处理和碰撞变得更加容易。

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

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);
            }
        }
    }
}