JAVA魔板游戲_第1頁
JAVA魔板游戲_第2頁
JAVA魔板游戲_第3頁
JAVA魔板游戲_第4頁
JAVA魔板游戲_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、j ja av va a 程程序序設(shè)設(shè)計計 課課程程設(shè)設(shè)計計報報告告xxx魔板游戲魔板游戲?qū)I(yè)專業(yè)xxx學(xué)生姓名學(xué)生姓名xxx班級班級xxx學(xué)號學(xué)號xxx指導(dǎo)教師指導(dǎo)教師xxx完成日期完成日期xxx目目 錄錄目 錄.21 概 述.11.1 課程設(shè)計目的 .11.2 課程設(shè)計內(nèi)容 .12 系統(tǒng)需求分析.12.1 系統(tǒng)目標(biāo) .12.2 主體功能 .12.3 開發(fā)環(huán)境 .23 系統(tǒng)概要設(shè)計.23.1 系統(tǒng)的功能模塊劃分 .23.2 系統(tǒng)流程圖 .44 系統(tǒng)詳細(xì)設(shè)計 .65 測試.75.1 測試方案 .75.2 測試結(jié)果 .76 小結(jié).8參考文獻(xiàn).9附 錄.10附錄 1 源程序清單 .10附錄 1 1

2、.1puzzleframe 模塊源程序 .10附錄 1.2 puzzlepad 模塊源程序 .12附錄 1.3 squarepoint 類模塊源程序 .19模板游戲的設(shè)計模板游戲的設(shè)計1 概 述 1.1 課程設(shè)計目的利用所學(xué)高級語言的語法特性,結(jié)合數(shù)據(jù)結(jié)構(gòu)算法、網(wǎng)絡(luò)知識、文件處理和數(shù)據(jù)庫等知識完成綜合題目的設(shè)計和代碼實現(xiàn),并培養(yǎng)鍛煉分析程序、撰寫報告等能力。1.2 課程設(shè)計內(nèi)容(1)設(shè)計一款經(jīng)典的智力游戲,魔板游戲。魔板由 3*3 或 4*4 個格子組成。對于 3*3 魔板,在前 8 個格子里隨即放置 8 個編號 1-8 的方塊,最后一個格子是未放置方塊的空格子;對于 4*4 的魔板,在前 1

3、5 格子里隨即放置 15 編號 1-15 的方塊,最后一個格子是未放置方塊的空格子。(2)用鼠標(biāo)單擊任何與空格子水平或垂直相鄰的方塊可以把該方塊移入空格子,而當(dāng)前方塊移動之前所在的格子成為空格子。通過不斷地移動方塊可以將方塊一行一行地按數(shù)字順序排好,例如,對于 3*3 格子組成的魔板,要求方塊最后排列的順序如圖 6.1 所示。(3)魔板游戲也可以使用圖像來代替數(shù)字。例如,對于 4*4 的魔板,將一幅圖像分成 4*4 幅小圖像,除去最后一幅小圖像(圖像的右下角),將其余各幅小圖像打亂順序后放在魔板方塊上,最終目標(biāo)是通過移動方塊恢復(fù)原始圖像(不包括圖像的右下角)。(4)魔板游戲分為兩個級別,用戶可

4、以通過界面上提供的菜單來選擇“初級”或“高級”兩個級別。對于“初級”級別,魔板由 3*3 個格子組成;對于“高級”級別,魔板由 4*4 個格子組成 2 系統(tǒng)需求分析2.1 系統(tǒng)目標(biāo)設(shè)計 gui 界面的魔板游戲程序。2.2 主體功能這個程序定義了一些組件,工具欄按鈕,文本區(qū)和菜單。魔板游戲程序設(shè)計通過 puzzleframe.java、puzzlepad.java、squarepoint.java 3 個類來實現(xiàn)魔板游戲的整體功能。2.3 開發(fā)環(huán)境操作系統(tǒng):microsoft windows xp/7開發(fā)工具:jdk1.6.0_22 、ultraedit3 系統(tǒng)概要設(shè)計3.1 系統(tǒng)的功能模塊劃分

5、在設(shè)計魔板游戲時,需要編寫 3 個 java 源文件:puzzleframe.java、puzzlepad.java、squarepoint.java。魔板游戲除了需要編寫的上述 3 個 java 源文件所給出的類外,還需要 java系統(tǒng)提供的一些重要的類,如 jmenuitem、jbutton 和 jradiobutton 等類。魔板游戲的總體功能圖如圖 3-1 所示。主界面開始選擇級別選擇圖像數(shù)字玩法圖像玩法初級高級圖圖 3-13-1 總體功能圖總體功能圖3.1.23.1.2 puzzleframe.java 類模塊puzzleframe 類負(fù)責(zé)創(chuàng)建魔板游戲的主窗口,該類含有 main 方

6、法,程序從該類開始。puzzleframe 類的成員變量中有 4 種重要類型的對象:puzzlepad、jmenuitem、jradiobutton 和 jbutton。puzzleframe 類的主要成員的作用將在后面的詳細(xì)設(shè)計中闡述,puzzleframe 類主要成員變量(屬性)和主要方法如表 3-1、3-2 所示。成員變量描述變量類型名稱魔板開始游戲的按鈕選擇玩法選擇級別puzzlepadjbuttonjradiobuttonjmenuitempuzzlepad開始數(shù)字玩法,圖像玩法初級,高級表表 3-13-1 puzzleframe.javava 主要成員變量(屬性)主要成員變量(屬性

7、)名稱功能備注puzzleframeactionperformedmain創(chuàng)建程序主窗口處理 actionevent 事件程序開始運行的方法構(gòu)造方法接口方法表表 3-23-2 puzzleframe.java 主要方法主要方法3.1.33.1.3 puzzlepad.java 類模塊puzzlepad 類創(chuàng)建的對象是 puzzleframe 類最重要的成員之一,代表“魔板” 。該類的成員變量中有 5 種重要類型的對象:point、block 和 image。puzzlepad 類類主要成員變量(屬性)和主要方法如表 3-3、3-4 所示。描述變量類型名稱魔板中的行數(shù)和列數(shù)魔板中方塊的寬和高魔板

8、中二維點數(shù)組魔板中而為方塊數(shù)組模板可能用到的圖像intintsquarepointjbuttonimagerows,columswidth,heightpointblockimage表表 3-33-3 puzzlepad.java a 主要成員變量(屬性)主要成員變量(屬性)名稱功能備注puzzlepad隨機(jī)排列數(shù)字隨機(jī)排列圖像paintcomponentactionperformed創(chuàng)建魔板對象隨機(jī)排列魔板中方塊上的數(shù)字隨機(jī)排列魔板中方塊上的圖像繪制圖像處理 actionevent 事件構(gòu)造方法接口方法表表 3-43-4 puzzlepad.java 主要方法主要方法3.1.43.1.4 s

9、quarepoint.java 類模塊squarepoint 類負(fù)責(zé)創(chuàng)建確定位置的對象,使用 point 對象可以確定 block 對象在 puzzlepad 對象中的位置,即確定“方塊”在“魔板”中的位置。squarepoint.java 類主要成員變量(屬性)和主要方法如表 3-5、3-6 所示。描述變量類型名稱判斷點上是否有方塊點上的方塊對象booleanjbutton有方塊block表表 3-53-5 squarepoint.java 主要成員變量(屬性)主要成員變量(屬性)名稱功能備注squarepointget 有方塊set 有方塊setblockgetblock創(chuàng)建“點”對象判斷

10、點上是否有方塊設(shè)置點上是否有方塊在點上放置方塊獲取點上的方塊構(gòu)造方法表表 3-63-6 squarepoint.java 主要方法主要方法3.2 系統(tǒng)流程圖根據(jù)對模板游戲的功能分析,設(shè)計得到魔板游戲總流程,如圖 2-2 所示:開始魔板游戲開始界面switch改變游戲難度選初級初級高級重新放置方塊改變游戲玩法選擇數(shù)字玩法數(shù)字玩法圖像玩法確定玩法退出結(jié)束是否是否圖圖 2-22-2 系統(tǒng)流程圖系統(tǒng)流程圖4 系統(tǒng)詳細(xì)設(shè)計4.1 運行效果1、將三個 java 文件和圖像文件保存到一個文件夾中,例如 c:moban。將三個 java 文件分別編譯生成相應(yīng)的字節(jié)碼文件(class) 。然后,用 java 解

11、釋器運行主類:c:mobanjava puzzleframe 效果如圖 4-1、4-2 所示。圖 4-1 數(shù)字玩法主界面圖 4-2 圖像玩法主界面本程序?qū)崿F(xiàn)的游戲分為初級和高級模式,可以在單機(jī)選擇級別之后進(jìn)行選擇級別模式。初級的話共分為 9 格魔板,一個為空,8 個魔板上下左右自由移動,直至排列完成;高級的話分為 16 格魔板,一個為空,15 個魔板上下左右自由移動,直至排列完成。該游戲可分為數(shù)字玩法和圖像玩法,在單擊圖像玩法或者數(shù)字玩法之后可以進(jìn)行相應(yīng)的玩法選擇,選擇之后單擊開始。如果玩家想重新開始,只需要再次單擊開始按鈕即可。5 測試5.1 測試方案游戲難度級別設(shè)置為初級級別,進(jìn)行測試。用

12、 java 解釋器運行主類:c:mobanjava puzzleframe5.2 測試結(jié)果圖 5-1 測試結(jié)果6 小結(jié)這次我做的課題是“模板游戲”,通過這次的課程設(shè)計,我不僅拓寬了自己的知識面,還在實踐過程中鞏固和加深了自己所學(xué)的理論知識,使自己的技術(shù)素質(zhì)和實踐能力有了進(jìn)一步的提高,同時我的專業(yè)水平也有了很大的進(jìn)步。 同時,在軟件開發(fā)方面也累積了不少經(jīng)驗,對 java 的知識重要性的認(rèn)識更深了。通過設(shè)計過程的鍛煉,自己分析問題和解決問題的能力都得到了鍛煉和提高,完善了自己的知識結(jié)構(gòu),加深了對所學(xué)知識的理解。 這次課程設(shè)計完成后,體會頗多,在學(xué)與做的過程中,取長補(bǔ)短,不斷學(xué)習(xí)新的知識,吸取經(jīng)驗,

13、達(dá)到進(jìn)步的目的。在學(xué)與做的過程中自身的努力以及相關(guān)圖書資料的幫助,對 java 編程的理解也從能夠使用提高到了熟練使用,對程序開發(fā)的一般過程和對數(shù)據(jù)庫知識的運用也有了進(jìn)一步的了解。 通過課程設(shè)計,我學(xué)習(xí)到不少的 java 編程語言的知識,但由于自己的理論知識水平有限,實踐知識和設(shè)計經(jīng)驗不足,在設(shè)計過程中難免存在一些問題,甚至錯誤。這些我會在以后的工作學(xué)習(xí)和實踐中加以改進(jìn)和提高。 通過這次課程設(shè)計使我獲得了很多東西。其一編程的重要步驟是分析。分析問題的本身和現(xiàn)實要求。分析過程中采用畫流程圖的方法能使我的思路特別清晰。拿到一個題目不要僅僅局限在一種思想上,要盡量的多嘗試其他的做法,然后比較,集各家

14、之所長,拿出最優(yōu)秀的程序來。參考文獻(xiàn)參考文獻(xiàn)1耿祥義,張躍平. java2 實用教程(第三版)m . 北京:清華大學(xué)出版社, 2006 2耿祥義. java 課程設(shè)計(第三版)m . 北京:清華大學(xué)出版社, 20043張躍平.java2 實用教程實驗指導(dǎo)與習(xí)題解答(第三版)m. 北京:清華大學(xué)出版社, 2004附附 錄錄附錄附錄 1 源程序清單源程序清單附錄 1 1.1puzzleframe 模塊源程序import java.awt.*;import java.awt.event.*;import javax.swing.*;public class puzzleframe extends j

15、frame implements actionlistener puzzlepad puzzlepad; jbutton 開始; jmenubar bar; jmenu filemenu; jmenuitem 初級,高級; jradiobutton 數(shù)字玩法,圖像玩法; buttongroup group=null; container con=null; public puzzleframe() bar=new jmenubar(); filemenu=new jmenu(魔板游戲); 初級=new jmenuitem(初級); 高級=new jmenuitem(高級); filemenu.

16、add(初級); filemenu.add(高級); bar.add(filemenu); setjmenubar(bar); 初級.addactionlistener(this); 高級.addactionlistener(this); 開始=new jbutton(開始玩); 開始.addactionlistener(this); group=new buttongroup(); 數(shù)字玩法=new jradiobutton(數(shù)字玩法,true); 圖像玩法=new jradiobutton(圖像玩法,false); group.add(數(shù)字玩法); group.add(圖像玩法); puz

17、zlepad=new puzzlepad(3,3,50,50); con=getcontentpane(); con.add(puzzlepad,borderlayout.center); jpanel pnorth=new jpanel(); pnorth.add(數(shù)字玩法); pnorth.add(圖像玩法); pnorth.add(開始); con.add(pnorth,borderlayout.north); con.validate(); addwindowlistener(new windowadapter() public void windowclosing(windoweve

18、nt e) system.exit(0); ); setvisible(true); setbounds(100,50,440,360); validate(); public void actionperformed(actionevent e) if(e.getsource()=開始) if(數(shù)字玩法.isselected() puzzlepad.隨機(jī)排列數(shù)字(); else if(圖像玩法.isselected() puzzlepad.隨機(jī)排列圖像(); else if(e.getsource()=初級) con.remove(puzzlepad); puzzlepad=new puzz

19、lepad(3,3,50,50); con.add(puzzlepad,borderlayout.center); con.validate(); this.validate(); else if(e.getsource()=高級) con.remove(puzzlepad); puzzlepad=new puzzlepad(4,4,50,50); con.add(puzzlepad,borderlayout.center); con.validate(); this.validate(); public static void main(string args) new puzzlefram

20、e(); 附錄 1.2 puzzlepad 模塊源程序import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.*;import java.util.vector;import java.awt.image.*;public class puzzlepad extends jpanel implements actionlistener int rows ,colums; int width,height; squarepoint point; jbutton block;

21、vector vector; int leftx=50,lefty=50; image image=null; toolkit tool=null; mediatracker mt; int 圖像的寬,圖像的高; image blockimage; boolean 畫圖像=true; public puzzlepad(int r,int c,int w,int h) setlayout(null); vector=new vector(); rows=r; colums=c; width=w; height=h; tool=gettoolkit(); try image=tool.create

22、image(氣球.jpg); mt.addimage(image,1); mt.waitforall(); catch(exception e) block=new jbuttonrowscolums; point=new squarepointrowscolums; for(int i=0;irows;i+) for(int j=0;jcolums;j+) if(i=rows-1)&(j=colums-1) else blockij=new jbutton(); blockij.setsize(width,height); blockij.addactionlistener(this

23、); vector.add(blockij); for(int i=0;irows;i+) for(int j=0;jcolums;j+) pointij=new squarepoint(50+j*width,50+i*height); if(i=rows-1)&(j=colums-1) else pointij.setblock(blockij,this); public void actionperformed(actionevent e) jbutton button=(jbutton)e.getsource(); int x=button.getbounds().x; int

24、y=button.getbounds().y; int m=0,n=0; for(int i=0;irows;i+) for(int j=0;jcolums;j+) if(pointij.getx()=x&pointij.gety()=y) m=i; n=j; int 上=math.max(0,m-1); int 下=math.min(rows-1,m+1); int 左=math.max(0,n-1); int 右=math.min(colums-1,n+1); if(point上n.get 有方塊()=false) point上n.setblock(button,this); po

25、intmn.set 有方塊(false); else if(point下n.get 有方塊()=false) point下n.setblock(button,this); pointmn.set 有方塊(false); else if(pointm左.get 有方塊()=false) pointm左.setblock(button,this); pointmn.set 有方塊(false); else if(pointm右.get 有方塊()=false) pointm右.setblock(button,this); pointmn.set 有方塊(false); public void 隨機(jī)

26、排列數(shù)字() vector.removeallelements(); for(int i=0;irows;i+) for(int j=0;j0) int n=(int)(math.random()*vector.size(); jbutton b=(jbutton)vector.elementat(n); b.settext(+i); b.seticon(null); b.setborder(borderfactory.createlineborder(color.blue,1); vector.remove(n); i+; 畫圖像=false; repaint(); public void

27、隨機(jī)排列圖像() try 圖像的寬=image.getwidth(this); 圖像的高=image.getheight(this); int w=圖像的寬/colums; int h=圖像的高/rows; blockimage=new imagerows*colums; int k=0; pixelgrabber pg=null; imageproducer ip=null; for(int i=0;irows;i+) for(int j=0;jcolums;j+) int pixels= new intw*h; pg=new pixelgrabber(image,j*w,i*h,w,h,p

28、ixels,0,w); pg.grabpixels(); ip=new memoryimagesource(w,h,pixels,0,w); blockimagek=tool.createimage(ip); k+; vector.removeallelements(); for(int i=0;irows;i+) for(int j=0;j0) int n=(int)(math.random()*vector.size(); jbutton b=(jbutton)vector.elementat(n); b.seticon(new imageicon(blockimagenum); b.setborder(null); b.settext(); vector.remove(n); num+; 畫圖像=true; repaint(); catch(exception ee) public void paintcomponent(graphics g) super.paintcomponent(g); g.setcolor(color.black); g.fillrect(leftx,lefty,colums*width,rows*height); if(畫圖像=true) g.dr

溫馨提示

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

評論

0/150

提交評論