个人公众号:【小猿君的算法笔记】
最近学了一些 Java 的图形界面编程,因此想自己写一个小游戏试试身手,思来想去,弹球小游戏还是挺简单的,一个球拍,一个小球,使用球拍接住小球,保证小球不掉下去。在网上找了一些参考资料,感觉设计的都不怎么“面向对象”,于是自己也写了一个——一颗小球的畅想,对原来的游戏做了一些功能的增强。目前的功能还有许多不足的地方,因此暂定为 v1.0 版本。
1、游戏运行效果图
游戏开始界面
游戏结束界面
2、功能需求分析
弹球游戏需要以下功能:
(1)游戏界面展示:游戏界面具有两个球拍,界面上方一个,界面下方一个,同时界面中央有一个红色的小球。
(2)移动小球:游戏开始时小球能够按照一定的速度朝某一个方向进行移动,当小球遇到障碍物,能够自动的反弹。
(3)移动球拍:通过点击键盘左键和键盘右键可以实现两个球拍的左右移动。
3、面向对象程序设计
通过以上的分析,我将这个程序的实体类进行了提取,并划分为不同的模块。
- Constant 类:用于存放游戏中的常量数据
- Ball 类:球类
- GameView 类:游戏视图类
- Racket 类:球拍类
- Rule 类:游戏规则类
- GameApplication 类:游戏启动类
4、代码实现
Constant 类的设计与实现
首先看一下 Constant 类,其包含以下信息,这些信息是后来添加的,但为了方便后续的代码查看,先放出来。
public class Constant {
// 桌面宽高
public static final int TABLE_WIDTH = 400;
public static final int TABLE_HEIGHT = 600;
// 球的大小
public static final int BALL_SIZE = 16;
// 球的颜色
public static final Color BALL_COLOR = Color.RED;
// 球的速度
public static final int speedX = 5;
public static final int speedY = 10;
// 球拍长宽
public static final int racketWidth = 60;
public static final int racketHeight = 20;
// 球拍颜色
public static final Color RACKET_COLOR = Color.LIGHT_GRAY;
// 球拍每次移动距离
public static final int moveLength = 10;
}
球类 Ball 的设计与实现
球类需要包含以下属性:球的大小、球的颜色、球的位置坐标、球的 X 轴 Y 轴速度大小。
// 大小
private int ballSize = Constant.BALL_SIZE;
// 颜色
private Color color = Constant.BALL_COLOR;
// 坐标位置
private int ballX;
private int ballY;
// 速度大小
private int speedX = Constant.speedX;
private int speedY = Constant.speedY;
在构造小球时,需要传入两个参数,ballX 和 ballY 来确定小球的位置。
public Ball(int ballX, int ballY) {
this.ballX = ballX;
this.ballY = ballY;
}
小球移动,需要根据速度 speedX 和 speedY 来改变小球的位置,当小球碰到左右两边墙或者上下两个球拍时,其速度方向需要发生改变。这里为了确定球拍的位置,需要传入一个参数 racketX 代表球拍所在 X 轴的位置。
/**
* 小球移动
* @param racketX :球拍位置,目前游戏中上球拍和下球拍racketX位置相同
*/
public vo