From 57bf0dedb181a3fca0688f43ce3701e571c01c75 Mon Sep 17 00:00:00 2001 From: ppx98yace <3576677045@qq.com> Date: Sat, 29 Mar 2025 23:22:16 +0800 Subject: [PATCH] ADD file via upload --- src/GamePanel.java | 106 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 src/GamePanel.java diff --git a/src/GamePanel.java b/src/GamePanel.java new file mode 100644 index 0000000..fe71479 --- /dev/null +++ b/src/GamePanel.java @@ -0,0 +1,106 @@ +package com.snakegame; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; + +public class GamePanel extends JPanel { + private final Snake snake1; + private final Snake snake2; + private final Food food; + private final GameConfig config; + private final GameController gameController; + private final SoundManager soundManager; + private int score1 = 0; + private int score2 = 0; + + public GamePanel(GameConfig config, SoundManager soundManager) { + this.config = config; + this.soundManager = soundManager; + setPreferredSize(new Dimension( + config.getWidth() * config.getTileSize(), + config.getHeight() * config.getTileSize() + )); + setBackground(config.getBackgroundColor()); + + snake1 = new Snake( + config.getStartX1(), + config.getStartY1(), + config.getSnakeColors1(), + config.isGradientEnabled() + ); + + if (config.getGameMode().equals("双人")) { + snake2 = new Snake( + config.getStartX2(), + config.getStartY2(), + config.getSnakeColors2(), + config.isGradientEnabled() + ); + } else { + snake2 = null; + } + + food = new Food(config); + + gameController = new GameController(this); + + addKeyListener(new KeyAdapter() { + @Override + public void keyPressed(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_SPACE) { + gameController.pause(); + } else if (config.getGameMode().equals("双人")) { + if (e.getKeyCode() == KeyEvent.VK_UP) { + snake1.handleKeyPress(e.getKeyCode()); + } else if (e.getKeyCode() == KeyEvent.VK_DOWN) { + snake1.handleKeyPress(e.getKeyCode()); + } else if (e.getKeyCode() == KeyEvent.VK_LEFT) { + snake1.handleKeyPress(e.getKeyCode()); + } else if (e.getKeyCode() == KeyEvent.VK_RIGHT) { + snake1.handleKeyPress(e.getKeyCode()); + } else if (e.getKeyCode() == KeyEvent.VK_W) { + snake2.handleKeyPress(KeyEvent.VK_UP); + } else if (e.getKeyCode() == KeyEvent.VK_S) { + snake2.handleKeyPress(KeyEvent.VK_DOWN); + } else if (e.getKeyCode() == KeyEvent.VK_A) { + snake2.handleKeyPress(KeyEvent.VK_LEFT); + } else if (e.getKeyCode() == KeyEvent.VK_D) { + snake2.handleKeyPress(KeyEvent.VK_RIGHT); + } + } else { + snake1.handleKeyPress(e.getKeyCode()); + } + } + }); + setFocusable(true); + } + + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + snake1.draw(g, config.getTileSize()); + if (snake2 != null) { + snake2.draw(g, config.getTileSize()); + } + food.draw(g, config.getTileSize()); + } + + public void increaseScore1() { + score1 += 10; + } + + public void increaseScore2() { + score2 += 10; + } + + public Snake getSnake1() { return snake1; } + public Snake getSnake2() { return snake2; } + public Food getFood() { return food; } + public GameConfig getConfig() { return config; } + public GameController getGameController() { return gameController; } + public SoundManager getSoundManager() { return soundManager; } + public int getScore1() { return score1; } + public int getScore2() { return score2; } +} \ No newline at end of file