我试图在基本的磁贴引擎中创建一个简单的蛇游戏时遇到一些问题。我从未使用过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
随意删除其中一个而不是两个!
提前致谢!
答案 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
类的各种方法绘制板。看来你想这样做,但为什么要放弃呢?
您的代码有很多话要说。以下是其中一些:
不要在电路板的宽度或高度处使用幻数6
,而是将电路板的尺寸放在变速器中并随处使用。通过这种方式,您可以轻松更改电路板大小而不会影响整个源代码(或者只是忘记更新sinlge 6
并引入难以发现的错误)。
不是每次从文件(panel1_Paint
中的注释代码)加载图像,而是加载图像一次,如果需要,请调整大小,并将其保存在字段中。每次需要时使用它。这大大提高了性能。
使用Image.FromFile
加载图片表单文件。
你永远不希望你的蛇离开棋盘,所以当你想要向右移动蛇时(例如),你可以仅在_x
时增加_x < _boardWidth-1
。你知道我的意思是当我说_boardWidth
时,不是吗? : - )
您应该在Paint
事件中绘制整个电路板。不只是一个单元格。只要您需要绘制表单,就会调用Paint
事件,而不仅仅是在调用Invalidate
方法时。
您有一个名为Position
的枚举。它应该是Direction
。
快乐学习。