eclipse贪吃蛇代码
时间: 2024-05-26 09:08:26 浏览: 14
Eclipse是一个著名的Java IDE,也可以用于其他编程语言。如果你想学习Java编程,可以使用Eclipse编写贪吃蛇游戏的代码。下面是一个简单的Java贪吃蛇游戏的示例代码,你可以在Eclipse中创建一个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 SnakeGame 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 SNAKE_INIT_LENGTH = 5;
private static final int SNAKE_INIT_X = 100;
private static final int SNAKE_INIT_Y = 100;
// 蛇的移动速度
private static final int SPEED = 100;
// 食物的大小和初始位置
private static final int FOOD_SIZE = 10;
private static final int FOOD_INIT_X = 200;
private static final int FOOD_INIT_Y = 200;
// 定义蛇和食物
private Point[] snake;
private int direction;
private boolean isMoving;
private Point food;
// 随机数生成器
private Random random;
// 构造函数
public SnakeGame() {
// 初始化界面大小
setPreferredSize(new java.awt.Dimension(WIDTH, HEIGHT));
// 初始化蛇和食物
snake = new Point[SNAKE_INIT_LENGTH];
for (int i = 0; i < SNAKE_INIT_LENGTH; i++) {
snake[i] = new Point(SNAKE_INIT_X - i * 10, SNAKE_INIT_Y);
}
direction = KeyEvent.VK_RIGHT;
isMoving = true;
food = new Point(FOOD_INIT_X, FOOD_INIT_Y);
// 初始化随机数生成器
random = new Random();
// 添加键盘事件监听器
addKeyListener(this);
setFocusable(true);
// 启动游戏线程
Thread thread = new Thread(this);
thread.start();
}
// 绘制界面
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.RED);
g.fillRect(food.x, food.y, FOOD_SIZE, FOOD_SIZE);
g.setColor(Color.BLACK);
for (int i = 0; i < snake.length; i++) {
g.fillRect(snake[i].x, snake[i].y, 10, 10);
}
}
// 处理键盘事件
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if ((key == KeyEvent.VK_LEFT || key == KeyEvent.VK_A) && direction != KeyEvent.VK_RIGHT) {
direction = KeyEvent.VK_LEFT;
} else if ((key == KeyEvent.VK_RIGHT || key == KeyEvent.VK_D) && direction != KeyEvent.VK_LEFT) {
direction = KeyEvent.VK_RIGHT;
} else if ((key == KeyEvent.VK_UP || key == KeyEvent.VK_W) && direction != KeyEvent.VK_DOWN) {
direction = KeyEvent.VK_UP;
} else if ((key == KeyEvent.VK_DOWN || key == KeyEvent.VK_S) && direction != KeyEvent.VK_UP) {
direction = KeyEvent.VK_DOWN;
}
}
// 游戏线程主循环
public void run() {
while (true) {
if (isMoving) {
move();
checkCollision();
checkFood();
}
repaint();
try {
Thread.sleep(SPEED);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
// 蛇移动一格
private void move() {
for (int i = snake.length - 1; i > 0; i--) {
snake[i].x = snake[i - 1].x;
snake[i].y = snake[i - 1].y;
}
switch (direction) {
case KeyEvent.VK_LEFT:
snake.x -= 10;
break;
case KeyEvent.VK_RIGHT:
snake.x += 10;
break;
case KeyEvent.VK_UP:
snake.y -= 10;
break;
case KeyEvent.VK_DOWN:
snake.y += 10;
break;
}
}
// 检测蛇是否撞到边界或者自己
private void checkCollision() {
if (snake.x < 0 || snake.x >= WIDTH || snake.y < 0 || snake.y >= HEIGHT) {
isMoving = false;
return;
}
for (int i = 1; i < snake.length; i++) {
if (snake.x == snake[i].x && snake.y == snake[i].y) {
isMoving = false;
return;
}
}
}
// 检测是否吃到食物
private void checkFood() {
if (snake.x == food.x && snake.y == food.y) {
Point[] newSnake = new Point[snake.length + 1];
System.arraycopy(snake, 0, newSnake, 0, snake.length);
newSnake[snake.length] = new Point(food.x, food.y);
snake = newSnake;
food.x = random.nextInt(WIDTH / 10) * 10;
food.y = random.nextInt(HEIGHT / 10) * 10;
}
}
public static void main(String[] args) {
JFrame frame = new JFrame("贪吃蛇游戏");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new SnakeGame());
frame.pack();
frame.setVisible(true);
}
// 没有实现的方法
public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}
}
```