Java 贪吃蛇游戏代码示例 - 简单易懂
下面是一个简单的贪吃蛇游戏的Java代码示例:\n\njava\nimport javax.swing.*;\nimport java.awt.*;\nimport java.awt.event.KeyEvent;\nimport java.awt.event.KeyListener;\nimport java.util.ArrayList;\nimport java.util.Random;\n\npublic class SnakeGame extends JFrame implements KeyListener {\n private final int WIDTH = 500;\n private final int HEIGHT = 500;\n\n private ArrayList<Point> snake;\n private Point fruit;\n private int direction;\n\n public SnakeGame() {\n setTitle("贪吃蛇游戏");\n setSize(WIDTH, HEIGHT);\n setDefaultCloseOperation(EXIT_ON_CLOSE);\n setResizable(false);\n setLocationRelativeTo(null);\n\n addKeyListener(this);\n\n snake = new ArrayList<>();\n snake.add(new Point(WIDTH / 2, HEIGHT / 2));\n\n generateFruit();\n\n direction = KeyEvent.VK_UP;\n\n Timer timer = new Timer(100, e -> {\n move();\n checkCollision();\n repaint();\n });\n timer.start();\n }\n\n private void generateFruit() {\n Random random = new Random();\n int x = random.nextInt(WIDTH / 10) * 10;\n int y = random.nextInt(HEIGHT / 10) * 10;\n fruit = new Point(x, y);\n }\n\n private void move() {\n Point head = snake.get(0);\n int x = head.x;\n int y = head.y;\n\n switch (direction) {\n case KeyEvent.VK_UP:\n y -= 10;\n break;\n case KeyEvent.VK_DOWN:\n y += 10;\n break;\n case KeyEvent.VK_LEFT:\n x -= 10;\n break;\n case KeyEvent.VK_RIGHT:\n x += 10;\n break;\n }\n\n snake.add(0, new Point(x, y));\n snake.remove(snake.size() - 1);\n }\n\n private void checkCollision() {\n Point head = snake.get(0);\n\n if (head.equals(fruit)) {\n snake.add(new Point(fruit.x, fruit.y));\n generateFruit();\n } else if (head.x < 0 || head.x >= WIDTH || head.y < 0 || head.y >= HEIGHT) {\n gameOver();\n } else {\n for (int i = 1; i < snake.size(); i++) {\n if (head.equals(snake.get(i))) {\n gameOver();\n break;\n }\n }\n }\n }\n\n private void gameOver() {\n JOptionPane.showMessageDialog(this, "游戏结束", "游戏结束", JOptionPane.INFORMATION_MESSAGE);\n System.exit(0);\n }\n\n @Override\n public void paint(Graphics g) {\n super.paint(g);\n\n g.setColor(Color.BLACK);\n g.fillRect(0, 0, WIDTH, HEIGHT);\n\n g.setColor(Color.WHITE);\n for (Point point : snake) {\n g.fillRect(point.x, point.y, 10, 10);\n }\n\n g.setColor(Color.RED);\n g.fillRect(fruit.x, fruit.y, 10, 10);\n }\n\n @Override\n public void keyTyped(KeyEvent e) {\n }\n\n @Override\n public void keyPressed(KeyEvent e) {\n direction = e.getKeyCode();\n }\n\n @Override\n public void keyReleased(KeyEvent e) {\n }\n\n public static void main(String[] args) {\n SwingUtilities.invokeLater(() -> {\n SnakeGame snakeGame = new SnakeGame();\n snakeGame.setVisible(true);\n });\n }\n}\n\n\n这段代码使用了Java的Swing库来实现一个简单的贪吃蛇游戏。游戏窗口的大小为500x500像素,玩家可以使用键盘的上、下、左、右箭头键来控制贪吃蛇的移动方向。每当贪吃蛇吃到食物时,它的长度会增加,并在随机位置生成新的食物。当贪吃蛇碰到边界或者自身时,游戏结束。\n\n希望这个示例对你有帮助!
原文地址: https://www.cveoy.top/t/topic/prJD 著作权归作者所有。请勿转载和采集!