21xrx.com
2024-09-19 09:39:45 Thursday
登录
文章检索 我的文章 写文章
Java期末作品设计小游戏
2023-06-11 16:37:11 深夜i     --     --
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编程基础的同学提供一些启示和参考。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复