我在做贪吃蛇实验的时候运行蛇投被覆盖,只有一个矩形蛇身一直往前冲(原来连舌头有3个),现在我把循环的代码贴上:
public void Draw(Graphics g)
{
Pen blackPen = new Pen(Color.Black);
Pen redPen = new Pen(Color.Red);
Brush redBrush = redPen.Brush;
Brush blackBrush = blackPen.Brush; g.FillRectangle(redBrush, head.X, head.Y, 15, 15); for (int i = 1; i < nodes; i++)
{
g.FillRectangle(blackBrush, arraybody[i].X, arraybody[i].Y , 15, 15);
} } public void move(Size mun)
{
moveX = 10;
moveY = 10;
head.X += moveX;
arraybody [0] .X += moveX;
//arraybody [0].Y += moveY; int maxX = mun.Width - 30;
int maxY = mun.Height - 30;
for (int i=1;i<nodes ;i++)
{
arraybody[i].X = arraybody [i-1].X;
arraybody[i].Y = arraybody [i-1].Y ;
}
for (int i = 0; i < nodes; i++)
{
if (arraybody[i].X < 0 || arraybody[i].Y > maxX)
{
moveX = -moveX;
}
if (arraybody[i].Y < 0 || arraybody[i].Y > maxY)
{
moveY = -moveY;
}
}move 和 draw方法循环调用,蛇初始化如下
class Snake
{
int moveX;
int moveY;
Point head;
Point body;
Point[] arraybody = new Point [100] ;
enum direction { up, down, left, right };
int nodes;
bool live; public Snake ()
{
nodes = 3;
head = new Point(50,30);
arraybody[0] = head;
for (int i = 1; i < nodes; i++)
{
body.X = head.X - 15*i;
body.Y = head.Y ;
arraybody[i] = body;
} live = true;
}请大家帮忙看一下,还有一个问题,我如何捕获键盘的上下左右键的事件啊?
public void Draw(Graphics g)
{
Pen blackPen = new Pen(Color.Black);
Pen redPen = new Pen(Color.Red);
Brush redBrush = redPen.Brush;
Brush blackBrush = blackPen.Brush; g.FillRectangle(redBrush, head.X, head.Y, 15, 15); for (int i = 1; i < nodes; i++)
{
g.FillRectangle(blackBrush, arraybody[i].X, arraybody[i].Y , 15, 15);
} } public void move(Size mun)
{
moveX = 10;
moveY = 10;
head.X += moveX;
arraybody [0] .X += moveX;
//arraybody [0].Y += moveY; int maxX = mun.Width - 30;
int maxY = mun.Height - 30;
for (int i=1;i<nodes ;i++)
{
arraybody[i].X = arraybody [i-1].X;
arraybody[i].Y = arraybody [i-1].Y ;
}
for (int i = 0; i < nodes; i++)
{
if (arraybody[i].X < 0 || arraybody[i].Y > maxX)
{
moveX = -moveX;
}
if (arraybody[i].Y < 0 || arraybody[i].Y > maxY)
{
moveY = -moveY;
}
}move 和 draw方法循环调用,蛇初始化如下
class Snake
{
int moveX;
int moveY;
Point head;
Point body;
Point[] arraybody = new Point [100] ;
enum direction { up, down, left, right };
int nodes;
bool live; public Snake ()
{
nodes = 3;
head = new Point(50,30);
arraybody[0] = head;
for (int i = 1; i < nodes; i++)
{
body.X = head.X - 15*i;
body.Y = head.Y ;
arraybody[i] = body;
} live = true;
}请大家帮忙看一下,还有一个问题,我如何捕获键盘的上下左右键的事件啊?
键盘用keydown事件,然后在事件里面判断key是哪个就可以了
private void timer1_Tick(object sender, EventArgs e)
{
snake.move(panel1.ClientSize);
panel1.Invalidate();
panel1.Update();
timer1.Enabled = snake.isRun;
}
我想判断计时器是否停止计时,但我在Snake类中将isRun改为false之后并没有停止计时 ,反复出现
public void GameOver()
{
MessageBox.Show ("游戏已结束", "贪吃蛇", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
的对话框。
附:
public void move(Size mun)
{
for (int i = nodes ; i>0; i--)
{
arraybody[i].X = arraybody[i - 1].X;
arraybody[i].Y = arraybody[i - 1].Y; } switch (direction)
{
case Keys .Up :
arraybody [0].Y -= step;
break;
case Keys .Down :
arraybody[0].Y += step;
break;
case Keys .Left :
arraybody[0].X -= step;
break;
case Keys .Right :
arraybody[0].X += step;
break;
case Keys.Escape :
this.GameOver();
break;
}
int maxX = mun.Width;
int maxY = mun.Height; for (int i = 0; i < nodes; i++)
{
if (arraybody[i].X < 0 || arraybody[i].Y > maxX)
{
isRun = false ;
GameOver();
break; }
if (arraybody[i].Y < 0 || arraybody[i].Y > maxY)
{
isRun = false ;
GameOver();
break;
}
}