📄 snake.java
字号:
import java.awt.*;
import java.awt.event.*;
import java.math.*;
public class Snake
{
int[] x,y;
int num=0;
int rx,ry;
Snake()
{
x = new int[1000];
y = new int[1000];
}
void add(int a,int b)
{
x[num] = a;
y[num] = b;
num++;
}
void setrpoint()
{
rx = (int)(Math.random () * 100);
ry = (int)(Math.random () * 100);
rx = rx % 60 * 10;
ry = ry % 45 * 10 ;
for (int i=0;i<num;i++)
{
if (x[i] == rx && y[i] == ry)
{
setrpoint();
}
}
}
public static void main(String args[])
{
MyFrame myframe;
myframe = new MyFrame();
}
}
class MyFrame extends Frame
{
MyPanel pan;
Snake sn;
Move t;
FrameAdapter frmListener;
AppAdapter AppListener;
MyFrame()
{
setLocation(100,80);
setSize(606,475);
setLayout(new BorderLayout());
this.setBackground (Color.yellow);
this.setResizable (false);
pan = new MyPanel();
this.add (pan);
sn = new Snake();
for(int i=0;i<500;i++)
sn.add (100,100);
sn.setrpoint ();
this.setVisible (true);
//pan.repaint ();
t = new Move();
t.start ();
frmListener = new FrameAdapter();
AppListener = new AppAdapter();
this.addKeyListener(frmListener);
this.addWindowListener(AppListener);
}
class MyPanel extends Panel
{
public void paint(Graphics g)
{
int i;
g.setColor (Color.blue);
for (i=0;i<sn.num;i++)
g.fillOval (sn.x[i],sn.y[i],10,10);
g.setColor (Color.red);
g.fill3DRect (sn.rx,sn.ry,10,10,true);
}
}
class Move extends Thread
{
public int way = 39;
int lx,ly,tx,ty;
int i;
public void run()
{
try
{
this.sleep (500);
}
catch(InterruptedException e)
{
System.out.println(e.getMessage ());
}
if ((way<37||way>40) && way != 3738 && way != 3740 && way != 3938 && way != 3940)
run();
lx=sn.x[sn.num-1];
ly=sn.y[sn.num-1];
for (i=sn.num-1;i>0;i--)
{
sn.x[i]=sn.x[i-1];
sn.y[i]=sn.y[i-1];
}
switch(way)
{
case 39:sn.x[0]+=10;break;
case 37:sn.x[0]-=10;break;
case 40:sn.y[0]+=10;break;
case 38:sn.y[0]-=10;break;
case 3738: sn.x[0]-=10;sn.y[0]-=10;break;
case 3740: sn.x[0]-=10;sn.y[0]+=10;break;
case 3938: sn.x[0]+=10;sn.y[0]-=10;break;
case 3940: sn.x[0]+=10;sn.y[0]+=10;break;
}
if (sn.x[0]==600)
sn.x[0]=0;
if (sn.x[0]==-10)
sn.x[0]=590;
if (sn.y[0]==450)
sn.y[0]=0;
if (sn.y[0]==-10)
sn.y[0]=440;
if (sn.x[0] == sn.rx && sn.y[0]==sn.ry)
{
sn.add (lx,ly);
sn.setrpoint ();
pan.repaint(sn.rx,sn.ry,10,10);
}
else
pan.repaint(lx,ly,10,10);
pan.repaint(sn.x[0],sn.y[0],10,10);
run();
}
}
class FrameAdapter extends KeyAdapter
{
boolean left,right,up,down;
FrameAdapter()
{
left=right=up=down=false;
}
public void keyPressed(KeyEvent ke)
{
if (ke.getKeyCode () == 37)
left=true;
if (ke.getKeyCode () == 38)
up=true;
if (ke.getKeyCode () == 39)
right=true;
if (ke.getKeyCode () == 40)
down=true;
if (left&&!right&&up&&!down)
t.way = 3738;
else if (left&&!right&&!up&&down)
t.way = 3740;
else if (!left&&right&&up&&!down)
t.way = 3938;
else if (!left&&right&&!up&&down)
t.way = 3940;
else
t.way=ke.getKeyCode ();
}
public void keyReleased(KeyEvent ke)
{
if (ke.getKeyCode () == 37)
left=false;
if (ke.getKeyCode () == 38)
up=false;
if (ke.getKeyCode () == 39)
right=false;
if (ke.getKeyCode () == 40)
down=false;
//System.out.println(ke.getKeyCode());
}
}
}
class AppAdapter extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -