1、 面向对象课程设计 潜艇大作战小游戏 目录 1. 需求分析 2 1.1 需求分析: 2 1.2 功能设计 2 2.概要设计 2 2.1 程序设计思路 2 2.2 程序运行界面 3 2.3 流程图 4 3.各模块的功能及程序说明 5 3.1 主界面代码 5 3.2 潜艇对象的实现. 8 3.3 潜艇爆炸的实现. 13 3.4 游戏说明 15 3.5 时间计时器 17 3.5.1 计时产生潜艇 17 3.5.2 计时产生鱼雷 18 3.6 读取文件,记录分数 20 4.实验心得 26 1. 需求分析 1.1 需求分析: 本程序的要求为 (1) 使用 Java 建立一个小游戏 (2) 程序中用到 J
2、ava 课程中的重点知识 1.2 功能设计 本游戏的功能有以下几个方面: (1) 首先绘制一个首页,首页包括开始、退出按钮,采用事件监听。 (2) 进入游戏后使用,通过读取文件,读出以前的最好成绩,使用菜单按钮开始游 戏 (3) 通过方向键来控制潜艇的移动方向,空格键释放鱼雷 (4) 击中敌人后加分,同时被敌人击中一次就扣除一次机会,共 3 次机会 2.概要设计 2.1 程序设计思路 此游戏的关键点是潜艇是否被击中的判断, 整个屏幕是个二维坐标系, 军舰在一个水平 位置移动, 当在某个位置发射鱼雷, 判断鱼雷的图片与不断移动的潜艇图片是否有重合的地 方,如果有发生爆炸,如果没有继续移动。 2.
3、2 程序运行界面 2.3 流程图流程图 本游戏的基本运行流程是启动后把整个画布作为一个线程, 随时准备响应用户按键操作 的 K 响应,100ms 扫描一次潜艇和水雷等物体的运行状态。在扫描潜艇和水雷运动时,执行 各个物体画面的移动方法。 程序并不为每隔新增潜艇和水雷开启一个新线程, 太多线程会造 成程序的性能直线下降;而是将每一个物体类型直接加入到画布中,每当一个新物体产生, 将直接在画布上画出;当物体消除时,将直接在画布上被消除。这样就形成一种注册机制, 所有游戏物体的产生和消除都需要画布注册, 画布拥有不同类型物体的所有 “名单” , 所以, 当执行移动命令是只需要遍历画布中所有游戏物体,
4、 依次执行每隔游戏物体中定义的移动方 法即可。 开始游戏 绘制界面 移动潜艇对象 移动水雷对象 判断潜艇是否被击中 产生爆炸效果 修改游戏成绩 Y N 3.各模块的功能及程序说明 3.1 主界面代码 主界面设计是使用坐标系,具体实现图如下: (0,0) 屏幕 水雷 X1X2 X Y1 Y2 Y 潜艇 public class MainPanel extends JPanel private static final long serialVersionUID = 1L; private MyButton startButton; private MyButton exitButton; pri
5、vate JLabel helpLabel; private JLabel helpLabel1; private JLabel helpLabel2; private JLabel helpLabel3; private Image image; private JLabel centerlabel; private boolean isStart; private boolean isExit; private Observable obs; public MainPanel(Observable ob) obs = ob; /初始化对象 startButton = new MyButto
6、n(“进入游戏“); exitButton = new MyButton(“退出游戏“); helpLabel = new JLabel(); helpLabel1 = new JLabel(); helpLabel2 = new JLabel(); helpLabel3 = new JLabel(); centerlabel = new JLabel(); this.setLayout(new BorderLayout(); this.helpLabel.setPreferredSize(new Dimension(645,291); this.helpLabel1.setPreferredSize(new Dimension(180,80); this.helpLabel2.setPreferredSize(new Dimension(215,80); this.helpLabel3.setPreferredSize(new Dimension(645,80); this.centerlabel.setPreferredSize(new Dimensio