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

我试图在基本的磁贴引擎中创建一个简单的蛇游戏时遇到一些问题。 我从未使用过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=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事件中添加PictureBox也是完全错误的。 您应该使用Graphics类的各种方法绘制板。 看来你想这样做,但为什么要放弃呢?

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

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

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

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

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

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

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

快乐学习。