写一个基于Java的贪吃蛇系统
时间: 2023-02-24 08:22:11 浏览: 210
贪吃蛇是一款经典的视频游戏,可以使用多种编程语言来实现。如果你想用Java编写贪吃蛇游戏,可以从以下几个方面入手:
1. 图形界面:使用Java的图形界面工具包,例如JavaFX或Swing,来创建游戏界面。
2. 游戏逻辑:编写代码来实现游戏的逻辑,包括蛇的移动,食物的生成,碰撞检测等。
3. 游戏循环:利用Java的线程机制,实现游戏的循环,以达到游戏的不断进行。
总的来说,编写贪吃蛇游戏需要一定的编程知识和Java基础,但是它是一个很好的编程练习项目。
相关问题
写一个基于JAVA的贪吃蛇代码
好的,以下是一个简单的基于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();
}
}
```
希望能够帮到你。如果有任何疑问,可以随时问我。
写一个基于java的贪吃蛇游戏的代码
以下是一个基于 Java 的简单贪吃蛇游戏的代码:
```java
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.LinkedList;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class SnakeGame extends JPanel implements Runnable, KeyListener {
private static final long serialVersionUID = 1L;
private static final int WIDTH = 500;
private static final int HEIGHT = 500;
private Thread thread;
private boolean isRunning;
private LinkedList<Point> snake;
private int direction;
private Point fruit;
public SnakeGame() {
setPreferredSize(new Dimension(WIDTH, HEIGHT));
setFocusable(true);
addKeyListener(this);
snake = new LinkedList<Point>();
snake.add(new Point(0, 0));
direction = KeyEvent.VK_RIGHT;
fruit = new Point(0, 0);
placeFruit();
isRunning = true;
thread = new Thread(this);
thread.start();
}
public void run() {
while (isRunning) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
update();
repaint();
}
}
private void update() {
Point head = snake.peekFirst();
Point newPoint = head;
switch (direction) {
case KeyEvent.VK_LEFT:
newPoint = new Point(head.x - 1, head.y);
break;
case KeyEvent.VK_RIGHT:
newPoint = new Point(head.x + 1, head.y);
break;
case KeyEvent.VK_UP:
newPoint = new Point(head.x, head.y - 1);
break;
case KeyEvent.VK_DOWN:
newPoint = new Point(head.x, head.y + 1);
break;
}
if (newPoint.equals(fruit)) {
snake.addFirst(newPoint);
placeFruit();
} else {
snake.removeLast();
if (snake.contains(newPoint)) {
isRunning = false;
}
snake.addFirst(newPoint);
}
if (head.x < 0 || head.x >= WIDTH || head.y < 0 || head.y >= HEIGHT) {
isRunning = false;
}
}
private void placeFruit() {
Random rand = new Random();
int x = rand.nextInt(WIDTH);
int y = rand.nextInt(HEIGHT);
fruit.setLocation(x, y);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.GREEN);
for (Point p : snake) {
g.fillRect(p.x, p.y, 1, 1);
}
g.setColor(Color.RED);
g.fillRect(fruit.x, fruit.y, 1, 1);
}
public void keyPressed(KeyEvent e) {
int newDirection = e.getKeyCode();
if (newDirection == KeyEvent.VK_LEFT && direction != KeyEvent.VK_RIGHT) {
direction = newDirection;
} else if (newDirection == KeyEvent.VK_RIGHT && direction != KeyEvent.VK_LEFT) {
direction = newDirection;
} else if (newDirection == KeyEvent.VK_UP && direction != KeyEvent.VK_DOWN) {
direction = newDirection;
} else if (newDirection == KeyEvent.VK_DOWN && direction != KeyEvent.VK_UP) {
direction = newDirection;
}
}
public void keyTyped(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
}
public static void main(String[] args) {
JFrame frame = new JFrame("Snake Game");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.add(new SnakeGame());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
```
这个游戏使用了 Java Swing 组件进行界面绘制,通过 `LinkedList` 存储贪吃蛇的每一个节点,并使用 `Point` 类型记录每个节点的坐标。通过 `KeyListener` 监听键盘事件,改变贪吃蛇的运动方向。游戏中使用了一个 `Thread` 对游戏进行更新,保证游戏的流畅性。
阅读全文