Java综合实验设计_第1页
Java综合实验设计_第2页
Java综合实验设计_第3页
Java综合实验设计_第4页
Java综合实验设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 WORD格式可编辑综合实验报告:滑板反射小球游戏专业班级: 遥感科学与技术 学号: 20133350 姓名: 易乐安 日期: 2015年6月30日 专业知识分享一、程序设计报告小球在窗口四壁弹射(虚线表示弹射的轨道)。左右移动滑板,接住小球弹射,如果没有接住,则游戏失败一次。要求:1. 自拟设计记分方法,和界面的其它部分;2. 滑板用键盘控制左右移动;3. 设置难度调节开关,允许游戏过程中改变这一设置,以调节小球运行速度,速度快,则难度增加。4. 小球在滑板上弹射时,允许一定量的随机变化弹射角度,以实现一定的不确定性。使用模块:对系统包结构、文件结构列表说明,如表2-1、2-2所示。表2-1

2、包名作用Java.awt.Insets包含用于创建用户界面和绘制图形图像的所有类Java.awt.event.ActionEvent定义了动作的类Java.awt.event.ActionListener包含用于创建用户界面和绘制图形图像的所有的类Java.awt.event.MouseEvent把类全部导进来Javax.swing.JOptionPane有助于方便地弹出要求用户提供或向其发出通知表2-2文件名作用GameUI.java程序的主窗体,负责窗口和菜单的绘制以及线程的调用。MyThread.Java游戏的线程,主要负责小球的绘制和判断小球是否被接住,以及记录更新分数。MyListe

3、ner.java监听鼠标位置移动的监听器。用来捕获鼠标的移动和鼠标的当前位置,同时这个类负责板子的绘制与更新。定义界面:设置标题设置大小设置关闭是退出程序 设置打开窗体时在屏幕中间显示设置窗体的流式布局管理器设置窗体背景颜色创建文本标签对象设置文本标签前景颜色创建进度条对象创建按钮对象 创建菜单条对象 创建菜单对象 创建菜单选项对象 创建单选选项创建一个按钮组 主要算法描述:MyThread继承于Thread,使用一个单独的线程进行小球的绘制。小球的绘制和滑板的绘制大同小异,都是使用java.awt.Graphics进行绘制的。MyThread还兼顾着进行小球是否被接住的判断。主要是通过返回的

4、板子的坐标和小球的坐标来判断小球是否在板子上方的一定范围里,如果在,则判断为接住,否则,为掉落进入游戏画面根据球出现的位置,移动鼠标使滑板到相应的位置的上方,测试可以接多少个球。若滑板接到一个球,则玩家就得一分,若接不到球,就游戏结束。先选择游戏的难度,有简单,中等和困难。游戏结束,选择否,退出游戏。游戏结束,选择是,重新开始新的游戏。 分层结构及调用关系说明2、 程序测试报告用例:关键代码分析public void run() drawOval();public void drawOval() UI.text_field.setText(count + "分");/sta

5、rt = System.currentTimeMillis();while (isFinish) while (isPause) synchronized(this.g)g.setColor(java.awt.Color.black);g.fillOval(x, y, width, height);y += y1;getColors();g.setColor(color);g.fillOval(x, y, width, height);int x2 = listener.getX();if (y < 90) y1 = 5;if (y > 595 && x >

6、x2 && x < x2 + 100) this.fadeOval();count += 1;UI.text_field.setText(count + "分");y1 = 5;y = 100;java.util.Random ran = new java.util.Random();x = ran.nextInt(600) + 10;if (y > 630) if (isexist) isAgain();stopThread();try Thread.sleep(speed); catch (Exception ef) ef.printStac

7、kTrace();小球的绘制其实就是不断的绘制一个圆形,只不过圆形的y坐标在不停的变化。难度的控制是通过主程序传入的speed参数来控制的,这个参数用于Thread.sleep(speed),很显然,当这个参数与小球下落的速度成反比。通过调用UI.text_field.setText()来更新主窗口上的分数。结果:结论:一个好的算法可以让你的程序更健壮,编写的代码量更少,处理异常一直是JAVA里的常事,通过试验,让我对基础的知识更加深入了解,也对更改代码错误有了一定的提升,能看的懂错误的代码错在哪里,并进行修改,使其正确。这个游戏只是一个简单的接球游戏,如果可以做的更好,就会更好的训练人们的集

8、中力和反应速度,敏捷的做出正确的判断。附录:源程序代码:import java.awt.Insets; import java.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; publ

9、ic javax.swing.JProgressBar pBar; private String command; public java.util.ArrayList<MyThread> list = new java.util.ArrayList<MyThread>(); private javax.swing.JToggleButton button; public static void main(String args) UI = new GameUI(); UI.initUI(); / 初始化窗体的方法/ public void initUI() / 设置标

10、题 this.setTitle("接球"); / 设置大小 this.setSize(610, 635); / 设置关闭是退出程序 this.setDefaultCloseOperation(3); / 设置打开窗体时在屏幕中间显示 this.setLocationRelativeTo(null); / 设置窗体的流式布局管理器 this.setLayout(new java.awt.FlowLayout(); / 设置窗体背景颜色 this.getContentPane().setBackground(java.awt.Color.black); / 创建文本标签对象 t

11、ext_field = new javax.swing.JLabel(); javax.swing.JLabel lable = new javax.swing.JLabel("时 间 :"); / 设置文本标签前景颜色 lable.setForeground(java.awt.Color.red); text_field.setForeground(java.awt.Color.red); / 创建进度条对象 pBar = new javax.swing.JProgressBar(0, 330); / 创建按钮对象 button = new javax.swing.JTo

12、ggleButton(); button.setMargin(new Insets(0, 0, 0, 0); button.setIcon(new javax.swing.ImageIcon("images/Pause.gif"); button.setActionCommand("暂停"); / 通过匿名内部类来创建动作监听器 java.awt.event.ActionListener button_listener = new java.awt.event.ActionListener() public void actionPerformed(Ac

13、tionEvent e) String com = e.getActionCommand(); if (com.equals("暂停") button.setMargin(new Insets(0, 0, 0, 0); button .setIcon(new javax.swing.ImageIcon( "images/start.gif"); button.setActionCommand("继续"); for (int i = 0; i < list.size(); i+) list.get(i).PauseThread()

14、; 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(); i+) list.get(i).ContinueThread(); ; button.addActionListener(button_listene

15、r); 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.swi

16、ng.JMenuBar(); / 创建菜单对象 javax.swing.JMenu menu_menu = new javax.swing.JMenu("菜单"); javax.swing.JMenu difficulty_menu = new javax.swing.JMenu("难度"); javax.swing.JMenu help_menu = new javax.swing.JMenu("帮助"); / 创建菜单选项对象 javax.swing.JMenuItem star_item = new javax.swing.JM

17、enuItem("开始"); javax.swing.JMenuItem exit_item = new javax.swing.JMenuItem("退出"); javax.swing.JMenuItem help_item = new javax.swing.JMenuItem("游戏说明"); javax.swing.JMenuItem about_item = new javax.swing.JMenuItem("关于"); / 创建单选选项 javax.swing.JRadioButtonMenuItem

18、 easy_item = new javax.swing.JRadioButtonMenuItem( "简单"); javax.swing.JRadioButtonMenuItem middle_item = new javax.swing.JRadioButtonMenuItem( "中等"); javax.swing.JRadioButtonMenuItem hard_item = new javax.swing.JRadioButtonMenuItem( "困难"); / 创建一个按钮组 javax.swing.ButtonGr

19、oup group = new javax.swing.ButtonGroup(); / 将单选按钮添加到按钮组中 group.add(easy_item); group.add(middle_item); group.add(hard_item); / 将单选按钮添加到菜单中 difficulty_menu.add(easy_item); difficulty_menu.add(middle_item); difficulty_menu.add(hard_item); / 通过匿名内部类来创建动作监听器 ActionListener listener = new java.awt.event

20、.ActionListener() public void actionPerformed(ActionEvent e) command = e.getActionCommand(); / 如果选择开始,则创建线程对象 if (command.equals("开始") && list.size() = 0) creatBall(20, 1); / 如果选择退出按钮,则退出程序 if (command.equals("退出") System.exit(0); / 如果选择简单按钮 if (command.equals("简单&qu

21、ot;) && list.size() = 0) creatBall(20, 1); / 如果选择中等按钮 if (command.equals("中等") && list.size() = 0) creatBall(50, 2); if (command.equals("困难") && list.size() = 0) creatBall(40, 2); if (command.equals("游戏说明") javax.swing.JOptionPane.showMessageDial

22、og(null,"用挡板接球,如果接不住,就算输了n游戏可以选择难度,包括简单、中等、困难"); if (command.equals("关于") javax.swing.JOptionPane.showMessageDialog(null, " 滑板反射小球游戏n制作人:易乐安"); ; / 添加动作监听器 star_item.addActionListener(listener); exit_item.addActionListener(listener); easy_item.addActionListener(listener

23、); middle_item.addActionListener(listener); hard_item.addActionListener(listener); help_item.addActionListener(listener); about_item.addActionListener(listener); / 将菜单选项对象添加到菜单对象上 menu_menu.add(star_item); menu_menu.add(exit_item); help_menu.add(help_item); help_menu.add(about_item); / 将菜单对象添加到菜单条上

24、bar.add(menu_menu); bar.add(difficulty_menu); bar.add(help_menu); / 返回菜单条对象 return bar; /创建线程对象的方法/ public void creatBall(int speed, int num) java.util.Random ran = new java.util.Random(); if (ml = null) g = UI.getGraphics(); ml = new MyListener(g); UI.addMouseListener(ml); UI.addMouseMotionListener

25、(ml); for (int i = 0; i < num; i+) int x = ran.nextInt(600) + 10; int y = ran.nextInt(300) + 100; MyThread th = new MyThread(g, ml, UI, x, y, speed); list.add(th); th.start(); /得到命令的方法/ public String getCommand() return command; import java.awt.Color; import javax.swing.JOptionPane; /线程类/ public

26、class MyThread extends Thread private int width = 20, height = 20; private int x, y; private java.awt.Graphics g; private GameUI UI; private boolean isexist = true; private MyListener listener; private int speed; private int x1 = 12, y1 = 12; private long start, end; private long last_time; private

27、int response; private boolean isFinish = true; private boolean isPause = true; private java.util.ArrayList<MyThread> list; private float value = 320; private java.awt.Color color = java.awt.Color.blue; /重写构造器/ public MyThread(java.awt.Graphics g, MyListener listener, GameUI UI, int x, int y, i

28、nt speed) this.g = g; this.UI = UI; this.x = x; this.y = y; this.speed = speed; this.listener = listener; / (non-Javadoc)重写run的方法/ public void run() drawOval(); /创建线程的方法/ public void drawOval() start = System.currentTimeMillis(); while (isFinish) while (isPause) synchronized(this.g) / 画一个圆 g.setColo

29、r(java.awt.Color.black); g.fillOval(x, y, width, height); x += x1; y += y1; getColors(); g.setColor(color); g.fillOval(x, y, width, height); int x2 = listener.getX(); if (x > 580) x1 = -12; if (x < 10) x1 = 12; if (y < 90) y1 = 12; if (y > 595 && x > x2 && x < x2 +

30、100) y1 = -12; if (y > 630) if (isexist) isAgain(); stopThread(); try Thread.sleep(speed); value -= 0.1; catch (Exception ef) ef.printStackTrace(); / 将前一次画的清除掉 end = System.currentTimeMillis(); last_time = 100 - (end - start) / 1000; UI.text_field.setText(last_time + "s"); UI.pBar.setVa

31、lue(int) value); if (last_time = 0) list = UI.list; for (int j = 0; j < list.size(); j+) / 停在线程,并且去掉最后一个圆 list.get(j).stopThread(); list.get(j).fadeOval(); stopThread(); showDialog(); /线程结束时消去最后一个圆的方法/ public void fadeOval() g.setColor(java.awt.Color.black); g.fillOval(x, y, width, height); /重来对话

32、框的处理方法/ public void isAgain() isexist = false; list = UI.list; System.out.println(list.size(); for (int j = 0; j < list.size(); j+) / 停在线程,并且去掉最后一个圆 list.get(j).stopThread(); list.get(j).fadeOval(); Object options = "是", "否" ; String command = UI.getCommand(); response = JOpti

33、onPane.showOptionDialog(null, "坚持就是胜利,是否再来一次?", null, JOptionPane.YES_OPTION, JOptionPane.NO_OPTION, null, options, null); System.out.println(response); if (response = 0) if (command.equals("简单") | command.equals("开始") AgainThread(); if (list.size() != 0) / 现将原来的对象从队列中移

34、除 list.removeAll(list); UI.creatBall(20, 1); if (command.equals("中等") AgainThread(); if (list.size() != 0) list.removeAll(list); UI.creatBall(50, 2); if (command.equals("困难") AgainThread(); if (list.size() != 0) list.removeAll(list); UI.creatBall(40, 2); / 如果点击关闭,则将线程对象从队列中移除 if (response = -1 | response = 1) list.removeAll(list); /停止线程的方法/ public void stopThread() isFinish = false; isPause = false

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论