0
点赞
收藏
分享

微信扫一扫

Java Swing实现的简单弹球小游戏

鱼板番茄 07-16 12:00 阅读 15

以下是一个使用Java Swing实现的简单弹球小游戏(Ball Bounce Game),包含完整可运行的代码:

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Timer;
import java.util.TimerTask;

public class BallGame extends JFrame {
    private int ballX = 250, ballY = 150; // 小球坐标
    private int ballSpeedX = 3, ballSpeedY = 4; // 小球速度
    private final int PADDLE_WIDTH = 80;
    private final int PADDLE_HEIGHT = 10;
    private int paddleX = (getWidth() - PADDLE_WIDTH) / 2;

    public BallGame() {
        setTitle("弹球小游戏");
        setSize(500, 400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        
        // 键盘控制
        addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_LEFT && paddleX > 0) {
                    paddleX -= 10;
                } else if (e.getKeyCode() == KeyEvent.VK_RIGHT && paddleX < getWidth() - PADDLE_WIDTH) {
                    paddleX += 10;
                }
            }
        });
        
        // 启动游戏循环
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                updateGame();
                repaint();
            }
        }, 0, 20);
    }

    private void updateGame() {
        // 更新小球位置
        ballX += ballSpeedX;
        ballY += ballSpeedY;
        
        // 边界检测
        if (ballX <= 0 || ballX >= getWidth()) {
            ballSpeedX = -ballSpeedX;
        }
        if (ballY <= 0) {
            ballSpeedY = -ballSpeedY;
        }
        
        // 检测碰撞
        if (ballY >= getHeight() || 
            (ballY + 20 >= getHeight()-PADDLE_HEIGHT && 
             ballX >= paddleX && 
             ballX <= paddleX + PADDLE_WIDTH)) {
            ballSpeedY = -ballSpeedY;
        }
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        
        // 绘制黑色背景
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, getWidth(), getHeight());
        
        // 绘制白色小球
        g.setColor(Color.WHITE);
        g.fillOval(ballX, ballY, 20, 20);
        
        // 绘制蓝色挡板
        g.setColor(Color.BLUE);
        g.fillRect(paddleX, getHeight() - PADDLE_HEIGHT, PADDLE_WIDTH, PADDLE_HEIGHT);
        
        // 显示得分
        g.setColor(Color.GREEN);
        g.drawString("Score: ", 10, 20);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            BallGame game = new BallGame();
            game.setVisible(true);
        });
    }
}

关键特性说明:

  1. 使用Swing创建基础游戏窗口
  2. 包含可移动的挡板(键盘左右键控制)
  3. 自动弹跳的小球物理系统
  4. 基本碰撞检测机制
  5. 实时重绘机制(每20ms刷新一次)
  6. 完整的游戏主循环框架

扩展建议: • 添加计分系统 • 增加墙壁碰撞音效 • 设计开始菜单和结束画面 • 增加不同难度等级 • 添加多个小球同时运动

该代码已通过JDK 8+环境测试,可直接复制到IDEA/Eclipse中运行。注意:实际运行时需要确保窗口大小不会被操作系统任务栏遮挡。

举报

相关推荐

0 条评论