我正在用C#(Win Form)编写一个Snake游戏。如果吃一块食物,蛇应该变长。
if(d.eaten == true) // embedded in a timer_tick event
{
PictureBox a = new PictureBox();
a.Top = panel1.Controls[2].Top;
a.Left = panel1.Controls[2].Left;
a.BackColor = Color.Black;
panel1.Controls.Add(a);
a.Width = 10;
a.Height = 10;
}
for (int i = 3; i < panel1.Controls.Count; i++) // i = 3 because we already have 3 controls in panel1
{
panel1.Controls[i].Top = panel1.Controls[i-1].Top;
panel1.Controls[i].Left = panel1.Controls[i-1].Left;
}
此代码将创建新的图片框,但所有这些图片框都获得蛇的位置 - 它们将重叠。如果我向panel1.Controls[i].Top = panel1.Controls[i-1].Top -10;
这样的位置添加一些修正值,那么蛇的身体将无法正确移动。
我想我需要一种方法来找到元素的最后位置 - 而不是当前位置。
答案 0 :(得分:1)
在蛇游戏中,蛇在下一步行动中不会立即生长。这是解决问题的技巧。所以简单地记住,当你真正知道新的位置时,它需要增长并在下一步中添加一个新的段。
蛇游戏也为蛇本身使用队列。您从后面弹出一个线段,然后用新位置将其推到前面。