设置基本游戏并调试基本问题
本文关键字:问题 调试 游戏 设置 | 更新日期: 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
类的各种方法绘制板。你似乎很想那样做,但为什么要放弃呢?
关于您的代码,有很多话要说。以下是其中的一些:
不要在任何地方都使用幻数
6
来表示板的宽度或高度,而是将板的大小放在可变值中,并在任何地方使用它们。通过这种方式,您可以在不影响整个源代码的情况下轻松更改电路板大小(或者忘记更新一个新的6
并引入一个难以找到的错误(。不是每次都从文件中加载图像(
panel1_Paint
中的注释代码(,而是加载一次图像,根据需要调整其大小,并将其保存在字段中。随时使用。这大大提高了性能。使用
Image.FromFile
加载图像表单文件。你永远不希望你的蛇离开棋盘,所以当你想向右移动蛇时(例如(,你只能在
_x < _boardWidth-1
时增加_x
。你知道我说_boardWidth
是什么意思吗?:-(您应该在
Paint
事件中绘制整个板。不,只有一个细胞。每当需要绘制表单时,就会调用Paint
事件,而不仅仅是在调用Invalidate
方法时。您有一个名为
Position
的枚举。实际上应该是Direction
。
快乐的学习。