我在窗体上画图后
窗体的KeyDown事件不好用了
KeyDown事件主要是控制蛇运动的方向
带吗如下
请帮调试
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;namespace Snake
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Label lblmessage;
private System.ComponentModel.IContainer components;
const int  SIZE=100;
public int Score;
public int  gamespeed=5000;
private System.Windows.Forms.Timer timer1;
        Random rnd =new Random(); 
        public int i;
 struct Food
{
public int x;
public int y;
public bool yes;
}
public struct Snake
   {
public int[] x;
public int[] y;
public int node;
public int direction;
public bool life;
   } Food food;
Snake snake;
public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent(); //
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
} /// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null) 
{
components.Dispose();
}
}
base.Dispose( disposing );
} #region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.button1 = new System.Windows.Forms.Button();
this.lblmessage = new System.Windows.Forms.Label();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.SuspendLayout();
// 
// button1
// 
this.button1.BackColor = System.Drawing.SystemColors.ActiveCaption;
this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button1.ForeColor = System.Drawing.SystemColors.ActiveCaptionText;
this.button1.Location = new System.Drawing.Point(50, 8);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(96, 24);
this.button1.TabIndex = 0;
this.button1.Text = "开   始";
this.button1.Click += new System.EventHandler(this.button1_Click);
// 
// lblmessage
// 
this.lblmessage.BackColor = System.Drawing.SystemColors.ActiveCaption;
this.lblmessage.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.lblmessage.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.lblmessage.ForeColor = System.Drawing.Color.White;
this.lblmessage.Location = new System.Drawing.Point(152, 8);
this.lblmessage.Name = "lblmessage";
this.lblmessage.Size = new System.Drawing.Size(456, 23);
this.lblmessage.TabIndex = 1;
this.lblmessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
// 
// timer1
// 
this.timer1.Interval = 500;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
// 
// Form1
// 
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.BackColor = System.Drawing.SystemColors.ControlText;
this.ClientSize = new System.Drawing.Size(652, 582);
this.Controls.Add(this.lblmessage);
this.Controls.Add(this.button1);
this.ForeColor = System.Drawing.Color.Black;
this.Name = "Form1";
this.Text = "Form1";
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown);
this.Click += new System.EventHandler(this.Form1_Click);
this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Form1_KeyPress);
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false); }
#endregion /// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main() 
{
Application.Run(new Form1());
} private void Form1_Load(object sender, System.EventArgs e)
{


}
private void Drawk()

Pen p=new Pen(Color.Blue,3);
Graphics g=this.CreateGraphics();
int i;
for(i=50;i<=600;i+=10)
{
g.DrawRectangle(p,i,40,10,10);
g.DrawRectangle(p,i,451,10,10);
}
for(i=40;i<=450;i+=10)
{
g.DrawRectangle(p,50,i,10,10);
g.DrawRectangle(p,601,i,10,10);
}
} private void Form1_Click(object sender, System.EventArgs e)
{
} private void button1_Click(object sender, System.EventArgs e)
{
Drawk();
food.yes=true;
snake.x=new int[SIZE];
snake.y=new int[SIZE];
snake.life=true;
snake.node=2;
snake.x[0]=100;
snake.y[0]=100;
snake.x[1]=110;
snake.y[1]=100;
snake.direction=1;
            this.timer1.Enabled=true;
}
private void Gameover()
{
Graphics g=this.CreateGraphics();
g.Clear(Color.Black); }
private void PlayGame()
{
Pen p =new Pen(Color.Brown,2);
            Pen p1 =new Pen(Color.Black,2);
Graphics g=this.CreateGraphics();
if(food.yes==true)
{
food.x=Convert.ToInt32(rnd.NextDouble()*400)+60;
food.y=Convert.ToInt32(rnd.NextDouble()*350)+60;
while(food.x % 10 !=0)
food.x++;
while(food.y % 10 !=0)
food.y++;
food.yes=false;
} if(food.yes==false)
{ /*画面上有食物了就要显示*/
g.DrawRectangle(p,food.x,food.y,10,10); }
for(i=snake.node-1;i>0;i--)
{/*蛇的每个环节往前移动*/
snake.x[i]=snake.x[i-1];
snake.y[i]=snake.y[i-1];
}
switch(snake.direction)
{/*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/
case 1: snake.x[0]+=10;break;
case 2: snake.x[0]-=10;break;
case 3: snake.y[0]-=10;break;
case 4: snake.y[0]+=10;break;
} for(i=3;i<snake.node;i++)
{/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/
if(snake.x[i]==snake.x[0] && snake.y[i]==snake.y[0])
{   Gameover();
snake.life=false;
return;
}
}
if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||snake.y[0]>455)
{  //超出范围结束游戏
Gameover();
snake.life=false;
} if(snake.life==false)
{
               return;
}

if(snake.x[0]==food.x&&snake.y[0]==food.y)
{   //吃到食物
g.DrawRectangle(p1,food.x,food.y,10,10);
snake.x[snake.node]=-20;
snake.y[snake.node]=-20;
snake.node++;
food.yes=true;
} for(i=0;i<snake.node;i++)
{ //画蛇
g.DrawRectangle(p,snake.x[i],snake.y[i],10,10); }
/*用黑色去除蛇的的最后一节*/
            g.DrawRectangle(p1,snake.x[snake.node-1],snake.y[snake.node-1],10,10);
//g.DrawLine(p,snake.x[snake.node-1]+10,snake.y[snake.node-1],snake.x[snake.node-1]+10,snake.y[snake.node-1]+10);
if(snake.life==false)
return;
}
private void timer1_Tick(object sender, System.EventArgs e)
{
PlayGame();
}
private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{  
switch(e.KeyCode)
{
case Keys.Right:snake.direction=1;break;
case Keys.Left:snake.direction=2;break;
case Keys.Up:snake.direction=3;break;
case Keys.Down:snake.direction=4;break;
}


}
}
}