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

时间:2013-02-25 06:44:01

标签: c# .net winforms debugging

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

        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

随意删除其中一个而不是两个!

提前致谢!

1 个答案:

答案 0 :(得分: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事件中添加PictureBox也是完全错误的。你应该使用Graphics类的各种方法绘制板。看来你想这样做,但为什么要放弃呢?

您的代码有很多话要说。以下是其中一些:

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

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

  3. 使用Image.FromFile加载图片表单文件。

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

  5. 您应该在Paint事件中绘制整个电路板。不只是一个单元格。只要您需要绘制表单,就会调用Paint事件,而不仅仅是在调用Invalidate方法时。

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

  7. 快乐学习。