游戏截图
代码 Java14写的哦低版本会报错
文件列表
package Sys;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.LinkedList;
import java.util.Timer;
import java.util.TimerTask;
public class MainFame extends JFrame implements Runnable {
private Snake snake;//蛇
private Snake snake1;//蛇
private JPanel jpanel;//游戏棋盘
private Node[] food;//食物
private int signSnake = 1;//标记蛇
final Object cluck = 2;
private boolean moveBoolean = true;
// private boolean firstTime = true;
public MainFame() {
// 初始化框体
initFrame();
// 初始化网格
initGamePanel();
// 初始化蛇
initSnake();
// 初始化食物
initFood();
setVisible(true);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 初始化定时器
// initTimer();
// 键盘监听
setKyeListener();
// 启动多线程
// Runnable R = this;-----
// new Thread(R).start();
// new Thread(R).start();
}
private void initFood() {
food = new Node[3];
for (int i = 0; i < food.length; i++) {
food[i] = new Node();
food[i].random();
}
}
//键盘监听
private void setKyeListener() {
addKeyListener(new KeyAdapter() {
// 按下键盘
@Override
public void keyPressed(KeyEvent e) {
if(moveBoolean){
switch (e.getKeyCode()) {
case KeyEvent.VK_UP -> snake.setDirection(Direction.UP);
case KeyEvent.VK_DOWN -> snake.setDirection(Direction.DOWN);
case KeyEvent.VK_LEFT -> snake.setDirection(Direction.LEFT);
case KeyEvent.VK_RIGHT -> snake.setDirection(Direction.RIGHT);
case KeyEvent.VK_W -> snake1.setDirection(Direction.UP);
case KeyEvent.VK_S -> snake1.setDirection(Direction.DOWN);
case KeyEvent.VK_A -> snake1.setDirection(Direction.LEFT);
case KeyEvent.VK_D -> snake1.setDirection(Direction.RIGHT);
}
}
moveBoolean = true;
}
});
}
// 多线程船舰蛇
@Override
public void run() {
if (signSnake == 1) {
signSnake++;
Thread.currentThread().setName("->红色方<-");
initTimer(snake, snake1, Thread.currentThread().getName());
} else if (signSnake