0

我在尝试在基本的瓷砖引擎中创建一个简单的蛇游戏时遇到了一点问题。我从未使用过 C# 或 Windows 窗体,目前处于学习阶段。我很感激我从这里得到的任何帮助。

        int[,] level = {
                               { 0, 0, 0, 0, 0 ,0 },
                               { 0, 0, 0, 0, 0 ,0 },
                               { 0, 0, 0, 0, 0 ,0 },
                               { 0, 0, 0, 0, 0 ,0 },
                               { 0, 0, 0, 0, 0 ,0 },
                               { 0, 0, 0, 0, 0 ,0 },
                           };

目前,所有的瓷砖都是空的,因此关闭。如果我想说添加图像,我所要做的就是将 0 转为 1。我的目标是使用键盘上的箭头键将 0 转为 1。

private void tmrMov_Tick(object sender, EventArgs e)
    {

        if (_objPosition == Position.Right) 
        {

            if(_x<6 && _x>=0)
            _x += 1;

         }
        .
        .
        .
         //and so on
        .
        .
        .

        Invalidate();
    }

有了这个,我试图通过箭头键将 0 变为 1,但它目前不起作用。

        public Form1()
    {
            InitializeComponent();
            _x = rand.Next(0,5 + 1);
            _y = rand.Next(0, 5 + 1);
            _k = 1;
            level[_x, _y] = _k;
            _objPosition = Position.Right;
    }

这就是我调用上述数组的方式......

请让我知道我做错了什么。我知道我最终必须重新开始或选择另一个项目来工作,但我至少想知道我并没有完全错。

我附上了完整的项目,因为它的阅读时间不长...... http://www.mediafire.com/?hz3h2job28y9lfb

编辑:这个问题也在这里发布,因为 stackexchange 上的一个答案建议在这里发布调试问题:https ://softwareengineering.stackexchange.com/questions/188285/simple-gameproblem-with-key-mapping

随意删除其中一个,但不能同时删除两个!

提前致谢!

4

1 回答 1

1

要移动你的蛇,你应该把它放在0它以前的位置(因为现在它只在单元格上),计算新的位置,然后放入1新的位置。因此,您的计时器的刻度处理程序可能如下所示:

private void tmrMov_Tick(object sender, EventArgs e)
{
    level[_x, _y] = 0;
    //...
    // other stuff to calculate new location based on Position

    level[_x, _y] = 1;

    Invalidate();
}

Paint事件中添加 PictureBoxes 也是完全错误的。您应该使用类的各种方法绘制板Graphics。看起来你很想这么做,但你为什么放弃了呢?

关于您的代码有很多话要说。这里有几个:

  1. 不要在任何地方使用幻数6来表示板的宽度或高度,而是将板的大小放在变量中并在任何地方使用它们。通过这种方式,您可以轻松更改电路板尺寸,而不会影响整个源代码(或者只是忘记更新单板6并引入难以发现的错误)。

  2. 不是每次都从文件中加载图像(注释中的代码panel1_Paint),而是加载一次图像,如果需要,调整它的大小,并将其保存在一个字段中。每次需要时使用它。这极大地提高了性能。

  3. 用于Image.FromFile加载图像格式文件。

  4. 你永远不希望你的蛇离开棋盘,所以当你想把蛇向右移动时(例如),你可以增加_xonly when _x < _boardWidth-1。你知道我说的是什么意思_boardWidth,不是吗?:-)

  5. 您应该在活动中绘制整个董事会Paint。不只是一个细胞。Paint每当您需要绘制表单时都会调用事件,而不仅仅是在您调用该Invalidate方法时。

  6. 您有一个名为Position. 实际上应该是Direction

快乐学习。

于 2013-02-25T07:22:02.430 回答