Java弹球游戏实验报告—chen
课 程 设 计 报 告 题 目 弹球小游戏 姓 名 方成 学 号 20 专 业 java 指导教师 陈华恩 2013年 12 月 30 目录 一、实验目的2 二、需求分析2 三、实验任务2 1、设计3 2、程序要求:3 3、选作题:3 四、开发工具与平台3 五、设计思路3 1、界面设计3 2、逻辑设计3 3、程序测试4 六、实验总结5 七、程序代码5 八、参考文献11 1.《疯狂java讲义》12 2.《算法导论》12 3.《java编程思想》12 一、实验目的 1、 熟练掌握java面向对象编程。 2、 掌握Swing图形用户界面编程以及事件处理等,掌握java绘图技术。 3、 掌握timer类的灵活使用 4、 培养独立查找资料,并解决问题的能力。 二、需求分析 经典的碰撞球是一个的古老游戏,目的是在训练人的反应能力。只有通过把所有的砖块消除完,才能顺利的完成任务。游戏要求如下: 1、 实现球速度的随机性 2、 实现球碰撞到边缘或者砖块自动反弹 3、 实现游戏可以随时暂停 4、 实现游戏结束后能重新开始游戏 三、实验任务 1、 设计 设计并编程实现弹球程序:用户能通过菜单或者按钮新增一小球,该小球将从随机的位置出现,并具有随机颜色,随机速度以及随机的运动方向,小球沿初始方向匀速运动,当碰到窗口边缘时,小球将依据受力原理改变运动方向(可简化考虑,受力只改变小球的运动方向,小球仍按照初始速度匀速运动,且不考虑小球之间的碰撞)。 2、 程序要求: (1) 具备相应界面,并通过事件编程,实现相应的菜单或者按钮功能。 (2) 使用timer,在程序窗口区域绘制小球,并以线程控制小球的移动,实现动画效果。 3、 选作题: (1) 实现奖励机制及关卡机制 四、开发工具与平台 JDK1.6+eclipse 五、设计思路 1、 界面设计 首先建立窗口类 继承自JFrame。该界面为主界面。 在加上按钮—开始与暂停 在加入JPanel面板,用于图形界面. 2、 逻辑设计 程序用过响应timer事件,按钮事件及键盘事件来管理程序的运行。 程序开始 窗口运行,等待响应用户消息 游戏开始,小球开始移动 移动速度在每次反弹后发生变化。如果小球碰倒边界或者砖块,小球方向发生变化 若某个小球掉到球拍下面,游戏结束。按开始按钮则重新开始游戏 退出 移动球拍来使小球不至于掉到球拍下面 3、 程序测试 六、实验总结 1、这次实验综合运用了GUI编程,使我对多线程编程有了一定的了解,对java的多线程机制有了一点理解,更加熟练的运用swing组件设计界面,响应消息,接口的实现等等。 2、通过课程设计的编程和对编程过程中遇到的问题的思考,切实的提高了我的编程能力,通过这次课程设计,我巩固所了学过的知识,能用JAVA熟练地运用其中的一些,进一步掌握了各个指令的功能是转向。 七、程序代码 package com.fangcheng.ball.game; import java.awt.Font; import java.awt.event.*; import javax.swing.*; import java.util.ArrayList; import java.util.Random; public class BallGame extends JFrame implements ActionListener,KeyListener{ private JPanel p; private JButton start; private JButton stop; private JLabel ball; private JLabel qiupai; private JLabel bg;//用来放置背景图片的JLabel private JLabel win; private JLabel over; private int x1=50; private int x2=15; private int y1=325; private int y2=340;//球与球拍的初始位置 private Timer time;//周期性触发球的移动事件的timer对象 private boolean isRight=false;//球是否向右移动 private boolean isDow=false;//球是否为下降 private boolean isOver=false;//是否游戏结束 private boolean isYi=false;//球拍是否能移动 private int xsudu=3; private int ysudu=3;//球的x,y速度,初始值为3 private Random ran=new Random();//用于随机产生球的x,y速度 private ArrayList removeBrickList;//被移除的砖块的list private ArrayList brickList; //游戏时砖块的list private Font font; /** * 构造器,参数为窗口标题 * @param s */ public BallGame(String s){ super(s); gameShow(); } /** * 用于游戏窗口绘制的方法 */ public void gameShow(){ //初始化组件 ImageIcon img1=new ImageIcon(BallGame.class.getResource(“/images/ball.png“)); ImageIcon img2=new ImageIcon(this.getClass().getResource(“/images/pa.png“)); ImageIcon img3=new ImageIcon(this.getClass().getResource(“/images/kuang.png“)); ImageIcon img