import javax.swing.*;
import java.awt.*;
import java.util.*;
import java.awt.event.*;
public class aa extends JPanel implements Runnable,KeyListener
{
public static int eatx=300,eaty=300;
public static int flag=0;
public static int number=0;
public static int speed=200;
public static Points ps[]=new Points[60];
public int direction=0;//0 -right 1-left 2-down 3-up
public aa(){
ps[0]=new Points(200,120);
number++;
ps[1]=new Points(180,120);
number++;
ps[2]=new Points(160,120);
number++;
ps[3]=new Points(140,120);
number++;
addKeyListener(this);
Integer score=number*10-40;
set.jscore.setText(score.toString());
}
public void paint(Graphics g)
{
move(direction);
super.paintComponent(g);
g.drawLine(20,20,420,20);
g.drawLine(20,420,420,420);
g.drawLine(420,20,420,420);
g.drawLine(20,20,20,420);
for(int i=0;i<number;i++)
{
g.setColor(Color.blue);
g.fillRect(ps[i].getX(),ps[i].getY(),18,18);
}
g.setColor(Color.red);
if(flag==0)
g.fillRect(eatx,eaty,18,18);
else
{
Integer score=number*10-40;
set.jscore.setText(score.toString());
createeat();flag=0;
g.fillRect(eatx,eaty,18,18);
}
}
public void keyPressed(KeyEvent e)
{
//决定方向
if(e.getKeyCode()==KeyEvent.VK_DOWN && direction!=2 && direction!=3)
direction=2;
if(e.getKeyCode()==KeyEvent.VK_UP && direction!=3 && direction!=2)
direction=3;
if(e.getKeyCode()==KeyEvent.VK_RIGHT && direction!=0 && direction!=1)
direction=0;
if(e.getKeyCode()==KeyEvent.VK_LEFT && direction!=1 && direction!=0)
direction=1;
}
public void move(int d){
if(d==0)
{
int tx=ps[0].getX()+20;
int ty=ps[0].getY();
for(int i=3;i<number;i++)
{
if(tx==ps[i].getX() && ty==ps[i].getY())
{
bb.flag=1;
JOptionPane.showMessageDialog(null,"你撞到自己了!","snakeover",JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
}
if((ps[0].getX()+20)!=eatx || ps[0].getY()!=eaty)
{
if(ps[0].getX()==400)
{
bb.flag=1;
JOptionPane.showMessageDialog(null,"你撞墙了!","snakeover",JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
else
{
for(int i=number-1;i>0;i--)
{
ps[i].setX(ps[i-1].getX());
ps[i].setY(ps[i-1].getY());
}
int x=ps[0].getX();
int y=ps[0].getY();
x=x+20;
ps[0].setX(x);
ps[0].setY(y);
}
}
else
{
if(ps[0].getX()==400)
{
bb.flag=1;
JOptionPane.showMessageDialog(null,"你撞墙了!","snakeover",JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
else
{
flag=1;
ps[number]=new Points(eatx,eaty);
number++;
for(int i=number-1;i>0;i--)
{
ps[i].setX(ps[i-1].getX());
ps[i].setY(ps[i-1].getY());
}
ps[0].setX(eatx);
ps[0].setY(eaty);
}
}
}
if(d==1)
{
int tx=ps[0].getX()-20;
int ty=ps[0].getY();
for(int i=3;i<number;i++)
{
if(tx==ps[i].getX() && ty==ps[i].getY())
{
bb.flag=1;
JOptionPane.showMessageDialog(null,"你撞到自己了!","snakeover",JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
}
if((ps[0].getX()-20)!=eatx || ps[0].getY()!=eaty)
{
if(ps[0].getX()==20)
{
bb.flag=1;
JOptionPane.showMessageDialog(null,"你撞墙了!","snakeover",JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
else
{
for(int i=number-1;i>0;i--)
{
ps[i].setX(ps[i-1].getX());
ps[i].setY(ps[i-1].getY());
}
int x=ps[0].getX();
int y=ps[0].getY();
x=x-20;
ps[0].setX(x);
ps[0].setY(y);
}
}
else
{
if(ps[0].getX()==20)
{
bb.flag=1;
JOptionPane.showMessageDialog(null,"你撞墙了!","snakeover",JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
else
{
flag=1;
ps[number]=new Points(0,0);
number++;
for(int i=number-1;i>0;i--)
{
ps[i].setX(ps[i-1].getX());
ps[i].setY(ps[i-1].getY());
}
ps[0].setX(eatx);
ps[0].setY(eaty);
}
}
}
if (d==2)
{
int tx=ps[0].getX();
int ty=ps[0].getY()+20;
for(int i=3;i<number;i++)
{
if(tx==ps[i].getX() && ty==ps[i].getY())
{
bb.flag=1;
JOptionPane.showMessageDialog(null,"你撞到自己了!","snakeover",JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
}
if((ps[0].getY()+20)!=eaty || ps[0].getX()!=eatx)
{
if(ps[0].getY()==400)
{
bb.flag=1;
JOptionPane.showMessageDialog(null,"你撞墙了!","snakeover",JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
else
{
for(int i=number-1;i>0;i--)
{
ps[i].setX(ps[i-1].getX());
ps[i].setY(ps[i-1].getY());
}
int x=ps[0].getX();
int y=ps[0].getY();
y=y+20;
ps[0].setX(x);
ps[0].setY(y);
}
}
else
{
if(ps[0].getY()==400)
{
bb.flag=1;
JOptionPane.showMessageDialog(null,"你撞墙了!","snakeover",JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
else
{
flag=1;
ps[number]=new Points(0,0);
number++;
for(int i=number-1;i>0;i--)
{
ps[i].setX(ps[i-1].getX());
ps[i].setY(ps[i-1].getY());
}
ps[0].setX(eatx);
ps[0].setY(eaty);
}
}
}
if(d==3)
{
int tx=ps[0].getX();
int ty=ps[0].getY()-20;
for(int i=3;i<number;i++)
{
if(tx==ps[i].getX() && ty==ps[i].getY())
{
bb.flag=1;
JOptionPane.showMessageDialog(null,"你撞到自己了!","snakeover",JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
}
if((ps[0].getY()-20)!=eaty || ps[0].getX()!=eatx)
{
if(ps[0].getY()==20)
{
bb.flag=1;
JOptionPane.showMessageDialog(null,"你撞墙了!","snakeover",JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
else
{
for(int i=number-1;i>0;i--)
{
ps[i].setX(ps[i-1].getX());
ps[i].setY(ps[i-1].getY());
}
int x=ps[0].getX();
int y=ps[0].getY();
y=y-20;
ps[0].setX(x);
ps[0].setY(y);
}
}
else
{
if(ps[0].getY()==20)
{
bb.flag=1;
JOptionPane.showMessageDialog(null,"你撞墙了!","snakeover",JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
else
{
flag=1;
ps[number]=new Points(0,0);
number++;
for(int i=number-1;i>0;i--)
{
ps[i].setX(ps[i-1].getX());
ps[i].setY(ps[i-1].getY());
}
ps[0].setX(eatx);
ps[0].setY(eaty);
}
}
}
}
public void keyReleased(KeyEvent e){}
public void keyTyped(KeyEvent e){}
public synchronized void run()
{
while (bb.flag==0)
{
//需要改变每个方块的位置
//这里最重要改变头的位置
//设一个成员变量,4个值,决定蛇移动的方向
repaint();
try{
Thread.sleep(speed);
}catch(Exception ee){
}
}
}
public void createeat()
{
Random eatone=new Random();
while(true)
{
int flag=0;
eatx=eatone.nextInt(20);
eaty=eatone.nextInt(20);
eatx=eatx*20+20;eaty=eaty*20+20;
for(int i=0;i<aa.number;i++)
{
if(eatx==aa.ps[i].getX() && eaty==aa.ps[i].getY())
flag=1;
}
if(flag==0)
break;
}
}
}