版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、綜合實驗報告:滑板反射小球游戲?qū)I(yè)班級: 遙感科學(xué)與技術(shù) 學(xué)號: 20133350 姓名: 易樂安 日期: 2015年6月30日 一、程序設(shè)計報告小球在窗口四壁彈射(虛線表示彈射的軌道)。左右移動滑板,接住小球彈射,如果沒有接住,則游戲失敗一次。要求:1. 自擬設(shè)計記分方法,和界面的其它部分;2. 滑板用鍵盤控制左右移動;3. 設(shè)置難度調(diào)節(jié)開關(guān),允許游戲過程中改變這一設(shè)置,以調(diào)節(jié)小球運行速度,速度快,則難度增加。4. 小球在滑板上彈射時,允許一定量的隨機變化彈射角度,以實現(xiàn)一定的不確定性。使用模塊:對系統(tǒng)包結(jié)構(gòu)、文件結(jié)構(gòu)列表說明,如表2-1、2-2所示。表2-1包名作用java.awt.ins
2、ets包含用于創(chuàng)建用戶界面和繪制圖形圖像的所有類java.awt.event.actionevent定義了動作的類java.awt.event.actionlistener包含用于創(chuàng)建用戶界面和繪制圖形圖像的所有的類java.awt.event.mouseevent把類全部導(dǎo)進來javax.swing.joptionpane有助于方便地彈出要求用戶提供或向其發(fā)出通知表2-2文件名作用gameui.java程序的主窗體,負責(zé)窗口和菜單的繪制以及線程的調(diào)用。mythread.java游戲的線程,主要負責(zé)小球的繪制和判斷小球是否被接住,以及記錄更新分數(shù)。mylistener.java監(jiān)聽鼠標(biāo)位置移動
3、的監(jiān)聽器。用來捕獲鼠標(biāo)的移動和鼠標(biāo)的當(dāng)前位置,同時這個類負責(zé)板子的繪制與更新。定義界面:設(shè)置標(biāo)題設(shè)置大小設(shè)置關(guān)閉是退出程序 設(shè)置打開窗體時在屏幕中間顯示設(shè)置窗體的流式布局管理器設(shè)置窗體背景顏色創(chuàng)建文本標(biāo)簽對象設(shè)置文本標(biāo)簽前景顏色創(chuàng)建進度條對象創(chuàng)建按鈕對象 創(chuàng)建菜單條對象 創(chuàng)建菜單對象 創(chuàng)建菜單選項對象 創(chuàng)建單選選項創(chuàng)建一個按鈕組 主要算法描述:mythread繼承于thread,使用一個單獨的線程進行小球的繪制。小球的繪制和滑板的繪制大同小異,都是使用java.awt.graphics進行繪制的。mythread還兼顧著進行小球是否被接住的判斷。主要是通過返回的板子的坐標(biāo)和小球的坐標(biāo)來判斷小球
4、是否在板子上方的一定范圍里,如果在,則判斷為接住,否則,為掉落進入游戲畫面根據(jù)球出現(xiàn)的位置,移動鼠標(biāo)使滑板到相應(yīng)的位置的上方,測試可以接多少個球。若滑板接到一個球,則玩家就得一分,若接不到球,就游戲結(jié)束。先選擇游戲的難度,有簡單,中等和困難。游戲結(jié)束,選擇否,退出游戲。游戲結(jié)束,選擇是,重新開始新的游戲。 分層結(jié)構(gòu)及調(diào)用關(guān)系說明2、 程序測試報告用例:關(guān)鍵代碼分析public void run() drawoval();public void drawoval() ui.text_field.settext(count + 分);/start = system.currenttimemilli
5、s();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 595 & x x2 & x 630) if (isexist) isagain();stopthread();try thread.sleep(spee
6、d); catch (exception ef) ef.printstacktrace();小球的繪制其實就是不斷的繪制一個圓形,只不過圓形的y坐標(biāo)在不停的變化。難度的控制是通過主程序傳入的speed參數(shù)來控制的,這個參數(shù)用于thread.sleep(speed),很顯然,當(dāng)這個參數(shù)與小球下落的速度成反比。通過調(diào)用ui.text_field.settext()來更新主窗口上的分數(shù)。結(jié)果:結(jié)論:一個好的算法可以讓你的程序更健壯,編寫的代碼量更少,處理異常一直是java里的常事,通過試驗,讓我對基礎(chǔ)的知識更加深入了解,也對更改代碼錯誤有了一定的提升,能看的懂錯誤的代碼錯在哪里,并進行修改,使其正確
7、。這個游戲只是一個簡單的接球游戲,如果可以做的更好,就會更好的訓(xùn)練人們的集中力和反應(yīng)速度,敏捷的做出正確的判斷。附錄:源程序代碼: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; publi
8、c javax.swing.jlabel text_field; public javax.swing.jprogressbar pbar; private string command; public java.util.arraylist list = new java.util.arraylist(); private javax.swing.jtogglebutton button; public static void main(string args) ui = new gameui(); ui.initui(); / 初始化窗體的方法/ public void initui()
9、/ 設(shè)置標(biāo)題 this.settitle(接球); / 設(shè)置大小 this.setsize(610, 635); / 設(shè)置關(guān)閉是退出程序 this.setdefaultcloseoperation(3); / 設(shè)置打開窗體時在屏幕中間顯示 this.setlocationrelativeto(null); / 設(shè)置窗體的流式布局管理器 this.setlayout(new java.awt.flowlayout(); / 設(shè)置窗體背景顏色 this.getcontentpane().setbackground(java.awt.color.black); / 創(chuàng)建文本標(biāo)簽對象 text_fie
10、ld = new javax.swing.jlabel(); javax.swing.jlabel lable = new javax.swing.jlabel(時 間 :); / 設(shè)置文本標(biāo)簽前景顏色 lable.setforeground(java.awt.color.red); text_field.setforeground(java.awt.color.red); / 創(chuàng)建進度條對象 pbar = new javax.swing.jprogressbar(0, 330); / 創(chuàng)建按鈕對象 button = new javax.swing.jtogglebutton(); butto
11、n.setmargin(new insets(0, 0, 0, 0); button.seticon(new javax.swing.imageicon(images/pause.gif); button.setactioncommand(暫停); / 通過匿名內(nèi)部類來創(chuàng)建動作監(jiān)聽器 java.awt.event.actionlistener button_listener = new java.awt.event.actionlistener() public void actionperformed(actionevent e) string com = e.getactioncomman
12、d(); if (com.equals(暫停) button.setmargin(new insets(0, 0, 0, 0); button .seticon(new javax.swing.imageicon( images/start.gif); button.setactioncommand(繼續(xù)); for (int i = 0; i list.size(); i+) list.get(i).pausethread(); if (com.equals(繼續(xù)) button.setmargin(new insets(0, 0, 0, 0); button .seticon(new ja
13、vax.swing.imageicon( images/pause.gif); button.setactioncommand(暫停); for (int i = 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); / 的到菜單條 javax.swing.jmenubar bar = creatmenubar(
14、); / 為窗體設(shè)置菜單條 this.setjmenubar(bar); / 設(shè)置窗體的可見性 this.setvisible(true); /創(chuàng)建菜單條的方法/ public javax.swing.jmenubar creatmenubar() / 創(chuàng)建菜單條對象 javax.swing.jmenubar bar = new javax.swing.jmenubar(); / 創(chuàng)建菜單對象 javax.swing.jmenu menu_menu = new javax.swing.jmenu(菜單); javax.swing.jmenu difficulty_menu = new java
15、x.swing.jmenu(難度); javax.swing.jmenu help_menu = new javax.swing.jmenu(幫助); / 創(chuàng)建菜單選項對象 javax.swing.jmenuitem star_item = new javax.swing.jmenuitem(開始); javax.swing.jmenuitem exit_item = new javax.swing.jmenuitem(退出); javax.swing.jmenuitem help_item = new javax.swing.jmenuitem(游戲說明); javax.swing.jmen
16、uitem about_item = new javax.swing.jmenuitem(關(guān)于); / 創(chuàng)建單選選項 javax.swing.jradiobuttonmenuitem easy_item = new javax.swing.jradiobuttonmenuitem( 簡單); javax.swing.jradiobuttonmenuitem middle_item = new javax.swing.jradiobuttonmenuitem( 中等); javax.swing.jradiobuttonmenuitem hard_item = new javax.swing.jr
17、adiobuttonmenuitem( 困難); / 創(chuàng)建一個按鈕組 javax.swing.buttongroup 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); / 通過匿名內(nèi)
18、部類來創(chuàng)建動作監(jiān)聽器 actionlistener listener = new java.awt.event.actionlistener() public void actionperformed(actionevent e) command = e.getactioncommand(); / 如果選擇開始,則創(chuàng)建線程對象 if (command.equals(開始) & list.size() = 0) creatball(20, 1); / 如果選擇退出按鈕,則退出程序 if (command.equals(退出) system.exit(0); / 如果選擇簡單按鈕 if (comm
19、and.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 (co
20、mmand.equals(關(guān)于) javax.swing.joptionpane.showmessagedialog(null, 滑板反射小球游戲n制作人:易樂安); ; / 添加動作監(jiān)聽器 star_item.addactionlistener(listener); exit_item.addactionlistener(listener); easy_item.addactionlistener(listener); middle_item.addactionlistener(listener); hard_item.addactionlistener(listener); help_it
21、em.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); / 返回菜單條對象 return bar; /創(chuàng)
22、建線程對象的方法/ 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(ml); for (int i = 0; i num; i+) int x = ran.nextint(600) + 10; int y = ran.nextint(300) +
23、 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 class mythread extends thread private int width = 20, height = 20; private int x, y; private ja
24、va.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 int response; private boolean isfinish = true; private boolean ispause = true; private java.uti
25、l.arraylist list; private float value = 320; private java.awt.color color = java.awt.color.blue; /重寫構(gòu)造器/ public mythread(java.awt.graphics g, mylistener listener, gameui ui, int x, int y, int speed) this.g = g; this.ui = ui; this.x = x; this.y = y; this.speed = speed; this.listener = listener; / (no
26、n-javadoc)重寫run的方法/ public void run() drawoval(); /創(chuàng)建線程的方法/ public void drawoval() 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.f
27、illoval(x, y, width, height); int x2 = listener.getx(); if (x 580) x1 = -12; if (x 10) x1 = 12; if (y 595 & x x2 & x 630) if (isexist) isagain(); stopthread(); try thread.sleep(speed); value -= 0.1; catch (exception ef) ef.printstacktrace(); / 將前一次畫的清除掉 end = system.currenttimemillis(); last_time =
28、100 - (end - start) / 1000; ui.text_field.settext(last_time + s); ui.pbar.setvalue(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(); /線程結(jié)束時消去最后一個圓的方法/ public void fadeoval(
29、) g.setcolor(java.awt.color.black); g.filloval(x, y, width, height); /重來對話框的處理方法/ 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 = 是, 否 ; strin
30、g command = 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) / 現(xiàn)將原
31、來的對象從隊列中移除 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); / 如果點擊關(guān)閉,則將線程對象從隊列中移除 if (response = -1 | response = 1) list.removeall(list); /停止線程的方法/ public void stopthread() isfinish = false; ispause = false; /暫停線程的方法/ public void pausethread() ispau
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大學(xué)園藝植物遺傳育種(花卉育種)試題及答案
- 2026年茶葉營銷(營銷規(guī)范)試題及答案
- 2025年高職特效制作(特效設(shè)計實操)試題及答案
- 2025年大學(xué)大二(酒店運營管理)酒店收益管理策略制定綜合測試題及答案
- 多糖疫苗增強策略
- 2025年大學(xué)第一學(xué)年(藝術(shù)設(shè)計)視覺傳達階段測試題及答案
- 2025年大學(xué)第四學(xué)年(教育學(xué))職業(yè)技術(shù)教育學(xué)基礎(chǔ)試題及答案
- 2025年高職(心理學(xué))心理咨詢期末測試試題及答案
- 2025年中職植物保護(病蟲害識別與防治)試題及答案
- 2025年中職包裝設(shè)計(包裝裝潢設(shè)計)試題及答案
- 貴州省納雍縣水東鄉(xiāng)水東鉬鎳礦采礦權(quán)評估報告
- GB/T 1690-2010硫化橡膠或熱塑性橡膠耐液體試驗方法
- GB 8270-2014食品安全國家標(biāo)準(zhǔn)食品添加劑甜菊糖苷
- 2023年杭州臨平環(huán)境科技有限公司招聘筆試題庫及答案解析
- 易制毒化學(xué)品日常管理有關(guān)問題權(quán)威解釋和答疑
- LF爐機械設(shè)備安裝施工方案
- 湖北省高等教育自學(xué)考試
- 企業(yè)三級安全生產(chǎn)標(biāo)準(zhǔn)化評定表(新版)
- 中心衛(wèi)生院關(guān)于成立按病種分值付費(DIP)工作領(lǐng)導(dǎo)小組及制度的通知
- 五年級上冊數(shù)學(xué)課件 口算與應(yīng)用題專項 人教版(共64張PPT)
- 梅州市梅江區(qū)村級資金財務(wù)管理制度(試行)
評論
0/150
提交評論