以下是一个使用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);
});
}
}
关键特性说明:
- 使用Swing创建基础游戏窗口
- 包含可移动的挡板(键盘左右键控制)
- 自动弹跳的小球物理系统
- 基本碰撞检测机制
- 实时重绘机制(每20ms刷新一次)
- 完整的游戏主循环框架
扩展建议: • 添加计分系统 • 增加墙壁碰撞音效 • 设计开始菜单和结束画面 • 增加不同难度等级 • 添加多个小球同时运动
该代码已通过JDK 8+环境测试,可直接复制到IDEA/Eclipse中运行。注意:实际运行时需要确保窗口大小不会被操作系统任务栏遮挡。