用JAVA编一个小蛇游戏(要求如下)请教JAVA高手。

不喜欢就自己修改。

导入Java . awt . *;

导入Java . awt . event . *;

公共类greeds snake//主类

{

/**

* @param args

*/

公共静态void main(String[] args) {

// TODO自动生成的方法存根

new my window();

}

}

类MyPanel Extensions Panel实现KeyListener,runnable//用户定义的Panel类,继承了键盘和线程接口。

{

纽扣蛇[];//定义蛇形按钮

int Shu = 0;//蛇的结数

int food[];//食物阵列

布尔结果=真;//决定输赢。

螺纹螺纹;//定义一个线程

静态int weix,weiy//食物位置

布尔t =真;//确定游戏是否结束。

int方想= 0;//蛇形移动方向

int x=0,y = 0;//蛇头位置

我的面板()

{

set layout(null);

snake =新按钮[20];

food = new int[20];

thread =新线程(this);

for(int j = 0;j & lt20;j++)

{

food[j]=(int)(math . random()* 99);//定义20种随机食物

}

weix =(int)(food[0]* 0.1)* 60;//十位数*60为横坐标。

weiy =(int)(food[0]% 10)* 40;//bits *40为纵坐标。

for(int I = 0;我& lt20;i++)

{

snake[I]= new Button();

}

add(snake[0]);

蛇[0]。set background(color . black);

蛇[0]。addkey listener(this);//为蛇头添加一个键盘监视器。

蛇[0]。setBounds(0,0,10,10);

set background(color . cyan);

}

Public void run() //接收线程

{

while(t)

{

If(方想==0)// Right

{

尝试

{

x+= 10;

蛇[0]。setLocation(x,y);//设置黑鱼的位置

if(x = = weix & amp;& ampY==weiy) //吃菜。

{

shu++;

weix =(int)(food[Shu]* 0.1)* 60;

weiy =(int)(food[Shu]% 10)* 40;

repaint();//重画下一个食物

加(蛇[舒]);//增加蛇结的数量和位置。

蛇[舒]。setBounds(snake[shu-1]。get bounds());

}

thread . sleep(100);//睡眠100毫秒

}

catch(异常e){}

}

否则if(方想==1)// Left

{

尝试

{

x-= 10;

蛇[0]。setLocation(x,y);

if(x = = weix & amp;& ampy==weiy)

{

shu++;

weix =(int)(food[Shu]* 0.1)* 60;

weiy =(int)(food[Shu]% 10)* 40;

repaint();

加(蛇[舒]);

蛇[舒]。setBounds(snake[shu-1]。get bounds());

}

thread . sleep(100);

}

catch(异常e){}

}

Else if(方想==2)// Up

{

尝试

{

y-= 10;

蛇[0]。setLocation(x,y);

if(x = = weix & amp;& ampy==weiy)

{

shu++;

weix =(int)(food[Shu]* 0.1)* 60;

weiy =(int)(food[Shu]% 10)* 40;

repaint();

加(蛇[舒]);

蛇[舒]。setBounds(snake[shu-1]。get bounds());

}

thread . sleep(100);

}

catch(异常e){}

}

否则if(方想==3)// Down

{

尝试

{

y+= 10;

蛇[0]。setLocation(x,y);

if(x = = weix & amp;& ampy==weiy)

{

shu++;

weix =(int)(food[Shu]* 0.1)* 60;

weiy =(int)(food[Shu]% 10)* 40;

repaint();

加(蛇[舒]);

蛇[舒]。setBounds(snake[shu-1]。get bounds());

}

thread . sleep(100);

}

catch(异常e){}

}

int num 1 = Shu;

while(num 1 & gt;1)//判断是否咬尾巴。

{

if(snake[num1].getBounds()。x==snake[0]。getBounds()。x & amp& amp蛇[num1]。getBounds()。y==snake[0]。getBounds()。y)

{

t =假;

结果=假;

repaint();

}

num 1-;

}

if(x & lt;0 | | x & gt= this . getwidth()| | y & lt;0 | | y & gt=this.getHeight())//判断是否撞墙。

{

t =假;

结果=假;

repaint();

}

int num = shu

while(num & gt;0) //设置蛇形节点位置

{

蛇[编号]。setBounds(snake[num-1]。get bounds());

num-;

}

If(shu==15) //如果蛇结数量等于15,则取得胜利。

{

t =假;

结果=真;

repaint();

}

}

}

公共void键被按下(key event e)//按下键盘方向键。

{

if(e . get key code()= = key event . vk _ right)//右键

{

如果(方想!=1)//如果前一个方向不左,

方想= 0;

}

else if(e . get key code()= = key event。VK _左)

{如果(方想!=0)

方想= 1;

}

else if(e . get key code()= = key event。VK_UP)

{如果(方想!=3)

方想= 2;

}

else if(e . get key code()= = key event。VK_DOWN)

{如果(方想!=2)

方想= 3;

}

}

公共void键入(KeyEvent e)

{

}

公开无效密钥释放(密钥事件e)

{

}

Public void paint(Graphics g) //在面板上绘制。

{

int x 1 = this . getwidth()-1;

int y 1 = this . getheight()-1;

g . set color(color . red);

g .菲罗瓦尔(维西,维西,10,10);//食物

g.drawRect(0,0,x1,y 1);//墙壁

if(t = = false & amp;& amp结果= =假)

g.drawString("游戏结束!", 250, 200);//输出游戏失败

else if(t = = false & amp;& amp结果= =真)

g.drawString("你赢了!", 250, 200);//输出游戏成功。

}

}

我的窗口扩展框架实现动作监听器//自定义窗口类

{

我的面板我的;

按钮btn

面板面板;

我的窗口()

{

super(" GreedSnake ");

my = new my panel();

btn =新建按钮(" begin ");

Panel = new Panel();

BTN . addactionlistener(this);

面板。添加(新标签(" begin后,请按Tab键选择蛇"));

panel . add(BTN);

Panel.add(新标签(“按上下左右键控制蛇动作”);

添加(panel,BorderLayout。北);

添加(我的,BorderLayout。中心);

setBounds(100,100,610,500);

set visible(true);

validate();

addWindowListener(新WindowAdapter()

{

公共void窗口关闭(WindowEvent e)

{

system . exit(0);

}

});

}

已执行公共void操作(操作事件e)//按下开始按钮。

{

if(e.getSource()==btn)

{

尝试

{

my . thread . start();//启动线程

my . validate();

}

catch(异常ee){}

}

}

}