2

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

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

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

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

4

2 回答 2

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);
            }
        }
    }
}
于 2013-03-11T06:48:48.203 回答
0

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

于 2013-03-09T06:39:05.783 回答