21xrx.com
2025-03-29 03:10:47 Saturday
文章检索 我的文章 写文章
Java期末作品设计小游戏
2023-06-11 16:37:11 深夜i     22     0
Java 小游戏 面向对象编程

在本学期的Java程序设计课程中,我们学习了Java编程语言的基本语法和面向对象编程的概念。为了巩固所学知识并展示自己的编程能力,我们需要完成一个Java期末作品。我选择设计一个简单但有趣的小游戏。

游戏的基本规则是玩家通过控制一个小球不断躲避障碍物,尽可能地吃到越多的水果。如果小球碰到障碍物或超过游戏界面的边界,游戏就结束了。同时,随着游戏的进行,游戏速度会不断加快,难度也会逐渐增加。

下面是游戏主要的代码实现:

public class GamePanel extends JPanel implements ActionListener {
  private Timer timer;
  private Ball ball;
  private ArrayList
  obstacles;
 
  private Fruit fruit;
  
  public GamePanel() {
    // 初始化游戏界面和各个对象
    setPreferredSize(new Dimension(400, 600));
    setBackground(Color.WHITE);
    ball = new Ball();
    obstacles = new ArrayList
  ();
 
    fruit = new Fruit();
    addKeyListener(new MyKeyListener());
    setFocusable(true);
    timer = new Timer(20, this);
    timer.start();
  }
  
  @Override
  public void paintComponent(Graphics g) {
    super.paintComponent(g);
    ball.draw(g);
    fruit.draw(g);
    for (Obstacle obs: obstacles) {
      obs.draw(g);
    }
  }
  
  @Override
  public void actionPerformed(ActionEvent e) {
    // 游戏逻辑的更新和处理
    ball.move();
    fruit.move();
    if (ball.collidesWith(fruit)) {
      fruit.reset();
      ball.increaseScore();
    }
    for (Obstacle obs: obstacles) {
      obs.move();
      if (ball.collidesWith(obs)) {
        timer.stop();
        JOptionPane.showMessageDialog(this, "Game Over");
      }
    }
    if (ball.isOutOfBounds()) {
      timer.stop();
      JOptionPane.showMessageDialog(this, "Game Over");
    }
    if (obstacles.size() < 3 && Math.random() < 0.1) {
      obstacles.add(new Obstacle());
    }
    repaint();
  }
  
  private class MyKeyListener extends KeyAdapter {
    @Override
    public void keyPressed(KeyEvent e) {
      // 根据按键改变小球的速度和方向
      switch (e.getKeyCode()) {
        case KeyEvent.VK_UP:
          ball.moveUp();
          break;
        case KeyEvent.VK_DOWN:
          ball.moveDown();
          break;
        case KeyEvent.VK_LEFT:
          ball.moveLeft();
          break;
        case KeyEvent.VK_RIGHT:
          ball.moveRight();
          break;
      }
    }
  }
}

游戏中包含了三个核心的类:Ball(小球)、Obstacle(障碍物)和Fruit(水果)。其中,Ball类负责表示小球的状态和行为,Obstacle类和Fruit类分别表示障碍物和水果对象的状态和行为。在GamePanel类中,我们定义了一个Timer对象来控制游戏的主循环,同时还实现了ActionListener接口和KeyListener接口来处理游戏逻辑的更新和键盘事件的响应。

通过不断地优化和改进,我最终完成了这个小游戏,并收获了许多宝贵的编程经验。希望我的设计能够为同样在掌握Java编程基础的同学提供一些启示和参考。

  
  

评论区