1、Java综合实验设计综合实验报告:滑板反射小球游戏专业班级: 遥感科学与技术 学号: 20133350 姓名: 易乐安 日期: 2015年6月30日 一、程序设计报告小球在窗口四壁弹射(虚线表示弹射的轨道)。左右移动滑板,接住小球弹射,如果没有接住,则游戏失败一次。要求:1. 自拟设计记分方法,和界面的其它部分;2. 滑板用键盘控制左右移动;3. 设置难度调节开关,允许游戏过程中改变这一设置,以调节小球运行速度,速度快,则难度增加。4. 小球在滑板上弹射时,允许一定量的随机变化弹射角度,以实现一定的不确定性。使用模块:对系统包结构、文件结构列表说明,如表2-1、2-2所示。表2-1包名作用Ja
2、va.awt.Insets包含用于创建用户界面和绘制图形图像的所有类Java.awt.event.ActionEvent定义了动作的类Java.awt.event.ActionListener包含用于创建用户界面和绘制图形图像的所有的类Java.awt.event.MouseEvent把类全部导进来Javax.swing.JOptionPane有助于方便地弹出要求用户提供或向其发出通知表2-2文件名作用GameUI.java程序的主窗体,负责窗口和菜单的绘制以及线程的调用。MyThread.Java游戏的线程,主要负责小球的绘制和判断小球是否被接住,以及记录更新分数。MyListener.ja
3、va监听鼠标位置移动的监听器。用来捕获鼠标的移动和鼠标的当前位置,同时这个类负责板子的绘制与更新。定义界面:设置标题设置大小设置关闭是退出程序 设置打开窗体时在屏幕中间显示设置窗体的流式布局管理器设置窗体背景颜色创建文本标签对象设置文本标签前景颜色创建进度条对象创建按钮对象 创建菜单条对象 创建菜单对象 创建菜单选项对象 创建单选选项创建一个按钮组 主要算法描述:MyThread继承于Thread,使用一个单独的线程进行小球的绘制。小球的绘制和滑板的绘制大同小异,都是使用java.awt.Graphics进行绘制的。MyThread还兼顾着进行小球是否被接住的判断。主要是通过返回的板子的坐标和
4、小球的坐标来判断小球是否在板子上方的一定范围里,如果在,则判断为接住,否则,为掉落 分层结构及调用关系说明2、程序测试报告用例:关键代码分析public void run() drawOval(); public void drawOval() UI.text_field.setText(count + 分); /start = System.currentTimeMillis(); while (isFinish) while (isPause) synchronized(this.g) g.setColor(java.awt.Color.black); g.fillOval(x, y, w
5、idth, height); y += y1; getColors(); g.setColor(color); g.fillOval(x, y, width, height); int x2 = listener.getX(); if (y 595 & x x2 & x 630) if (isexist) isAgain(); stopThread(); try Thread.sleep(speed); catch (Exception ef) ef.printStackTrace(); 小球的绘制其实就是不断的绘制一个圆形,只不过圆形的y坐标在不停的变化。难度的控制是通过主程序传入的spee
6、d参数来控制的,这个参数用于Thread.sleep(speed),很显然,当这个参数与小球下落的速度成反比。通过调用UI.text_field.setText()来更新主窗口上的分数。结果:结论:一个好的算法可以让你的程序更健壮,编写的代码量更少,处理异常一直是JAVA里的常事,通过试验,让我对基础的知识更加深入了解,也对更改代码错误有了一定的提升,能看的懂错误的代码错在哪里,并进行修改,使其正确。这个游戏只是一个简单的接球游戏,如果可以做的更好,就会更好的训练人们的集中力和反应速度,敏捷的做出正确的判断。附录:源程序代码:import java.awt.Insets; import jav
7、a.awt.event.ActionEvent; import java.awt.event.ActionListener; /游戏界面类/ public class GameUI extends javax.swing.JFrame private static GameUI UI; private java.awt.Graphics g; private MyListener ml; public javax.swing.JLabel text_field; public javax.swing.JProgressBar pBar; private String command; publ
8、ic java.util.ArrayList list = new java.util.ArrayList(); private javax.swing.JToggleButton button; public static void main(String args) UI = new GameUI(); UI.initUI(); / 初始化窗体的方法/ public void initUI() / 设置标题 this.setTitle(接球); / 设置大小 this.setSize(610, 635); / 设置关闭是退出程序 this.setDefaultCloseOperation(
9、3); / 设置打开窗体时在屏幕中间显示 this.setLocationRelativeTo(null); / 设置窗体的流式布局管理器 this.setLayout(new java.awt.FlowLayout(); / 设置窗体背景颜色 this.getContentPane().setBackground(java.awt.Color.black); / 创建文本标签对象 text_field = new javax.swing.JLabel(); javax.swing.JLabel lable = new javax.swing.JLabel(时 间 :); / 设置文本标签前景
10、颜色 lable.setForeground(java.awt.Color.red); text_field.setForeground(java.awt.Color.red); / 创建进度条对象 pBar = new javax.swing.JProgressBar(0, 330); / 创建按钮对象 button = new javax.swing.JToggleButton(); button.setMargin(new Insets(0, 0, 0, 0); button.setIcon(new javax.swing.ImageIcon(images/Pause.gif); but
11、ton.setActionCommand(暂停); / 通过匿名内部类来创建动作监听器 java.awt.event.ActionListener button_listener = new java.awt.event.ActionListener() public void actionPerformed(ActionEvent e) String com = e.getActionCommand(); if (com.equals(暂停) button.setMargin(new Insets(0, 0, 0, 0); button .setIcon(new javax.swing.Im
12、ageIcon( images/start.gif); button.setActionCommand(继续); for (int i = 0; i list.size(); i+) list.get(i).PauseThread(); if (com.equals(继续) button.setMargin(new Insets(0, 0, 0, 0); button .setIcon(new javax.swing.ImageIcon( images/Pause.gif); button.setActionCommand(暂停); for (int i = 0; i list.size();
13、 i+) list.get(i).ContinueThread(); ; button.addActionListener(button_listener); this.add(button); this.add(lable); this.add(pBar); this.add(text_field); / 的到菜单条 javax.swing.JMenuBar bar = creatMenuBar(); / 为窗体设置菜单条 this.setJMenuBar(bar); / 设置窗体的可见性 this.setVisible(true); /创建菜单条的方法/ public javax.swing.JMenuBar creatMenuBar() / 创建菜单条对象 javax.swing.JMenuBar bar = new javax.swing.JMenuBar(); / 创建
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1