Java彈球游戲?qū)嶒?yàn)報(bào)告—chen_第1頁
Java彈球游戲?qū)嶒?yàn)報(bào)告—chen_第2頁
Java彈球游戲?qū)嶒?yàn)報(bào)告—chen_第3頁
Java彈球游戲?qū)嶒?yàn)報(bào)告—chen_第4頁
Java彈球游戲?qū)嶒?yàn)報(bào)告—chen_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、課 程 設(shè) 計(jì) 報(bào) 告 題 目 彈球小游戲 姓 名 方成 學(xué) 號(hào) 20 專 業(yè) java 指導(dǎo)教師 陳華恩 2013年 12 月 30 目錄一、實(shí)驗(yàn)?zāi)康?二、需求分析2三、實(shí)驗(yàn)任務(wù)21、設(shè)計(jì)32、程序要求:33、選作題:3四、開發(fā)工具與平臺(tái)3五、設(shè)計(jì)思路31、界面設(shè)計(jì)32、邏輯設(shè)計(jì)33、程序測試4六、實(shí)驗(yàn)總結(jié)5七、程序代碼5八、參考文獻(xiàn)111.瘋狂java講義122.算法導(dǎo)論123.java編程思想12一、實(shí)驗(yàn)?zāi)康?、 熟練掌握java面向?qū)ο缶幊獭?、 掌握Swing圖形用戶界面編程以及事件處理等,掌握java繪圖技術(shù)。3、 掌握timer類的靈活使用4、 培養(yǎng)獨(dú)立查找資料,并解決問題的能力

2、。二、需求分析經(jīng)典的碰撞球是一個(gè)的古老游戲,目的是在訓(xùn)練人的反應(yīng)能力。只有通過把所有的磚塊消除完,才能順利的完成任務(wù)。游戲要求如下:1、 實(shí)現(xiàn)球速度的隨機(jī)性2、 實(shí)現(xiàn)球碰撞到邊緣或者磚塊自動(dòng)反彈3、 實(shí)現(xiàn)游戲可以隨時(shí)暫停4、 實(shí)現(xiàn)游戲結(jié)束后能重新開始游戲三、實(shí)驗(yàn)任務(wù)1、 設(shè)計(jì)設(shè)計(jì)并編程實(shí)現(xiàn)彈球程序:用戶能通過菜單或者按鈕新增一小球,該小球?qū)碾S機(jī)的位置出現(xiàn),并具有隨機(jī)顏色,隨機(jī)速度以及隨機(jī)的運(yùn)動(dòng)方向,小球沿初始方向勻速運(yùn)動(dòng),當(dāng)碰到窗口邊緣時(shí),小球?qū)⒁罁?jù)受力原理改變運(yùn)動(dòng)方向(可簡化考慮,受力只改變小球的運(yùn)動(dòng)方向,小球仍按照初始速度勻速運(yùn)動(dòng),且不考慮小球之間的碰撞)。2、 程序要求:(1) 具備相

3、應(yīng)界面,并通過事件編程,實(shí)現(xiàn)相應(yīng)的菜單或者按鈕功能。(2) 使用timer,在程序窗口區(qū)域繪制小球,并以線程控制小球的移動(dòng),實(shí)現(xiàn)動(dòng)畫效果。3、 選作題:(1) 實(shí)現(xiàn)獎(jiǎng)勵(lì)機(jī)制及關(guān)卡機(jī)制四、開發(fā)工具與平臺(tái)JDK1.6+eclipse五、設(shè)計(jì)思路1、 界面設(shè)計(jì)首先建立窗口類 繼承自JFrame。該界面為主界面。在加上按鈕開始與暫停在加入JPanel面板,用于圖形界面.2、 邏輯設(shè)計(jì)程序用過響應(yīng)timer事件,按鈕事件及鍵盤事件來管理程序的運(yùn)行。程序開始窗口運(yùn)行,等待響應(yīng)用戶消息游戲開始,小球開始移動(dòng)移動(dòng)速度在每次反彈后發(fā)生變化。如果小球碰倒邊界或者磚塊,小球方向發(fā)生變化若某個(gè)小球掉到球拍下面,游戲結(jié)

4、束。按開始按鈕則重新開始游戲退出移動(dòng)球拍來使小球不至于掉到球拍下面3、 程序測試 六、實(shí)驗(yàn)總結(jié)1、這次實(shí)驗(yàn)綜合運(yùn)用了GUI編程,使我對(duì)多線程編程有了一定的了解,對(duì)java的多線程機(jī)制有了一點(diǎn)理解,更加熟練的運(yùn)用swing組件設(shè)計(jì)界面,響應(yīng)消息,接口的實(shí)現(xiàn)等等。2、通過課程設(shè)計(jì)的編程和對(duì)編程過程中遇到的問題的思考,切實(shí)的提高了我的編程能力,通過這次課程設(shè)計(jì),我鞏固所了學(xué)過的知識(shí),能用JAVA熟練地運(yùn)用其中的一些,進(jìn)一步掌握了各個(gè)指令的功能是轉(zhuǎn)向。七、程序代碼package com.fangcheng.ball.game;import java.awt.Font;import java.awt.e

5、vent.*;import javax.swing.*;import java.util.ArrayList;import java.util.Random;public class BallGame extends JFrame implements ActionListener,KeyListenerprivate JPanel p;private JButton start;private JButton stop;private JLabel ball;private JLabel qiupai;private JLabel bg;/用來放置背景圖片的JLabelprivate JLa

6、bel win;private JLabel over;private int x1=50;private int x2=15;private int y1=325;private int y2=340;/球與球拍的初始位置private Timer time;/周期性觸發(fā)球的移動(dòng)事件的timer對(duì)象private boolean isRight=false;/球是否向右移動(dòng)private boolean isDow=false;/球是否為下降private boolean isOver=false;/是否游戲結(jié)束private boolean isYi=false;/球拍是否能移動(dòng)priva

7、te int xsudu=3;private int ysudu=3;/球的x,y速度,初始值為3private Random ran=new Random();/用于隨機(jī)產(chǎn)生球的x,y速度private ArrayList removeBrickList;/被移除的磚塊的listprivate ArrayList brickList; /游戲時(shí)磚塊的listprivate Font font;/* * 構(gòu)造器,參數(shù)為窗口標(biāo)題 * param s */ public BallGame(String s) super(s); gameShow(); /* * 用于游戲窗口繪制的方法 */ pub

8、lic void gameShow() /初始化組件 ImageIcon img1=new ImageIcon(BallGame.class.getResource(/images/ball.png); ImageIcon img2=new ImageIcon(this.getClass().getResource(/images/pa.png); ImageIcon img3=new ImageIcon(this.getClass().getResource(/images/kuang.png); ImageIcon img4=new ImageIcon(this.getClass().ge

9、tResource(/images/win.gif); ImageIcon img5=new ImageIcon(this.getClass().getResource(/images/over.png); ImageIcon img6=new ImageIcon(this.getClass().getResource(/images/brick.gif); ImageIcon img7=new ImageIcon(this.getClass().getResource(/images/brick1.png); ImageIcon img8=new ImageIcon(this.getClas

10、s().getResource(/images/brick2.png); font=new Font(微軟雅黑, Font.PLAIN, 12); ball=new JLabel(img1); qiupai=new JLabel(img2); bg=new JLabel(img3); win=new JLabel(img4); over=new JLabel(img5); p=new JPanel(); start=new JButton(開始); stop=new JButton(暫停); start.setFont(font); stop.setFont(font); time=new T

11、imer(10,this); brickList=new ArrayList(); removeBrickList=new ArrayList(); /初始化磚塊 for(int i=0;i27;i+) JLabel temp; if(i%6=0)/用來給磚塊加載不同的圖片 temp=new JLabel(img6); else if(i%6=1) temp=new JLabel(img7); else if(i%6=2) temp=new JLabel(img8); else if(i%6=3) temp=new JLabel(img7); else if(i%6=4) temp=new J

12、Label(img8); else temp=new JLabel(img6); brickList.add(temp); /將磚塊添加至面板 for(int i=0;ibrickList.size();i+) if(i9) brickList.get(i).setBounds(25*i+10, 15, 20, 20); else if(i18) brickList.get(i).setBounds(25*(i-9)+10, 40, 20, 20); else if(i27) brickList.get(i).setBounds(25*(i-18)+10, 65, 20, 20); p.add

13、(brickList.get(i); /置空布局管理器 this.setLayout(null); p.setLayout(null); /絕對(duì)位置布局組件 p.setBounds(0, 0, 240, 500); start.setBounds(50, 400, 60, 30); stop.setBounds(140, 400, 60, 30); this.setBounds(450, 100,246, 465); ball.setBounds(x1, y1, img1.getIconWidth(), img1.getIconHeight(); qiupai.setBounds(x2, y2

14、, img2.getIconWidth(), img2.getIconHeight(); bg.setBounds(0, 0,img3.getIconWidth(), img3.getIconHeight(); over.setBounds(10, 30, img4.getIconWidth(), img4.getIconHeight(); win.setBounds(10, 30, img5.getIconWidth(), img5.getIconHeight(); /先將勝利與結(jié)束標(biāo)簽設(shè)為不可見 over.setVisible(false); win.setVisible(false);

15、/添加監(jiān)視器 start.addActionListener(this); stop.addActionListener(this); qiupai.addKeyListener(this); /添加鍵盤監(jiān)視器(為了防止焦點(diǎn)丟失造成的問題,將所有組件都添加鍵盤監(jiān)視器) p.addKeyListener(this); start.addKeyListener(this); stop.addKeyListener(this); this.addKeyListener(this); /加載組件 p.add(ball); p.add(qiupai); p.add(over); p.add(win);

16、p.add(bg); this.add(start); this.add(stop); this.add(p); this.setResizable(false); this.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); this.setVisible(true); /* * 主程序入口 * param args */ public static void main(String args) new BallGame(碰撞球);/* * 發(fā)生操作

17、的監(jiān)視器 */public void actionPerformed(ActionEvent e) if(e.getSource().equals(start)if(isOver)x1=qiupai.getX()+30;y1=qiupai.getY()-15;/當(dāng)游戲結(jié)束時(shí)按開始按鈕,即二次開始游戲時(shí)將球的位置至于球拍上isOver=false;over.setVisible(false);win.setVisible(false);/遍歷remove列表,將上次游戲移除的磚塊再次繪制到面板(添加至bricklist)for(int i=0;iremoveBrickList.size();i+

18、)removeBrickList.get(i).setVisible(true);brickList.add(removeBrickList.get(i);isYi=true;time.start();else if(e.getSource().equals(stop)if(!isOver) time.stop();/只有當(dāng)游戲沒有結(jié)束時(shí),才能暫停 else/遍歷磚塊listfor(int i=0;i=brickList.get(i).getX()&ball.getX()=brickList.get(i).getX()+20&ball.getY()=brickList.get(i).getY()+20)/將需要移除的磚塊保存到被移除的磚塊的removeBrickListremoveBrickList.add(brickList.get(i);brickList.get(i).setVisible(false);brickList.remove(i);isDow=true;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論