【问题标题】:How to approach drawing shapes in C# to make a tetris clone?如何在 C# 中绘制形状以制作俄罗斯方块克隆?
【发布时间】:2013-02-24 19:47:59
【问题描述】:

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

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

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

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

【问题讨论】:

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

标签: c# drawing windows-applications tetris


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    渲染形状的方式会对碰撞检测产生影响。例如,如果您是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);
                }
            }
        }
    }
    

    【讨论】:

    • 感谢您的反馈。我使用 Photoshop 制作了我的作品,因为每个块都是 25x25 像素,全部以 .bmp 扩展名保存。这个个人项目的全部目的是习惯使用图像和使用多维数组。
    • @KarimOumghar 完美。上面的代码示例很好地利用了多维数组。每个block 都可以使用您的 25x25 像素图像进行渲染。您还可以通过为每个块添加不同的颜色等来走得更远......
    猜你喜欢
    • 2010-10-08
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    相关资源
    最近更新 更多