Java綜合實驗設計_第1頁
Java綜合實驗設計_第2頁
Java綜合實驗設計_第3頁
已閱讀5頁,還剩2頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、%CiTQ薩綜合實驗報告:滑板反射小球游戲專業班級:遙感科學與技術學號:20133350姓名:易樂安日期:2015年6月30日"、程序設計報告小球在窗口四壁彈射(虛線表示彈射的軌道)。左右移動滑板,接住小球彈射,如果沒有接住,則游戲失敗一次。要求:1. 白擬設計記分方法,和界面的其它部分;滑板用鍵盤控制左右移動;設置難度調節開關,允許游戲過程中改變這一設置,以調節小球運行速度,速度快,則難度增加。2. 小球在滑板上彈射時,允許一定量的隨機變化彈射角度,以實現一定的不確定性。使用模塊:對系統包結構、文件結構列表說明,如表2-1、2-2所示。表2-1包名作用Java.awt.Insets

2、包含用于創建用戶界面和繪制圖形圖像的所有類Java.awt.event.ActionEvent定義了動作的類Java.awt.event.ActionListener包含用于創建用戶界面和繪制圖形圖像的所有的類Java.awt.event.MouseEvent把類全部導進來Javax.swing.JOptionPane有助于方便地彈出要求用戶提供或向其發出通知表2-2文件名作用GameUI.java程序的主窗體,負責窗口和菜單的繪制以及線程的調用。MyThread.Java游戲的線程,主要負責小球的繪制和判斷小球是否被接住,以及記錄更新分數。MyListener.java監聽鼠標位置移動的監聽

3、器。用來捕獲鼠標的移動和鼠標的當前位置,問時這個類負責板子的繪制與更新。定義界面:設置標題設置大小設置關閉是退出程序設置打開窗體時在屏幕中間顯示設置窗體的流式布局管理器設置窗體背景顏色創建文本標簽對象設置文本標簽前景顏色創建進度條對象創建按鈕對象創建菜單條對象創建菜單對象創建菜單選項對象創建單選選項創建一個按鈕組主要算法描述:MyThread繼承于Thread,使用一個單獨的線程進行小球的繪制。小球的繪制和滑板的繪制大同小異,都是使用java.awt.Graphics進行繪制的。MyThread還兼顧著進行小球是否被接住的判斷。主要是通過返回的板子的坐標和小球的坐標來判斷小球是否在板子上方的一

4、定范圍里,如果在,則判斷為接住,否則,為掉落分層結構及調用關系說明二、程序測試報告用例:關鍵代碼分析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;getCo

5、lors();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)

6、if(isexist)isAgain();)stopThread();)tryThread.sleep(speed);)catch(Exceptionef)(ef.printStackTrace();)小球的繪制其實就是不斷的繪制一個圓形,只不過圓形的y坐標在不停的變化。難度的控制是通過主程序傳入的speed參數來控制的,這個參數用于Thread.sleep(speed),很顯然,當這個參數與小球下落的速度成反比。通過調用UI.text_field.setText()來更新主窗口上的分數。結果:結論:一個好的算法可以讓你的程序更健壯,編寫的代碼量更少,處理異常一直是JAVA里的常事,通過試驗,

7、讓我對基礎的知識更加深入了解,也對更改代碼錯誤有了一定的提升,能看的懂錯誤的代碼錯在哪里,并進行修改,使其正確。這個游戲只是一個簡單的接球游戲,如果可以做的更好,就會更好的訓練人們的集中力和反應速度,敏捷的做出正確的判斷。附錄:源程序代碼:importjava.awt.Insets;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;/游戲界面類/publicclassGameUIextendsjavax.swing.JFrame(privatestaticGameUIUI;privatejava.awt.G

8、raphicsg;privateMyListenerml;publicjavax.swing.JLabeltext_field;publicjavax.swing.JProgressBarpBar;privateStringcommand;publicjava.util.ArrayList<MyThread>list=newjava.util.ArrayList<MyThread>();privatejavax.swing.JToggleButtonbutton;publicstaticvoidmain(Stringargs)(UI=newGameUI();UI.ini

9、tUI();/初始化窗體的方法/publicvoidinitUI()(/設置標題this.setTitle("接球");/設置大小this.setSize(610,635);/設置關閉是退出程序this.setDefaultCloseOperation(3);/設置打開窗體時在屏幕中間顯示this.setLocationRelativeTo(null);/設置窗體的流式布局管理器this.setLayout(newjava.awt.FlowLayout();/設置窗體背景顏色this.getContentPane().setBackground(java.awt.Color

10、.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.JToggleButto

11、n();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.getA

12、ctionCommand();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(newInse

13、ts(0,0,0,0);button.setIcon(newjavax.swing.ImageIcon("images/Pause.gif");button.setActionCommand("暫停");for(inti=0;i<list.size();i+)list.get(i).ContinueThread();button.addActionListener(button_listener);this.add(button);this.add(lable);this.add(pBar);this.add(text_field);/的到菜單條j

14、avax.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.JMenudiffi

15、culty_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=newj

16、avax.swing.JMenuItem("游戲說明");javax.swing.JMenuItemabout_item=newjavax.swing.JMenuItem("關于");/創建單選選項javax.swing.JRadioButtonMenuItemjavax.swing.JRadioButtonMenuItem("簡單");javax.swing.JRadioButtonMenuItemeasy_itemmiddle_itemnewnewjavax.swing.JRadioButtonMenuItem(new"

17、中等");javax.swing.JRadioButtonMenuItemhard_itemjavax.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_me

18、nu.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(co

19、mmand.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(&

20、quot;游戲說明")(javax.swing.JOptionPane.showMessageDialog(null,”用擋板接球,如果接不住,就算輸了n游戲可以選擇難度,包括簡單、中等、困難");if(command.equals("關于")(javax.swing.JOptionPane.showMessageDialog(null,”滑板反射小球游戲n制作人:易樂安");/添加動作監聽器star_item.addActionListener(listener);exit_item.addActionListener(listener);e

21、asy_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(abo

22、ut_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);fo

23、r(inti=0;i<num;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,heigh

24、t=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<My

25、Thread>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();/

26、創建線程的方法/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

27、)(x1=12;if(y<90)(y1=12;if(y>595&&x>x2&&x<x2+100)(y1=-12;if(y>630)if(isexist)isAgain();stopThread();tryThread.sleep(speed);value-=0.1;catch(Exceptionef)ef.printStackTrace();/將前一次畫的清除掉end=System.currentTimeMillis();last_time=100-(end-start)/1000;UI.text_field.setText(las

28、t_time+"s");UI.pBar.setValue(int)value);if(last_time=0)list=UI.list;for(intj=0;j<list.size();j+)/停在線程,并且去掉最后一個圓list.get(j).stopThread();list.get(j).fadeOval();stopThread();showDialog();/線程結束時消去最后一個圓的方法/publicvoidfadeOval()g.setColor(java.awt.Color.black);g.fillOval(x,y,width,height);/重來

29、對話框的處理方法/publicvoidisAgain()isexist=false;list=Ul.list;System.out.println(list.size();for(intj=0;j<list.size();j+)/停在線程,并且去掉最后一個圓list.get(j).stopThread();list.get(j).fadeOval();Objectoptions="是","否"Stringcommand=UI.getCommand();response=JOptionPane.showOptionDialog(null,”堅持就是勝

30、利,是否再來一次?",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)/現將原來的對象從隊列中移除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);/停止線程的方法/publicvoidsto

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論