117.info
人生若只如初见

Java实现贪吃蛇游戏代码怎么写

以下是一个简单的Java实现贪吃蛇游戏的代码示例:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SnakeGame extends JFrame {
private Snake snake;
private Apple apple;
private Timer timer;
public SnakeGame() {
snake = new Snake();
apple = new Apple();
timer = new Timer(100, new ActionListener() {
public void actionPerformed(ActionEvent e) {
snake.move();
if (snake.collidesWith(apple)) {
snake.grow();
apple.generate();
}
if (snake.collidesWithSelf() || snake.outOfBounds()) {
gameOver();
}
repaint();
}
});
}
public void startGame() {
timer.start();
}
public void gameOver() {
timer.stop();
JOptionPane.showMessageDialog(this, "Game Over!", "Game Over", JOptionPane.INFORMATION_MESSAGE);
}
public void paint(Graphics g) {
super.paint(g);
snake.paint(g);
apple.paint(g);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
SnakeGame game = new SnakeGame();
game.setTitle("Snake Game");
game.setSize(500, 500);
game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
game.setResizable(false);
game.setVisible(true);
game.startGame();
}
});
}
}
class Snake {
private static final int SIZE = 20;
private static final int MAX_SIZE = 1000;
private Point[] body;
private int length;
private int direction;
public Snake() {
body = new Point[MAX_SIZE];
length = 1;
direction = KeyEvent.VK_RIGHT;
body[0] = new Point(0, 0);
}
public void move() {
for (int i = length - 1; i > 0; i--) {
body[i] = new Point(body[i - 1]);
}
switch (direction) {
case KeyEvent.VK_UP:
body[0].y -= SIZE;
break;
case KeyEvent.VK_DOWN:
body[0].y += SIZE;
break;
case KeyEvent.VK_LEFT:
body[0].x -= SIZE;
break;
case KeyEvent.VK_RIGHT:
body[0].x += SIZE;
break;
}
}
public boolean collidesWith(Apple apple) {
return body[0].equals(apple.getPosition());
}
public boolean collidesWithSelf() {
for (int i = 1; i < length; i++) {
if (body[0].equals(body[i])) {
return true;
}
}
return false;
}
public boolean outOfBounds() {
return body[0].x < 0 || body[0].x >= 500 || body[0].y < 0 || body[0].y >= 500;
}
public void grow() {
if (length < MAX_SIZE) {
body[length++] = new Point();
}
}
public void paint(Graphics g) {
g.setColor(Color.GREEN);
for (int i = 0; i < length; i++) {
g.fillRect(body[i].x, body[i].y, SIZE, SIZE);
}
}
}
class Apple {
private static final int SIZE = 20;
private Point position;
public Apple() {
position = new Point();
generate();
}
public void generate() {
int x = (int) (Math.random() * 25) * SIZE;
int y = (int) (Math.random() * 25) * SIZE;
position.setLocation(x, y);
}
public Point getPosition() {
return position;
}
public void paint(Graphics g) {
g.setColor(Color.RED);
g.fillOval(position.x, position.y, SIZE, SIZE);
}
}

这段代码包含了SnakeGame类、Snake类和Apple类,SnakeGame类负责处理游戏的逻辑和绘制,Snake类和Apple类分别代表贪吃蛇和苹果。

在SnakeGame类中,使用了JFrame和Timer来进行界面绘制和定时更新。Snake类中包含了贪吃蛇的移动、碰撞检测和绘制等方法。Apple类中包含了苹果的生成和绘制方法。

这只是一个简单的示例,你可以根据需要进行修改和扩展。

未经允许不得转载 » 本文链接:https://www.117.info/ask/feb2aAzsLBg5UAVI.html

推荐文章

  • java中异常类会影响性能吗

    在Java中,异常类本身不会对性能产生显著影响。异常处理机制是为了在程序运行时处理错误或异常情况,而不是为了优化性能。然而,在使用异常时,需要注意以下几点...

  • java中异常类如何避免

    在Java中,避免异常的最好方法是编写健壮的代码并遵循一些最佳实践。以下是一些建议: 预期和处理异常:使用try-catch语句来捕获和处理可能发生的异常。确保处理...

  • java中异常类有哪些常见类型

    Java中的异常类主要分为两大类:受检异常(Checked Exceptions)和非受检异常(Unchecked Exceptions)。以下是具体的异常类型:
    受检异常(Checked Except...

  • java中异常类怎么捕获

    在Java中,我们使用try-catch语句来捕获异常。当程序执行过程中遇到异常时,Java运行时系统会抛出一个异常对象。你可以使用try块来包含可能引发异常的代码,然后...

  • html中flash播放器代码怎么写

    在 HTML 中编写 Flash 播放器的代码,可以使用或标签来嵌入 Flash 文件。这是一个示例代码: Flash 播放器 在上面的代码中,你需要将 "your_flash_file.swf" 替换...

  • java中executeQuery()方法如何使用

    在Java中,executeQuery()方法是用于执行SELECT语句并返回查询结果的方法。使用executeQuery()方法的步骤如下:1. 创建一个Connection对象,用于与数据库建立连接...

  • mvc项目如何部署在云服务器上

    将MVC项目部署在云服务器上,可以按照以下步骤进行操作:1. 选择云服务器:选择一家云服务提供商,根据项目需求选择适合的服务器配置。2. 购买云服务器:在云服务...

  • 云服务器如何搭建的

    要搭建云服务器,首先需要选择云服务提供商,以下是搭建云服务器的一般步骤:1. 注册账号:根据选择的云服务提供商,在其官方网站上注册一个账号。2. 选择地域和...