写一个基于JAVA的贪吃蛇代码
时间: 2024-05-07 13:17:08 浏览: 11
好的,以下是一个简单的基于JAVA的贪吃蛇代码:
```java
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Snake extends JPanel implements KeyListener, Runnable {
private static final long serialVersionUID = 1L;
private static final int WIDTH = 500;
private static final int HEIGHT = 500;
private static final int DOT_SIZE = 10;
private static final int RAND_POS = 49;
private static final int DELAY = 100;
private Thread thread;
private boolean isRunning;
private boolean isPaused;
private Point[] snake;
private int size;
private Point food;
private int direction;
public Snake() {
JFrame frame = new JFrame("贪吃蛇");
frame.setSize(WIDTH, HEIGHT);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.addKeyListener(this);
frame.setResizable(false);
frame.add(this);
frame.setVisible(true);
snake = new Point[100];
size = 3;
for(int i = 0; i < size; i++) {
snake[i] = new Point(50 - i * DOT_SIZE, 50);
}
direction = KeyEvent.VK_RIGHT;
spawnFood();
thread = new Thread(this);
isRunning = true;
isPaused = false;
thread.start();
}
public void run() {
while(isRunning) {
if(!isPaused) {
move();
checkCollision();
}
repaint();
try {
Thread.sleep(DELAY);
} catch(InterruptedException e) {
e.printStackTrace();
}
}
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.RED);
g.fillRect(food.x, food.y, DOT_SIZE, DOT_SIZE);
for(int i = 0; i < size; i++) {
g.setColor(Color.BLACK);
g.fillRect(snake[i].x, snake[i].y, DOT_SIZE, DOT_SIZE);
}
}
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_SPACE) {
if(isPaused) {
isPaused = false;
} else {
isPaused = true;
}
} else if(e.getKeyCode() == KeyEvent.VK_LEFT && direction != KeyEvent.VK_RIGHT) {
direction = KeyEvent.VK_LEFT;
} else if(e.getKeyCode() == KeyEvent.VK_RIGHT && direction != KeyEvent.VK_LEFT) {
direction = KeyEvent.VK_RIGHT;
} else if(e.getKeyCode() == KeyEvent.VK_UP && direction != KeyEvent.VK_DOWN) {
direction = KeyEvent.VK_UP;
} else if(e.getKeyCode() == KeyEvent.VK_DOWN && direction != KeyEvent.VK_UP) {
direction = KeyEvent.VK_DOWN;
}
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
}
private void spawnFood() {
Random rand = new Random();
int x = rand.nextInt(RAND_POS) * DOT_SIZE;
int y = rand.nextInt(RAND_POS) * DOT_SIZE;
food = new Point(x, y);
}
private void move() {
for(int i = size - 1; i > 0; i--) {
snake[i].x = snake[i - 1].x;
snake[i].y = snake[i - 1].y;
}
if(direction == KeyEvent.VK_LEFT) {
snake[0].x -= DOT_SIZE;
} else if(direction == KeyEvent.VK_RIGHT) {
snake[0].x += DOT_SIZE;
} else if(direction == KeyEvent.VK_UP) {
snake[0].y -= DOT_SIZE;
} else if(direction == KeyEvent.VK_DOWN) {
snake[0].y += DOT_SIZE;
}
if(snake[0].equals(food)) {
size++;
snake[size - 1] = new Point(snake[size - 2].x, snake[size - 2].y);
spawnFood();
}
}
private void checkCollision() {
for(int i = size - 1; i > 0; i--) {
if(snake[0].equals(snake[i])) {
isRunning = false;
}
}
if(snake[0].x < 0 || snake[0].x > WIDTH - DOT_SIZE) {
isRunning = false;
}
if(snake[0].y < 0 || snake[0].y > HEIGHT - DOT_SIZE) {
isRunning = false;
}
}
public static void main(String[] args) {
new Snake();
}
}
```
希望能够帮到你。如果有任何疑问,可以随时问我。