用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){}
}
}
}