Java綜合實驗設(shè)計.doc_第1頁
Java綜合實驗設(shè)計.doc_第2頁
Java綜合實驗設(shè)計.doc_第3頁
Java綜合實驗設(shè)計.doc_第4頁
Java綜合實驗設(shè)計.doc_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

精品文檔綜合實驗報告:滑板反射小球游戲?qū)I(yè)班級: 遙感科學(xué)與技術(shù) 學(xué)號: 20133350 姓名: 易樂安 日期: 2015年6月30日 1歡迎下載。一、程序設(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.Insets包含用于創(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程序的主窗體,負(fù)責(zé)窗口和菜單的繪制以及線程的調(diào)用。MyThread.Java游戲的線程,主要負(fù)責(zé)小球的繪制和判斷小球是否被接住,以及記錄更新分?jǐn)?shù)。MyListener.java監(jiān)聽鼠標(biāo)位置移動的監(jiān)聽器。用來捕獲鼠標(biāo)的移動和鼠標(biāo)的當(dāng)前位置,同時這個類負(fù)責(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)來判斷小球是否在板子上方的一定范圍里,如果在,則判斷為接住,否則,為掉落進入游戲畫面根據(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.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);int x2 = listener.getX();if (y 595 & x x2 & x 630) if (isexist) isAgain();stopThread();try Thread.sleep(speed); catch (Exception ef) ef.printStackTrace();小球的繪制其實就是不斷的繪制一個圓形,只不過圓形的y坐標(biāo)在不停的變化。難度的控制是通過主程序傳入的speed參數(shù)來控制的,這個參數(shù)用于Thread.sleep(speed),很顯然,當(dāng)這個參數(shù)與小球下落的速度成反比。通過調(diào)用UI.text_field.setText()來更新主窗口上的分?jǐn)?shù)。結(jié)果:結(jié)論:一個好的算法可以讓你的程序更健壯,編寫的代碼量更少,處理異常一直是JAVA里的常事,通過試驗,讓我對基礎(chǔ)的知識更加深入了解,也對更改代碼錯誤有了一定的提升,能看的懂錯誤的代碼錯在哪里,并進行修改,使其正確。這個游戲只是一個簡單的接球游戲,如果可以做的更好,就會更好的訓(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; public 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() / 設(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_field = 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(); button.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.getActionCommand(); 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 javax.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(); / 為窗體設(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 javax.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.JMenuItem 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.JRadioButtonMenuItem( 困難); / 創(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)部類來創(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 (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(關(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_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); / 返回菜單條對象 return bar; /創(chuàng)建線程對象的方法/ 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) + 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 java.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.util.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; / (non-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.fillOval(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 = 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() 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 = 是, 否 ; String 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)將原來的對象從隊列中移除 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() isPause = false; /繼續(xù)線程的方法/ public void ContinueThread()

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論