import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import javax.swing.*;
public class TanChiShe extends KeyAdapter implements Runnable, MouseListener,MouseMotionListener
{
//定义变量(在下面)-----------------------------------------------------
int[] xs=new int[20*20]; //面板600*600 单个块30*30 行列最多40快
int[] ys=new int[20*20];
int fang=2;
int chang=5;
int douX;
int douY;
//定义变量(结束)--------------------------------------------------------
JFrame frame;
Thread timerThread;
boolean start=false;
TanChiShe()
{
//构造初始(在下面)-----------------------------------------------------
zaoShe();
zaoDou();
//构造初始(结束)--------------------------------------------------------
frame = new JFrame();
frame.getContentPane().add(new Screen());
frame.addKeyListener(this);
Container contentPane=frame.getContentPane();
contentPane.addMouseListener(this);
contentPane.addMouseMotionListener(this);
//窗口大小 frame.setSize(宽, 高);
frame.setSize(600+2*5, 600+2*3+22);
frame.setVisible(true);
frame.repaint();
}
public void mousePressed(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseDragged(MouseEvent e){}
//鼠标单击
public void mouseClicked(MouseEvent e)
{
//鼠标位置
int mx=e.getX();
int my=e.getY();
//鼠标左键
if (e.getButton()==MouseEvent.BUTTON1)
{
//鼠标左键处理(在下面)-----------------------------------------------------
//鼠标左键处理(结束)--------------------------------------------------------
}
//鼠标右键
else if (e.getButton() == MouseEvent.BUTTON3)
{
//鼠标右键处理(在下面)-----------------------------------------------------
//鼠标右键处理(结束)--------------------------------------------------------
}
frame.repaint();
}
//鼠标移动
public void mouseMoved(MouseEvent e)
{
//鼠标位置
int mx=e.getX();
int my=e.getY();
//鼠标左键处理(在下面)-----------------------------------------------------
//鼠标左键处理(结束)--------------------------------------------------------
frame.repaint();
}
public void keyPressed(KeyEvent evt)
{
//键盘处理
switch(evt.getKeyCode())
{
case KeyEvent.VK_ENTER:
timerThread = new Thread(this);
timerThread.start();
start = true;
break;
case KeyEvent.VK_ESCAPE:
start = false;
System.exit(1);
break;
case KeyEvent.VK_LEFT:
//键盘左箭头处理(在下面)-----------------------------------------------------
zhuanXiang(3);
//键盘左箭头处理(结束)--------------------------------------------------------
break;
case KeyEvent.VK_RIGHT:
//键盘右箭头处理(在下面)-----------------------------------------------------
zhuanXiang(1);
//键盘右箭头处理(结束)--------------------------------------------------------
break;
case KeyEvent.VK_DOWN:
//键盘下箭头处理(在下面)-----------------------------------------------------
zhuanXiang(4);
//键盘下箭头处理(结束)--------------------------------------------------------
break;
case KeyEvent.VK_UP:
//键盘上箭头处理(在下面)-----------------------------------------------------
zhuanXiang(2);
//键盘上箭头处理(结束)--------------------------------------------------------
break;
}
frame.repaint();
}
public void run()
{
while(true)
{
try
{
//定时时间间隔 timerThread.sleep(毫秒);
timerThread.sleep(500-chang*10);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
if(start==false)
return;
//定时处理(在下面)-----------------------------------------------------
if (nengChiDou()==true)
{
zhangChang();
zaoDou();
}
if(nengZiSha()==true || nengChuJie()==true)
{
jieShu();
}
pa();
//定时处理(结束)--------------------------------------------------------
frame.repaint();
}
}
class Screen extends JComponent
{
public void paint(Graphics g)
{
Graphics2D g2d = (Graphics2D)g;
//画图处理(在下面)-----------------------------------------------------
xianShe(g2d);
xianDou(g2d);
//画图处理(结束)--------------------------------------------------------
}
}
public static void main(String[] args)
{
new TanChiShe();
}
void zaoShe()
{
for(int j=0;j<5;j++)
{
xs[j]=30*10;
ys[j]=30*(10+j);
}
}
void xianShe(Graphics2D g2d)
{
for(int j=0;j<chang;j++)
{
g2d.setColor(Color.BLACK);
g2d.fillRect(xs[j],ys[j],30,30);
}
}
void pa()
{
//身先爬
for(int i=chang-1;i>0;i--)
{
xs[i]=xs[i-1];
ys[i]=ys[i-1];
}
//头
switch (fang)
{
case 1:
xs[0]+=30;
break;
case 2:
ys[0]-=30;
break;
case 3:
xs[0]-=30;
break;
case 4:
ys[0]+=30;
break;
}
}
void zhuanXiang(int fang)
{
this.fang=fang;
}
boolean nengChuJie()
{
if (xs[0]<0 || xs[0]>=600 || ys[0]<0 || ys[0]>=600)
{
return true;
}
else
{
return false;
}
}
boolean nengZiSha()
{
for (int j=1;j<chang ;j++ )
{
if (xs[0]==xs[j] && ys[0]==ys[j])
{
return true;
}
}
return false;
}
void jieShu()
{
System.out.println("***GAME OVER***");
System.out.println("游戏作者:PGC");
System.exit(0);
}
void zaoDou()
{
douX=30*(int)(20*Math.random());
douY=30*(int)(20*Math.random());
}
void xianDou(Graphics2D g2d)
{
g2d.setColor(Color.GREEN);
g2d.fillOval(douX,douY,30,30);
}
boolean nengChiDou()
{
if (xs[0]==douX&&ys[0]==douY)
{
return true;
}
else
{
return false;
}
}
void chiDou()
{
}
void zhangChang()
{
chang++;
}
void shengJi()
{
}
void jiaSu()
{
}
};