


版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、%CiTQ薩綜合實(shí)驗(yàn)報(bào)告:滑板反射小球游戲?qū)I(yè)班級(jí):遙感科學(xué)與技術(shù)學(xué)號(hào):20133350姓名:易樂安日期:2015年6月30日"、程序設(shè)計(jì)報(bào)告小球在窗口四壁彈射(虛線表示彈射的軌道)。左右移動(dòng)滑板,接住小球彈射,如果沒有接住,則游戲失敗一次。要求:1. 白擬設(shè)計(jì)記分方法,和界面的其它部分;滑板用鍵盤控制左右移動(dòng);設(shè)置難度調(diào)節(jié)開關(guān),允許游戲過(guò)程中改變這一設(shè)置,以調(diào)節(jié)小球運(yùn)行速度,速度快,則難度增加。2. 小球在滑板上彈射時(shí),允許一定量的隨機(jī)變化彈射角度,以實(shí)現(xiàn)一定的不確定性。使用模塊:對(duì)系統(tǒng)包結(jié)構(gòu)、文件結(jié)構(gòu)列表說(shuō)明,如表2-1、2-2所示。表2-1包名作用Java.awt.Insets
2、包含用于創(chuàng)建用戶界面和繪制圖形圖像的所有類Java.awt.event.ActionEvent定義了動(dòng)作的類Java.awt.event.ActionListener包含用于創(chuàng)建用戶界面和繪制圖形圖像的所有的類Java.awt.event.MouseEvent把類全部導(dǎo)進(jìn)來(lái)Javax.swing.JOptionPane有助于方便地彈出要求用戶提供或向其發(fā)出通知表2-2文件名作用GameUI.java程序的主窗體,負(fù)責(zé)窗口和菜單的繪制以及線程的調(diào)用。MyThread.Java游戲的線程,主要負(fù)責(zé)小球的繪制和判斷小球是否被接住,以及記錄更新分?jǐn)?shù)。MyListener.java監(jiān)聽鼠標(biāo)位置移動(dòng)的監(jiān)聽
3、器。用來(lái)捕獲鼠標(biāo)的移動(dòng)和鼠標(biāo)的當(dāng)前位置,問(wèn)時(shí)這個(gè)類負(fù)責(zé)板子的繪制與更新。定義界面:設(shè)置標(biāo)題設(shè)置大小設(shè)置關(guān)閉是退出程序設(shè)置打開窗體時(shí)在屏幕中間顯示設(shè)置窗體的流式布局管理器設(shè)置窗體背景顏色創(chuàng)建文本標(biāo)簽對(duì)象設(shè)置文本標(biāo)簽前景顏色創(chuàng)建進(jìn)度條對(duì)象創(chuàng)建按鈕對(duì)象創(chuàng)建菜單條對(duì)象創(chuàng)建菜單對(duì)象創(chuàng)建菜單選項(xiàng)對(duì)象創(chuàng)建單選選項(xiàng)創(chuàng)建一個(gè)按鈕組主要算法描述:MyThread繼承于Thread,使用一個(gè)單獨(dú)的線程進(jìn)行小球的繪制。小球的繪制和滑板的繪制大同小異,都是使用java.awt.Graphics進(jìn)行繪制的。MyThread還兼顧著進(jìn)行小球是否被接住的判斷。主要是通過(guò)返回的板子的坐標(biāo)和小球的坐標(biāo)來(lái)判斷小球是否在板子上方的一
4、定范圍里,如果在,則判斷為接住,否則,為掉落分層結(jié)構(gòu)及調(diào)用關(guān)系說(shuō)明二、程序測(cè)試報(bào)告用例:關(guān)鍵代碼分析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();)小球的繪制其實(shí)就是不斷的繪制一個(gè)圓形,只不過(guò)圓形的y坐標(biāo)在不停的變化。難度的控制是通過(guò)主程序傳入的speed參數(shù)來(lái)控制的,這個(gè)參數(shù)用于Thread.sleep(speed),很顯然,當(dāng)這個(gè)參數(shù)與小球下落的速度成反比。通過(guò)調(diào)用UI.text_field.setText()來(lái)更新主窗口上的分?jǐn)?shù)。結(jié)果:結(jié)論:一個(gè)好的算法可以讓你的程序更健壯,編寫的代碼量更少,處理異常一直是JAVA里的常事,通過(guò)試驗(yàn),
7、讓我對(duì)基礎(chǔ)的知識(shí)更加深入了解,也對(duì)更改代碼錯(cuò)誤有了一定的提升,能看的懂錯(cuò)誤的代碼錯(cuò)在哪里,并進(jìn)行修改,使其正確。這個(gè)游戲只是一個(gè)簡(jiǎn)單的接球游戲,如果可以做的更好,就會(huì)更好的訓(xùn)練人們的集中力和反應(yīng)速度,敏捷的做出正確的判斷。附錄:源程序代碼: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()(/設(shè)置標(biāo)題this.setTitle("接球");/設(shè)置大小this.setSize(610,635);/設(shè)置關(guān)閉是退出程序this.setDefaultCloseOperation(3);/設(shè)置打開窗體時(shí)在屏幕中間顯示this.setLocationRelativeTo(null);/設(shè)置窗體的流式布局管理器this.setLayout(newjava.awt.FlowLayout();/設(shè)置窗體背景顏色this.getContentPane().setBackground(java.awt.Color
10、.black);/創(chuàng)建文本標(biāo)簽對(duì)象text_field=newjavax.swing.JLabel();javax.swing.JLabellable=newjavax.swing.JLabel("時(shí)間:");/設(shè)置文本標(biāo)簽前景顏色lable.setForeground(java.awt.Color.red);text_field.setForeground(java.awt.Color.red);/創(chuàng)建進(jìn)度條對(duì)象pBar=newjavax.swing.JProgressBar(0,330);/創(chuàng)建按鈕對(duì)象button=newjavax.swing.JToggleButto
11、n();button.setMargin(newInsets(0,0,0,0);button.setIcon(newjavax.swing.ImageIcon("images/Pause.gif");button.setActionCommand("暫停");/通過(guò)匿名內(nèi)部類來(lái)創(chuàng)建動(dòng)作監(jiān)聽器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("繼續(xù)");for(inti=0;i<list.size();i+)list.get(i).PauseThread();if(com.equals("繼續(xù)")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();/為窗體設(shè)置菜單條this.setJMenuBar(bar);/設(shè)置窗體的可見性this.setVisible(true);/創(chuàng)建菜單條的方法/publicjavax.swing.JMenuBarcreatMenuBar()/創(chuàng)建菜單條對(duì)象javax.swing.JMenuBarbar=newjavax.swing.JMenuBar。;/創(chuàng)建菜單對(duì)象javax.swing.JMenumenu_menu=newjavax.swing.JMenu("菜單");javax.swing.JMenudiffi
15、culty_menu=newjavax.swing.JMenu("難度");javax.swing.JMenuhelp_menu=newjavax.swing.JMenu("幫助");/創(chuàng)建菜單選項(xiàng)對(duì)象javax.swing.JMenuItemstar_item=newjavax.swing.JMenuItem("開始");javax.swing.JMenuItemexit_item=newjavax.swing.JMenuItem("退出");javax.swing.JMenuItemhelp_item=newj
16、avax.swing.JMenuItem("游戲說(shuō)明");javax.swing.JMenuItemabout_item=newjavax.swing.JMenuItem("關(guān)于");/創(chuàng)建單選選項(xiàng)javax.swing.JRadioButtonMenuItemjavax.swing.JRadioButtonMenuItem("簡(jiǎn)單");javax.swing.JRadioButtonMenuItemeasy_itemmiddle_itemnewnewjavax.swing.JRadioButtonMenuItem(new"
17、中等");javax.swing.JRadioButtonMenuItemhard_itemjavax.swing.JRadioButtonMenuItem("困難");/創(chuàng)建一個(gè)按鈕組javax.swing.ButtonGroupgroup=newjavax.swing.ButtonGroup();/將單選按鈕添加到按鈕組中g(shù)roup.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);/通過(guò)匿名內(nèi)部類來(lái)創(chuàng)建動(dòng)作監(jiān)聽器ActionListenerlistener=newjava.awt.event.ActionListener()publicvoidactionPerformed(ActionEvente)command=e.getActionCommand();/如果選擇開始,則創(chuàng)建線程對(duì)象if(command.equals("開始")&&list.size()=0)creatBall(20,1);/如果選擇退出按鈕,則退出程序if(co
19、mmand.equals("退出")System.exit(0);/如果選擇簡(jiǎn)單按鈕if(command.equals("簡(jiǎn)單")&&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;游戲說(shuō)明")(javax.swing.JOptionPane.showMessageDialog(null,”用擋板接球,如果接不住,就算輸了n游戲可以選擇難度,包括簡(jiǎn)單、中等、困難");if(command.equals("關(guān)于")(javax.swing.JOptionPane.showMessageDialog(null,”滑板反射小球游戲n制作人:易樂安");/添加動(dòng)作監(jiā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);/將菜單選項(xiàng)對(duì)象添加到菜單對(duì)象上menu_menu.add(star_item);menu_menu.add(exit_item);help_menu.add(help_item);help_menu.add(abo
22、ut_item);/將菜單對(duì)象添加到菜單條上bar.add(menu_menu);bar.add(difficulty_menu);bar.add(help_menu);/返回菜單條對(duì)象returnbar;/創(chuàng)建線程對(duì)象的方法/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;/重寫構(gòu)造器/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、創(chuàng)建線程的方法/publicvoiddrawOval()start=System.currentTimeMillis();while(isFinish)while(isPause)synchronized(this.g)/畫一個(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+)/停在線程,并且去掉最后一個(gè)圓list.get(j).stopThread();list.get(j).fadeOval();stopThread();showDialog();/線程結(jié)束時(shí)消去最后一個(gè)圓的方法/publicvoidfadeOval()g.setColor(java.awt.Color.black);g.fillOval(x,y,width,height);/重來(lái)
29、對(duì)話框的處理方法/publicvoidisAgain()isexist=false;list=Ul.list;System.out.println(list.size();for(intj=0;j<list.size();j+)/停在線程,并且去掉最后一個(gè)圓list.get(j).stopThread();list.get(j).fadeOval();Objectoptions="是","否"Stringcommand=UI.getCommand();response=JOptionPane.showOptionDialog(null,”堅(jiān)持就是勝
30、利,是否再來(lái)一次?",null,JOptionPane.YES_OPTION,JOptionPane.NO_OPTION,null,options,null);System.out.println(response);if(response=0)if(command.equals("簡(jiǎn)單")|command.equals("開始")AgainThread();if(list.size()!=0)/現(xiàn)將原來(lái)的對(duì)象從隊(duì)列中移除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);/如果點(diǎn)擊關(guān)閉,則將線程對(duì)象從隊(duì)列中移除if(response=-1|response=1)(list.removeAll(list);/停止線程的方法/publicvoidsto
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 母嬰護(hù)理服務(wù)培訓(xùn)與兒童游樂場(chǎng)合作合同
- 高速列車機(jī)組制動(dòng)系統(tǒng)考核補(bǔ)充協(xié)議
- 智能穿戴硬件升級(jí)與智能生活場(chǎng)景融合合同
- 快遞員與快遞公司勞動(dòng)合同續(xù)簽合同
- 2025年中國(guó)辦公設(shè)備及耗材行業(yè)市場(chǎng)前景預(yù)測(cè)及投資價(jià)值評(píng)估分析報(bào)告
- 電商支付接口技術(shù)合作開發(fā)合同
- 網(wǎng)店平臺(tái)遷移包含廣告投放與推廣支持協(xié)議
- 藝術(shù)表演機(jī)構(gòu)專業(yè)演員全職崗位合同
- 股權(quán)繼承安排與公司治理結(jié)構(gòu)優(yōu)化合作協(xié)議
- 模具制造工藝版權(quán)許可補(bǔ)充協(xié)議
- 荔枝采摘合同協(xié)議書
- 太湖蘇州轄區(qū)生態(tài)清淤一期工程環(huán)境影響報(bào)告書
- 精神分裂癥患者個(gè)案護(hù)理查房
- 2025屆江蘇省蘇州市高考沖刺押題(最后一卷)英語(yǔ)試卷含解析
- 中國(guó)共產(chǎn)主義青年團(tuán)紀(jì)律處分條例試行解讀學(xué)習(xí)
- 三方水泥合同協(xié)議
- 2025至2030年抗應(yīng)激添加劑項(xiàng)目投資價(jià)值分析報(bào)告
- 23《“蛟龍”探海》公開課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)
- 研學(xué)部管理制度
- 帶電粒子在復(fù)合場(chǎng)中的運(yùn)動(dòng)教學(xué)設(shè)計(jì)
- 通信光纜線路工程安全技術(shù)交底
評(píng)論
0/150
提交評(píng)論