当前位置: 首页 > 建站教程

Java怎么实现贪吃蛇游戏

时间:2026-01-31 10:53:26

要实现贪吃蛇游戏,可以使用Java语言编写。下面是一个简单的示例代码:

import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import java.awt.FontMetrics;import java.awt.Graphics;import java.awt.Image;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import javax.swing.ImageIcon;import javax.swing.JPanel;import javax.swing.Timer;public class GameBoard extends JPanel implements ActionListener {private final int B_WIDTH = 300;private final int B_HEIGHT = 300;private final int DOT_SIZE = 10;private final int ALL_DOTS = 900;private final int RAND_POS = 29;private final int DELAY = 140;private final int x[] = new int[ALL_DOTS];private final int y[] = new int[ALL_DOTS];private int dots;private int apple_x;private int apple_y;private boolean leftDirection = false;private boolean rightDirection = true;private boolean upDirection = false;private boolean downDirection = false;private boolean inGame = true;private Timer timer;private Image ball;private Image apple;private Image head;public GameBoard() {initBoard();}private void initBoard() {addKeyListener(new TAdapter());setBackground(Color.black);setFocusable(true);setPreferredSize(new Dimension(B_WIDTH, B_HEIGHT));loadImages();initGame();}private void loadImages() {ImageIcon iid = new ImageIcon("src/resources/dot.png");ball = iid.getImage();ImageIcon iia = new ImageIcon("src/resources/apple.png");apple = iia.getImage();ImageIcon iih = new ImageIcon("src/resources/head.png");head = iih.getImage();}private void initGame() {dots = 3;for (int z = 0; z < dots; z++) {x[z] = 50 - z * 10;y[z] = 50;}locateApple();timer = new Timer(DELAY, this);timer.start();}@Overridepublic void paintComponent(Graphics g) {super.paintComponent(g);doDrawing(g);}private void doDrawing(Graphics g) {if (inGame) {g.drawImage(apple, apple_x, apple_y, this);for (int z = 0; z < dots; z++) {if (z == 0) {g.drawImage(head, x[z], y[z], this);} else {g.drawImage(ball, x[z], y[z], this);}}Toolkit.getDefaultToolkit().sync();} else {gameOver(g);}}private void gameOver(Graphics g) {String msg = "Game Over";Font small = new Font("Helvetica", Font.BOLD, 14);FontMetrics metr = getFontMetrics(small);g.setColor(Color.white);g.setFont(small);g.drawString(msg, (B_WIDTH - metr.stringWidth(msg)) / 2, B_HEIGHT / 2);}private void checkApple() {if ((x[0] == apple_x) && (y[0] == apple_y)) {dots++;locateApple();}}private void move() {for (int z = dots; z > 0; z--) {x[z] = x[(z - 1)];y[z] = y[(z - 1)];}if (leftDirection) {x[0] -= DOT_SIZE;}if (rightDirection) {x[0] += DOT_SIZE;}if (upDirection) {y[0] -= DOT_SIZE;}if (downDirection) {y[0] += DOT_SIZE;}}private void checkCollision() {for (int z = dots; z > 0; z--) {if ((z > 4) && (x[0] == x[z]) && (y[0] == y[z])) {inGame = false;}}if (y[0] >= B_HEIGHT) {inGame = false;}if (y[0] < 0) {inGame = false;}if (x[0] >= B_WIDTH) {inGame = false;}if (x[0] < 0) {inGame = false;}if (!inGame) {timer.stop();}}


上一篇:JavaScript怎么实现sleep睡眠函数
下一篇:c#中executereader执行查询的方法是什么
java
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素