首页下载资源游戏开发高级开发简单游戏制作,期末项目答辩小组作业

ZIP高级开发简单游戏制作,期末项目答辩小组作业

2402_82740483691.1KB需要积分:1

资源文件列表:

project.zip 大约有52个文件
  1. project/
  2. project/.idea/
  3. project/.idea/.gitignore 50B
  4. project/.idea/misc.xml 206B
  5. project/.idea/modules.xml 273B
  6. project/.idea/project.iml 429B
  7. project/.idea/uiDesigner.xml 8.71KB
  8. project/.idea/workspace.xml 1.89KB
  9. project/Explosion.java 1.31KB
  10. project/explosion.PNG 100.09KB
  11. project/game_log.html
  12. project/game_log.html.1
  13. project/grasses.gif 106.86KB
  14. project/MainApp.java 8KB
  15. project/out/
  16. project/out/production/
  17. project/out/production/project/
  18. project/out/production/project/.idea/
  19. project/out/production/project/.idea/.gitignore 50B
  20. project/out/production/project/.idea/misc.xml 206B
  21. project/out/production/project/.idea/modules.xml 273B
  22. project/out/production/project/.idea/project.iml 429B
  23. project/out/production/project/.idea/workspace.xml 1.91KB
  24. project/out/production/project/Explosion.class 1.61KB
  25. project/out/production/project/explosion.PNG 100.09KB
  26. project/out/production/project/game_log.html
  27. project/out/production/project/game_log.html.1
  28. project/out/production/project/grasses.gif 106.86KB
  29. project/out/production/project/MainApp$1.class 1.25KB
  30. project/out/production/project/MainApp.class 8.1KB
  31. project/out/production/project/Professor.class 2.56KB
  32. project/out/production/project/professor.png 25.63KB
  33. project/out/production/project/splash.png 74.44KB
  34. project/out/production/project/Student1.class 3.05KB
  35. project/out/production/project/student1.png 11.56KB
  36. project/out/production/project/Student2.class 2.93KB
  37. project/out/production/project/student2.png 12.24KB
  38. project/out/production/project/Students.class 257B
  39. project/out/production/project/util/
  40. project/out/production/project/util/Direction.class 1.07KB
  41. project/out/production/project/util/LoggerUtil.class 1.78KB
  42. project/Professor.java 2.44KB
  43. project/professor.png 25.63KB
  44. project/splash.png 74.44KB
  45. project/Student1.java 2.3KB
  46. project/student1.png 11.56KB
  47. project/Student2.java 3.13KB
  48. project/student2.png 12.24KB
  49. project/Students.java 300B
  50. project/util/
  51. project/util/Direction.java 73B
  52. project/util/LoggerUtil.java 1.09KB

资源介绍:

期末项目答辩
import javax.imageio.ImageIO; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Random; import java.util.logging.FileHandler; import java.util.logging.Level; import java.util.logging.Logger; import java.util.logging.SimpleFormatter; public class MainApp extends JPanel { private ArrayList students; private List explosions; private Professor professor; private BufferedImage splashImage; // splash.png 初始背景图片 private BufferedImage gameBackground; // grasses.gif 游戏背景图片 private Random random; private int score; private int timeLeft; private boolean showSplash; private boolean gameStarted; private Logger logger; public MainApp() { students = new ArrayList<>(); explosions = new ArrayList<>(); random = new Random(); score = 0; timeLeft = 60; showSplash = true; gameStarted = false; setupLogger(); try { splashImage = ImageIO.read(new File("splash.png")); // 初始背景图片 gameBackground = ImageIO.read(new File("grasses.gif")); // 游戏背景图片 } catch (IOException e) { e.printStackTrace(); } professor = new Professor("professor.png", 100, 100); setFocusable(true); requestFocusInWindow(); addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_SPACE) { if (showSplash) { showSplash = false; // 停止显示 splash.png repaint(); } else if (!gameStarted) { gameStarted = true; // 开始游戏 generateRandomStudents(); repaint(); } } else if (gameStarted) { switch (e.getKeyCode()) { case KeyEvent.VK_UP: professor.moveUp(getHeight()); break; case KeyEvent.VK_DOWN: professor.moveDown(getHeight()); break; case KeyEvent.VK_LEFT: professor.moveLeft(getWidth()); break; case KeyEvent.VK_RIGHT: professor.moveRight(getWidth()); break; } repaint(); checkCollisions(); } } }); // 计时器,用于显示初始背景 3 秒后切换到 grasses.gif Timer splashTimer = new Timer(3000, e -> { if (showSplash) { showSplash = false; repaint(); } }); splashTimer.setRepeats(false); splashTimer.start(); new Timer(1000, e -> { if (gameStarted) { timeLeft--; if (timeLeft <= 0) { endGame(); } } repaint(); }).start(); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); if (showSplash) { g.drawImage(splashImage, 0, 0, getWidth(), getHeight(), null); // 显示初始背景 } else if (!gameStarted) { g.drawImage(gameBackground, 0, 0, getWidth(), getHeight(), null); // 显示游戏背景 g.setColor(Color.WHITE); g.setFont(new Font("Arial", Font.BOLD, 30)); g.drawString("Press SPACE to start the game", getWidth() / 4, getHeight() / 2); } else { g.drawImage(gameBackground, 0, 0, getWidth(), getHeight(), null); professor.draw(g); // 绘制教授 for (Students student : students) { student.draw(g); // 绘制学生 } for (Explosion explosion : explosions) { explosion.draw(g); // 绘制爆炸效果 } // 显示时间倒计时在左上方 g.setColor(Color.BLUE); g.fillRect(10, 10, 150, 30); g.setColor(Color.RED); g.drawString("Time: " + timeLeft, 20, 30); // 显示积分在右上方 g.setColor(Color.GREEN); g.fillRect(getWidth() - 160, 10, 150, 30); g.setColor(Color.BLACK); g.drawString("Score: " + score, getWidth() - 150, 30); } } private void generateRandomStudents() { students.clear(); int panelWidth = getWidth(); int panelHeight = getHeight(); if (panelWidth <= 0 || panelHeight <= 0) { System.err.println("Error: Invalid game window size."); return; } int studentType = random.nextInt(2); int x = random.nextInt(panelWidth - 64); int y = random.nextInt(panelHeight - 64); if (studentType == 0) { Student1 student1 = new Student1("student1.png", x, y); students.add(student1); } else { Student2 student2 = new Student2("student2.png", x, y); students.add(student2); } } private void checkCollisions() { Iterator iterator = students.iterator(); while (iterator.hasNext()) { Students student = iterator.next(); if (professor.getBounds().intersects(student.getBounds())) { handleCollision(student.getX(), student.getY()); iterator.remove(); score+=random.nextInt(9); } } if (students.isEmpty()) { generateRandomStudents(); } } private void handleCollision(int x, int y) { explosions.add(new Explosion("explosion.png", x, y)); Timer explosionTimer = new Timer(500, e -> explosions.remove(0)); explosionTimer.setRepeats(false); explosionTimer.start(); } private void endGame() { gameStarted = false; String message = "Game Over! Your score: " + score; int option = JOptionPane.showConfirmDialog(this, message + "\nDo you want to play again?", "Game Over", JOptionPane.YES_NO_OPTION); if (option == JOptionPane.YES_OPTION) { resetGame(); } else { System.exit(0); } } private void resetGame() { score = 0; timeLeft = 60; students.clear(); explosions.clear(); professor.setPosition(100, 100); showSplash = true; gameStarted = false; repaint(); // 重启初始背景计时器 Timer splashTimer = new Timer(3000, e -> { if (showSplash) { showSplash = false; repaint(); } }); splashTimer.setRepeats(false); splashTimer.start(); } private void setupLogger() { logger = Logger.getLogger("GameLogger"); try { FileHandler fileHandler = new FileHandler("game_log.html"); fileHandler.setFormatter(new SimpleFormatter()); logger.addHandler(fileHandler); } catch (IOException e) { e.printStackTrace(); } logger.setLevel(Level.INFO); } public static void main(String[] args) { JFrame frame = new JFrame("Zhu Haoyuan-20232099 and Zhou Sian-20232036"); Mai
100+评论
captcha