设置基本游戏并调试基本问题

本文关键字:问题 调试 游戏 设置 | 更新日期: 2023-09-27 18:01:00

我在尝试在基本的tile引擎中创建一个简单的蛇游戏时遇到了一个小问题。我从未使用过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

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

提前感谢!

设置基本游戏并调试基本问题

要移动你的蛇,你应该把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. 你永远不希望你的蛇离开棋盘,所以当你想向右移动蛇时(例如(,你只能在_x < _boardWidth-1时增加_x。你知道我说_boardWidth是什么意思吗?:-(

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

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

快乐的学习。