Java综合实验设计.docx
- 文档编号:25969361
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:24
- 大小:86.09KB
Java综合实验设计.docx
《Java综合实验设计.docx》由会员分享,可在线阅读,更多相关《Java综合实验设计.docx(24页珍藏版)》请在冰豆网上搜索。
Java综合实验设计
综合实验报告:
滑板反射小球游戏
专业班级:
遥感科学与技术
学号:
20133350
姓名:
易乐安
日期:
2015年6月30日
一、程序设计报告
小球在窗口四壁弹射(虚线表示弹射的轨道)。
左右移动滑板,接住小球弹射,如果没有接住,则游戏失败一次。
要求:
1.自拟设计记分方法,和界面的其它部分;
2.滑板用键盘控制左右移动;
3.设置难度调节开关,允许游戏过程中改变这一设置,以调节小球运行速度,速度快,则难度增加。
4.小球在滑板上弹射时,允许一定量的随机变化弹射角度,以实现一定的不确定性。
使用模块:
对系统包结构、文件结构列表说明,如表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
监听鼠标位置移动的监听器。
用来捕获鼠标的移动和鼠标的当前位置,同时这个类负责板子的绘制与更新。
定义界面:
设置标题
设置大小设置
关闭是退出程序
设置打开窗体时在屏幕中间显示
设置窗体的流式布局管理器
设置窗体背景颜色
创建文本标签对象
设置文本标签前景颜色
创建进度条对象
创建按钮对象
创建菜单条对象
创建菜单对象
创建菜单选项对象
创建单选选项
创建一个按钮组
主要算法描述:
MyThread继承于Thread,使用一个单独的线程进行小球的绘制。
小球的绘制和滑板的绘制大同小异,都是使用java.awt.Graphics进行绘制的。
MyThread还兼顾着进行小球是否被接住的判断。
主要是通过返回的板子的坐标和小球的坐标来判断小球是否在板子上方的一定范围里,如果在,则判断为接住,否则,为掉落
分层结构及调用关系说明
2、程序测试报告
用例:
关键代码分析
publicvoidrun(){
drawOval();
}
publicvoiddrawOval(){
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,width,height);
y+=y1;
getColors();
g.setColor(color);
g.fillOval(x,y,width,height);
}
intx2=listener.getX();
if(y<90){
y1=5;
}
if(y>595&&x>x2&&x 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{ Thread.sleep(speed); }catch(Exceptionef){ ef.printStackTrace(); } } } } 小球的绘制其实就是不断的绘制一个圆形,只不过圆形的y坐标在不停的变化。 难度的控制是通过主程序传入的speed参数来控制的,这个参数用于Thread.sleep(speed),很显然,当这个参数与小球下落的速度成反比。 通过调用UI.text_field.setText()来更新主窗口上的分数。 结果: 结论: 一个好的算法可以让你的程序更健壮,编写的代码量更少,处理异常一直是JAVA里的常事,通过试验,让我对基础的知识更加深入了解,也对更改代码错误有了一定的提升,能看的懂错误的代码错在哪里,并进行修改,使其正确。 这个游戏只是一个简单的接球游戏,如果可以做的更好,就会更好的训练人们的集中力和反应速度,敏捷的做出正确的判断。 附录: 源程序代码: 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; publicjava.util.ArrayList 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); //创建文本标签对象 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)); button.setIcon(newjavax.swing.ImageIcon("images/Pause.gif")); button.setActionCommand("暂停"); //通过匿名内部类来创建动作监听器 java.awt.event.ActionListenerbutton_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.get(i).PauseThread(); } } if(com.equals("继续")) { button.setMargin(newInsets(0,0,0,0)); button .setIcon(newjavax.swing.ImageIcon( "images/Pause.gif")); button.setActionCommand("暂停"); for(inti=0;i list.get(i).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.JRadioButtonMenuItemeasy_item=newjavax.swing.JRadioButtonMenuItem( "简单"); javax.swing.JRadioButtonMenuItemmiddle_item=newjavax.swing.JRadioButtonMenuItem( "中等"); javax.swing.JRadioButtonMenuItemhard_item=newjavax.swing.JRadioButtonMenuItem( "困难"); //创建一个按钮组 javax.swing.ButtonGroupgroup=newjavax.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); //通过匿名内部类来创建动作监听器 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){ creatBall(50,2); } if(command.equals("困难")&&list.size()==0){ creatBall(40,2); } if(command.equals("游戏说明")){ javax.swing.JOptionPane.showMessageDialog(null,"用挡板接球,如果接不住,就算输了……\n游戏可以选择难度,包括简单、中等、困难"); } if(command.equals("关于")){ javax.swing.JOptionPane.showMessageDialog(null,"滑板反射小球游戏\n制作人: 易乐安"); } } }; //添加动作监听器 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; } /创建线程对象的方法/ 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 intx=ran.nextInt(600)+10; inty=ran.nextInt(300)+100; MyThreadth=newMyThread(g,ml,UI,x,y,speed); list.add(th); 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; privatelonglast_time; privateintresponse; privatebooleanisFinish=true; privatebooleanisPause=true; privatejava.util.ArrayList 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+=y1; getColors(); g.setColor(color); 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 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 //停在线程,并且去掉最后一个圆 lis
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 综合 实验设计