(C#)俄罗斯方块块移动时的错误

时间:2015-03-15 03:03:04

标签: c# arrays tetris

只是给每个人一个记录。这是我的第一个编程课程,所以当我不了解一切时,请耐心等待。

基本上,对于我的课程最终项目,我决定在c#(visual studio)中重新创建俄罗斯方块。听起来很容易吗?以及....

现在问题在于移动块。然而,它移动时,移动时会出现问题。将块移到右侧时,块会消失。

这是手边的方法:

if (e.KeyCode == Keys.D)
{
    //run move shape right loop
    for (int i = 0; i < height; i++)
    {
        for (int n = 0; n < width; n++)
        {
            // check to see if movable first and occupied
            if (tetris_grid[n, i, 1] == 0 && tetris_grid[n, i, 0] > 0) //if movable
            {
                if (n == width - 1)  //if at the edge
                {
                    //do nothing
                }
                else if (tetris_grid[n + 1, i, 1] > 0)
                {
                    //do nothing
                }
                else
                {
                    tetris_grid[n + 1, i, 0] = tetris_grid[n, i, 0]; //move the contents over
                    tetris_grid[n, i, 0] = 0;  //set the previous location to empty
                    tetris_grid[n + 1, i, 1] = tetris_grid[n, i, 1];
                    tetris_grid[n, i, 1] = 0;  //set the previous location to empty

                    n = n + 1;  //increment so we don't automatically move to edge
                }
            }
        }
    }

    //redraw
    draw_board();
}

免责声明:我一直在向我的教授寻求帮助,因此移动代码全部由他撰写。我最初有它的初始数组将其内容移动到另一个数组,但他重写了我的代码,以便它只是一个3d数组,其中有一个维度来衡量块是否被种植。

我已经查看了堆栈溢出但很多它使用的是我以前从未真正学过的代码,我的教授也告诉我不要使用堆栈溢出但是我无法帮助它,因为我很困难。

感谢所有可能的帮助!

1 个答案:

答案 0 :(得分:0)

使用逻辑将方法移动到方法(MyLogic(KeyCode kcode)),然后在您使用的keydown事件上,调用传递参数MyLogic(Keys.D)的方法。在制定了如何在矩阵内移动盒子的逻辑之后。调用Invalidate()方法来刷新你痛苦的板子。 OnPaint()事件应该只有绘制板的逻辑。

OnKeyDown(object sender, EventArgs e){
   MyLogic(e.KeyCode); //I can remember but this is the idea
   myControlBoard.Invalidate();
}

OnPaint(object sender, EventArgs e){
 for(int i = 0; i < mybox.GetLenght(0); i ++)
  for(int j = 0; j < mybox.GetLenght(1); j++)
  { 
     DrawBox(i, j)
  }
}