




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
WORD格式可编辑综合实验报告:滑板反射小球游戏专业班级:遥感科学与技术学号: 姓名: 日期:2015年6月30日专业知识分享WORD格式可编辑一、程序设计报告小球在窗口四壁弹射(虚线表示弹射的轨道)。左右移动滑板,接住小球弹射,如果没有接住,则游戏失败一次。要求:.自拟设计记分方法,和界面的其它部分;.滑板用键盘控制左右移动;.设置难度调节开关,允许游戏过程中改变这一设置,以调节小球运行速度,速度快,则难度增加。.小球在滑板上弹射时,允许一定量的随机变化弹射角度,以实现一定的不确定性。专业知识分享
WORD格式可编辑使用模块:对系统包结构、文件结构列表说明,如表2-1、2-2所示。表2-1包名作用Java.awt.Insets包含用于创建用户界面和绘制图形图像的所有类Java.awt.event.ActionEvent定义了动作的类Java.awt.event.ActionListener包含用于创建用户界面和绘制图形图像的所有的类Java.awt.event.MouseEvent把类全部导进来Javax.swing.JOptionPane有助于方便地弹出要求用户提供或向其发出通知表2-2文件名作用GameUI.java程序的主窗体,负责窗口和菜单的绘制以及线程的调用。MyThread.Java游戏的线程,主要负责小球的绘制和判断小球是否被接住,以及记录更新分数。MyListener.java监听鼠标位置移动的监听器。用来捕获鼠标的移动和鼠标的当前位置,同时这个类负责板子的绘制与更新。定义界面:设置标题设置大小设置关闭是退出程序设置打开窗体时在屏幕中间显示设置窗体的流式布局管理器设置窗体背景颜色创建文本标签对象设置文本标签前景颜色创建进度条对象创建按钮对象创建菜单条对象创建菜单对象专业知识分享WORD格式可编辑创建菜单选项对象创建单选选项创建一个按钮组主要算法描述:MyThread继承于Thread,使用一个单独的线程进行小球的绘制。小球的绘制和滑板的绘制大同小异,都是使用java.awt.Graphics进行绘制的。MyThread还兼顾着进行小球是否被接住的判断。主要是通过返回的板子的坐标和小球的坐标来判断小球是否在板子上方的一定范围里,如果在,则判断为接住,否则,为掉落分层结构及调用关系说明专业知识分享WORD格式可编辑二、程序测试报告用例:关键代码分析publicvoidrun(){drawOval();)publicvoiddrawOval(){UI.text_field.setText(count+"分");//start=System.currentTimeMillis();while(isFinish){while(isPause){synchronized(this.g){g.setC010r(java.awt.C010r.black);g.fillOval(x,y,width,height);y+二y1;getC0l0rs();g.setColor(color);g.fillOval(x,y,width,height);)intx2=listener.getX();if(y<90){y1=5;)if(y>595&&x>x2&&x<x2+100){this.fadeOval();count+=1;UI.text_field.setText(count+"分");y1=5;y二100;java.util.Randomran=newjava.util.Random();x=ran.nextInt(600)+10;)if(y>630){if(isexist){isAgain();)stopThread();)try{专业知识分享WORD格式可编辑Thread.sleep(speed);}catch(Exceptionef){ef.printStackTrace();}}}小球的绘制其实就是不断的绘制一个圆形,只不过圆形的y坐标在不停的变化。难度的控制是通过主程序传入的speed参数来控制的,这个参数用于Thread.sleep(speed),很显然,当这个参数与小球下落的速度成反比。通过调用UI.text_field.setText()来更新主窗口上的分数。结果:I画接耳象尊雎度■分数二口分专业知识分享
WORD格式可编辑结论:一个好的算法可以让你的程序更健壮,编写的代码量更少,处理异常一直是乱丫人里的常事,通过试验,让我对基础的知识更加深入了解,也对更改代码错误有了一定的提升,能看的懂错误的代码错在哪里,并进行修改,使其正确。这个游戏只是一个简单的接球游戏,如果可以做的更好,就会更好的训练人们的集中力和反应速度,敏捷的做出正确的判断。专业知识分享WORD格式可编辑附录:源程序代码:importjava.awt.Insets;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;/游戏界面类/publicclassGameUIextendsjavax.swing.JFrame{privatestaticGameUIUI;privatejava.awt.Graphicsg;privateMyListenerml;publicjavax.swing.JLabeltext_field;publicjavax.swing.JProgressBarpBar;privateStringcommand;newpublic java.util.ArrayList<MyThread> listnewjava.util.ArrayList<MyThread>();privatejavax.swing.JToggleButtonbutton;publicstaticvoidmain(Stringargs[]){UI=newGameUI();UI.initUI();)/初始化窗体的方法/publicvoidinitUI(){//设置标题this.setTitle("接球");//设置大小this.setSize(610,635);//设置关闭是退出程序this.setDefaultCloseOperation(3);//设置打开窗体时在屏幕中间显示this.setLocationRelativeTo(null);//设置窗体的流式布局管理器this.setLayout(newjava.awt.FlowLayout());//设置窗体背景颜色this.getContentPane().setBackground(java.awt.Color.black);专业知识分享
WORD格式可编辑//创建文本标签对象text_field=newjavax.swing.JLabel();javax.swing.JLabellable=newjavax.swing.JLabel("时间:");//设置文本标签前景颜色lable.setForeground(java.awt.Color.red);text_field.setForeground(java.awt.Color.red);//创建进度条对象pBar=newjavax.swing.JProgressBar(0,330);//创建按钮对象button=newjavax.swing.JToggleButton();button.setMargin(newInsets(0,0,0,0));newbutton.setIcon(newjavax.swing.ImageIcon("images/Pause.gif"));button.setActionCommand("暂停");//通过匿名内部类来创建动作监听器java.awt.event.ActionListener button_listener =newjava.awt.event.ActionListener(){publicvoidactionPerformed(ActionEvente){Stringcom=e.getActionCommand();if(com.equals("暂停")){button.setMargin(newInsets(0,0,0,0));button.setIcon(newjavax.swing.ImageIcon("images/start.gif"));button.setActionCommand("继续");for(inti=0;i<list.size();i++){list.get(i).PauseThread();))if(com.equals("继续")){button.setMargin(newInsets(0,0,0,0));button.setIcon(newjavax.swing.ImageIcon("images/Pause.gif"));button.setActionCommand("暂停");专业知识分享WORD格式可编辑for(inti=0;i<list.size();i++){list.get⑴.ContinueThread();))));button.addActionListener(button_listener);this.add(button);this.add(lable);this.add(pBar);this.add(text_field);//的到菜单条javax.swing.JMenuBarbar=creatMenuBar();//为窗体设置菜单条this.setJMenuBar(bar);//设置窗体的可见性this.setVisible(true);)/创建菜单条的方法/publicjavax.swing.JMenuBarcreatMenuBar(){//创建菜单条对象javax.swing.JMenuBarbar=newjavax.swing.JMenuBar();//创建菜单对象javax.swing.JMenumenu_menu=newjavax.swing.JMenu(^单”);javax.swing.JMenudifficulty_menu=newjavax.swing.JMenu("难度");javax.swing.JMenuhelp_menu=newjavax.swing.JMenu("帮助");//创建菜单选项对象javax.swing.JMenuItemstar_item=newjavax.swing.JMenuItem("开始");javax.swing.JMenuItemexit_item=newjavax.swing.JMenuItem("退出");javax.swing.JMenuItemhelp_item=newjavax.swing.JMenuItem(游戏说明”);javax.swing.JMenuItemabout_item=newjavax.swing.JMenuItem("关于");//创建单选选项javax.swing.JRadioButtonMenuItem easy_item = newjavax.swing.JRadioButtonMenuItem(专业知识分享
WORD格式可编辑"简单”);javax.swing.JRadioButtonMenuItemjavax.swing.JRadioButtonMenuItem("中等");javax.swing.JRadioButtonMenuItemjavax.swing.JRadioButtonMenuItem("困难");//创建一个按钮组middle_itemWORD格式可编辑"简单”);javax.swing.JRadioButtonMenuItemjavax.swing.JRadioButtonMenuItem("中等");javax.swing.JRadioButtonMenuItemjavax.swing.JRadioButtonMenuItem("困难");//创建一个按钮组middle_itemhard_itemnewnewjavax.swing.ButtonGroupgroup//将单选按钮添加到按钮组中group.add(easy_item);group.add(middle_item);group.add(hard_item);//将单选按钮添加到菜单中newjavax.swing.ButtonGroup。;difficulty_menu.add(easy_item);difficulty_menu.add(middle_item);difficulty_menu.add(hard_item);//通过匿名内部类来创建动作监听器ActionListenerlistener=newjava.awt.event.ActionListener(){publicvoidactionPerformed(ActionEvente){command=e.getActionCommand();//如果选择开始,则创建线程对象if(command.equals("开始")&&list.size()==0){creatBall(20,1);)//如果选择退出按钮,则退出程序if(command.equals("退出")){System.exit(0);)//如果选择简单按钮if(command.equals("简单")&&list.size()==0){creatBall(20,1);)//如果选择中等按钮if(command.equals("中等")&&list.size()==0){专业知识分享WORD格式可编辑creatBall(50,2);)if(command.equals("困难")&&list.size()==0){creatBall(40,2);)if(command.equals("游戏说明")){javax.swing.JOptionPane.showMessageDialog(nullJ用挡板接球,如果接不住,就算输了……3游戏可以选择难度,包括简单、中等、困难");)if(command.equals("关于")){javax.swing.JOptionPane.showMessageDialog(null,"滑板反射小球游戏㈠制作人:易乐安");)));//添加动作监听器star_item.addActionListener(listener);exit_item.addActionListener(listener);easy_item.addActionListener(listener);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);//将菜单对象添加到菜单条上bar.add(menu_menu);bar.add(difficulty_menu);bar.add(help_menu);//返回菜单条对象returnbar;)专业知识分享WORD格式可编辑/创建线程对象的方法/publicvoidcreatBall(intspeed,intnum){java.util.Randomran=newjava.util.Random();if(ml==null){g=UI.getGraphics();ml=newMyListener(g);UI.addMouseListener(ml);UI.addMouseMotionListener(ml);)for(inti=0;i<num;i++){intx=ran.nextInt(600)+10;inty=ran.nextInt(300)+100;speed);MyThreadth=newMyThread(g,ml,UI,x,y,list.add(th);speed);th.start();))/得到命令的方法/publicStringgetCommand(){returncommand;))importjava.awt.Color;importjavax.swing.JOptionPane;/线程类/publicclassMyThreadextendsThread{privateintwidth=20,height=20;privateintx,y;privatejava.awt.Graphicsg;privateGameUIUI;privatebooleanisexist=true;privateMyListenerlistener;privateintspeed;privateintx1=12,y1=12;privatelongstart,end;专业知识分享WORD格式可编辑privatelonglast_time;privateintresponse;privatebooleanisFinish=true;privatebooleanisPause=true;privatejava.util.ArrayList<MyThread>list;privatefloatvalue=320;privatejava.awt.Colorcolor=java.awt.Color.blue;/重写构造器/publicMyThread(java.awt.Graphicsg,MyListenerlistener,GameUIUI,intx,inty,intspeed){this.g=g;this.UI=UI;this.x=x;this.y=y;this.speed=speed;this.listener=listener;)/(non-Javadoc)重写run的方法/publicvoidrun(){drawOval();)/创建线程的方法/publicvoiddrawOval(){start=System.currentTimeMillis();while(isFinish){while(isPause){synchronized(this.g){//画一个圆g.setColor(java.awt.Color.black);g.fillOval(x,y,width,height);x+=x1;y+=yl;getColors();g.setColor(color);专业知识分享WORD格式可编辑g.fillOval(x,y,width,height);)intx2=listener.getX();if(x>580){x1=-12;)if(x<10){x1=12;)if(y<90){y1=12;)if(y>595&&x>x2&&x<x2+100){y1=-12;)if(y>630){if(isexist){isAgain();)stopThread();)try{Thread.sleep(speed);value-=0.1;}catch(Exceptionef){ef.printStackTrace();}//将前一次画的清除掉end=System.currentTimeMillis();last_time=100-(end-start)/1000;UI.text_field.setText(last_time+"s");UI.pBar.setValue((int)value);if(last_time==0){list=UI.list;for(intj=0;j<list.size();j++){专业知识分享WORD格式可编辑//停在线程,并且去掉最后一个圆list.get(j).stopThread();list.get(j).fadeOval();)stopThread();showDialog();))))/线程结束时消去最后一个圆的方法/publicvoidfadeOval(){g.setColor(java.awt.Color.black);g.fillOval(x,y,width,height);)/重来对话框的处理方法/publicvoidisAgain(){isexist=false;list=UI.list;System.out.println(list.size());for(intj=0;j<list.size();j++){//停在线程,并且去掉最后一个圆list.get(j).stopThread();list.get(j).fadeOval();)Object]]options={"是","否"};Stringcommand=UI.getCommand();response=JOptionPane.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){专业知识分享WORD格式可编辑//现将原来的对象从队列中移除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);))/停止线程的方法/publicvoidstopThread(){isFinish=false;isPause=false;)/暂停线程的方法/publicvoidPauseThre
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房屋更名合同范本谁有
- 简易棚加固合同范本
- 城区房屋赠与合同范本
- 网络材料采购合同范本
- 合法地产合同范本
- 网络维护兼职合同范本
- 商用烘焙采购合同范本
- 网店订单合作合同范本
- 商业摊位出租合同范本
- 道德引领下的财务管理
- 大数据导论(通识课版)-第3章-大数据技术(2020年春季学期)
- 飞行员政审的个人自传
- 广东省通用安装工程综合定额(2018)Excel版
- 15轨道车检查保养指导书
- 前言 马克思主义中国化时代化的历史进程与理论成果
- 直流滤波电感设计
- 逍遥子-精美大气红色鎏金风商务汇报PPT模板
- 电力工程安全保证体系及措施
- 13运动与健康-2023年中考英语热点话题写作
- 《云南电力市场化交易实施方案》
- 中学初中学生学籍卡片(一)
评论
0/150
提交评论