📄 snakepanel.java
字号:
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.Arrays;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JPanel;
class SnakePanel extends JPanel {
private int[] x = new int[20], y = new int[20];
private int dx = 5, dy = 5;
private Timer timeOut;
private Timer autoMove;
private void monite(){
if(timeOut != null){
timeOut.cancel();
timeOut = null;
}
if(autoMove != null){
autoMove.cancel();
autoMove = null;
}
timeOut = new Timer(true);
timeOut.schedule(new TimerTask() {
public void run() {
timeOut.cancel();
timeOut = null;
autoMove = new Timer(true);
autoMove.schedule(new TimerTask() {
public void run() {
moveRandomly();
}
}, 30, 30);
}
}, 10000);
}
public SnakePanel() {
Arrays.fill(x, 15);
Arrays.fill(y, 15);
monite();
}
public void paint(Graphics g1d) {
super.paint(g1d);
Graphics2D g = (Graphics2D) g1d;
g.setColor(Color.red);
g.fillRect(10, 10, getWidth() - 20, getHeight() - 20);
g.setColor(Color.BLUE);
g.fillOval(x[0] - 5, y[0] - 5, 11, 11);
g.setStroke(new BasicStroke(2f));
g.drawPolyline(x, y, x.length);
}
Random r = new Random();
public void moveRandomly() {
move('1' + r.nextInt(9));
}
public void keyInput(int c){
move(c);
System.out.println("enterd: " + c + " (" + (char) c + ")");
monite();
}
private void move(int c) {
for (int i = x.length - 1; i >= 1; i--) {
x[i] = x[i - 1];
y[i] = y[i - 1];
}
switch (c) {
case '8':
if (y[0] - dx > 15)
y[0] -= dx;
break;
case '2':
if (y[0] + dx < getHeight() - 20)
y[0] += dx;
break;
case '7':
if (x[0] - dx > 15)
x[0] -= dx;
if (y[0] - dx > 15)
y[0] -= dx;
break;
case '1':
if (x[0] - dx > 15)
x[0] -= dx;
if (y[0] + dx < getHeight() - 20)
y[0] += dx;
break;
case '9':
if (x[0] + dx < getWidth() - 20)
x[0] += dx;
if (y[0] - dx > 15)
y[0] -= dx;
break;
case '3':
if (x[0] + dx < getWidth() - 20)
x[0] += dx;
if (y[0] + dx < getHeight() - 20)
y[0] += dx;
break;
case '4':
if (x[0] - dx > 15)
x[0] -= dx;
break;
case '6':
if (x[0] + dx < getWidth() - 20)
x[0] += dx;
break;
}
repaint();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -