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

下載本文檔

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

文檔簡介

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

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

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

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

5、、ultraedit3 系統(tǒng)概要設(shè)計(jì)3.1 系統(tǒng)的功能模塊劃分在設(shè)計(jì)魔板游戲時(shí),需要編寫 3 個(gè) java 源文件:puzzleframe.java、puzzlepad.java、squarepoint.java。魔板游戲除了需要編寫的上述 3 個(gè) java 源文件所給出的類外,還需要 java系統(tǒng)提供的一些重要的類,如 jmenuitem、jbutton 和 jradiobutton 等類。魔板游戲的總體功能圖如圖 3-1 所示。主界面開始選擇級(jí)別選擇圖像數(shù)字玩法圖像玩法初級(jí)高級(jí)圖圖 3-13-1 總體功能圖總體功能圖3.1.23.1.2 puzzleframe.java 類模塊puzzle

6、frame 類負(fù)責(zé)創(chuàng)建魔板游戲的主窗口,該類含有 main 方法,程序從該類開始。puzzleframe 類的成員變量中有 4 種重要類型的對(duì)象:puzzlepad、jmenuitem、jradiobutton 和 jbutton。puzzleframe 類的主要成員的作用將在后面的詳細(xì)設(shè)計(jì)中闡述,puzzleframe 類主要成員變量(屬性)和主要方法java 程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告(2010)3如表 3-1、3-2 所示。成員變量描述變量類型名稱魔板開始游戲的按鈕選擇玩法選擇級(jí)別puzzlepadjbuttonjradiobuttonjmenuitempuzzlepad開始數(shù)字玩法,圖像玩法

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

8、變量(屬性)和主要方法如表 3-3、3-4 所示。描述變量類型名稱魔板中的行數(shù)和列數(shù)魔板中方塊的寬和高魔板中二維點(diǎn)數(shù)組魔板中而為方塊數(shù)組模板可能用到的圖像intintsquarepointjbuttonimagerows,columswidth,heightpointblockimage表表 3-33-3 puzzlepad.java a 主要成員變量(屬性)主要成員變量(屬性)名稱功能備注puzzlepad隨機(jī)排列數(shù)字隨機(jī)排列圖像paintcomponentactionperformed創(chuàng)建魔板對(duì)象隨機(jī)排列魔板中方塊上的數(shù)字隨機(jī)排列魔板中方塊上的圖像繪制圖像處理 actionevent 事件

9、構(gòu)造方法接口方法魔板游戲4表表 3-43-4 puzzlepad.java 主要方法主要方法3.1.43.1.4 squarepoint.java 類模塊squarepoint 類負(fù)責(zé)創(chuàng)建確定位置的對(duì)象,使用 point 對(duì)象可以確定 block 對(duì)象在 puzzlepad 對(duì)象中的位置,即確定“方塊”在“魔板”中的位置。squarepoint.java 類主要成員變量(屬性)和主要方法如表 3-5、3-6 所示。描述變量類型名稱判斷點(diǎn)上是否有方塊點(diǎn)上的方塊對(duì)象booleanjbutton有方塊block表表 3-53-5 squarepoint.java 主要成員變量(屬性)主要成員變量(屬

10、性)名稱功能備注squarepointget 有方塊set 有方塊setblockgetblock創(chuàng)建“點(diǎn)”對(duì)象判斷點(diǎn)上是否有方塊設(shè)置點(diǎn)上是否有方塊在點(diǎn)上放置方塊獲取點(diǎn)上的方塊構(gòu)造方法表表 3-63-6 squarepoint.java 主要方法主要方法3.2 系統(tǒng)流程圖根據(jù)對(duì)模板游戲的功能分析,設(shè)計(jì)得到魔板游戲總流程,如圖 2-2 所示:java 程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告(2010)5開始魔板游戲開始界面switch改變游戲難度選初級(jí)初級(jí)高級(jí)重新放置方塊改變游戲玩法選擇數(shù)字玩法數(shù)字玩法圖像玩法確定玩法退出結(jié)束是否是否圖圖 2-22-2 系統(tǒng)流程圖系統(tǒng)流程圖魔板游戲64 系統(tǒng)詳細(xì)設(shè)計(jì)4.1 運(yùn)行效

11、果1、將三個(gè) java 文件和圖像文件保存到一個(gè)文件夾中,例如 c:moban。將三個(gè) java 文件分別編譯生成相應(yīng)的字節(jié)碼文件(class) 。然后,用 java 解釋器運(yùn)行主類:c:mobanjava puzzleframe 效果如圖 4-1、4-2 所示。圖 4-1 數(shù)字玩法主界面圖 4-2 圖像玩法主界面java 程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告(2010)7本程序?qū)崿F(xiàn)的游戲分為初級(jí)和高級(jí)模式,可以在單機(jī)選擇級(jí)別之后進(jìn)行選擇級(jí)別模式。初級(jí)的話共分為 9 格魔板,一個(gè)為空,8 個(gè)魔板上下左右自由移動(dòng),直至排列完成;高級(jí)的話分為 16 格魔板,一個(gè)為空,15 個(gè)魔板上下左右自由移動(dòng),直至排列完成。該

12、游戲可分為數(shù)字玩法和圖像玩法,在單擊圖像玩法或者數(shù)字玩法之后可以進(jìn)行相應(yīng)的玩法選擇,選擇之后單擊開始。如果玩家想重新開始,只需要再次單擊開始按鈕即可。5 測試5.1 測試方案游戲難度級(jí)別設(shè)置為初級(jí)級(jí)別,進(jìn)行測試。用 java 解釋器運(yùn)行主類:c:mobanjava puzzleframe5.2 測試結(jié)果圖 5-1 測試結(jié)果魔板游戲86 小結(jié)這次我做的課題是“模板游戲”,通過這次的課程設(shè)計(jì),我不僅拓寬了自己的知識(shí)面,還在實(shí)踐過程中鞏固和加深了自己所學(xué)的理論知識(shí),使自己的技術(shù)素質(zhì)和實(shí)踐能力有了進(jìn)一步的提高,同時(shí)我的專業(yè)水平也有了很大的進(jìn)步。 同時(shí),在軟件開發(fā)方面也累積了不少經(jīng)驗(yàn),對(duì) java 的知

13、識(shí)重要性的認(rèn)識(shí)更深了。通過設(shè)計(jì)過程的鍛煉,自己分析問題和解決問題的能力都得到了鍛煉和提高,完善了自己的知識(shí)結(jié)構(gòu),加深了對(duì)所學(xué)知識(shí)的理解。 這次課程設(shè)計(jì)完成后,體會(huì)頗多,在學(xué)與做的過程中,取長補(bǔ)短,不斷學(xué)習(xí)新的知識(shí),吸取經(jīng)驗(yàn),達(dá)到進(jìn)步的目的。在學(xué)與做的過程中自身的努力以及相關(guān)圖書資料的幫助,對(duì) java 編程的理解也從能夠使用提高到了熟練使用,對(duì)程序開發(fā)的一般過程和對(duì)數(shù)據(jù)庫知識(shí)的運(yùn)用也有了進(jìn)一步的了解。 通過課程設(shè)計(jì),我學(xué)習(xí)到不少的 java 編程語言的知識(shí),但由于自己的理論知識(shí)水平有限,實(shí)踐知識(shí)和設(shè)計(jì)經(jīng)驗(yàn)不足,在設(shè)計(jì)過程中難免存在一些問題,甚至錯(cuò)誤。這些我會(huì)在以后的工作學(xué)習(xí)和實(shí)踐中加以改進(jìn)和提

14、高。 通過這次課程設(shè)計(jì)使我獲得了很多東西。其一編程的重要步驟是分析。分析問題的本身和現(xiàn)實(shí)要求。分析過程中采用畫流程圖的方法能使我的思路特別清晰。拿到一個(gè)題目不要僅僅局限在一種思想上,要盡量的多嘗試其他的做法,然后比較,集各家之所長,拿出最優(yōu)秀的程序來。java 程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告(2010)9參考文獻(xiàn)參考文獻(xiàn)1耿祥義,張躍平. java2 實(shí)用教程(第三版)m . 北京:清華大學(xué)出版社, 2006 2耿祥義. java 課程設(shè)計(jì)(第三版)m . 北京:清華大學(xué)出版社, 20043張躍平.java2 實(shí)用教程實(shí)驗(yàn)指導(dǎo)與習(xí)題解答(第三版)m. 北京:清華大學(xué)出版社, 2004魔板游戲10附附 錄

15、錄附錄附錄 1 源程序清單源程序清單附錄 1 1.1puzzleframe 模塊源程序import java.awt.*;import java.awt.event.*;import javax.swing.*;public class puzzleframe extends jframe implements actionlistener puzzlepad puzzlepad; jbutton 開始; jmenubar bar; jmenu filemenu; jmenuitem 初級(jí),高級(jí); jradiobutton 數(shù)字玩法,圖像玩法; buttongroup group=null;

16、container con=null; public puzzleframe() bar=new jmenubar(); filemenu=new jmenu(魔板游戲); 初級(jí)=new jmenuitem(初級(jí)); 高級(jí)=new jmenuitem(高級(jí)); filemenu.add(初級(jí)); filemenu.add(高級(jí)); bar.add(filemenu); setjmenubar(bar); 初級(jí).addactionlistener(this); 高級(jí).addactionlistener(this); 開始=new jbutton(開始玩); 開始.addactionlistene

17、r(this); group=new buttongroup();java 程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告(2010)11 數(shù)字玩法=new jradiobutton(數(shù)字玩法,true); 圖像玩法=new jradiobutton(圖像玩法,false); group.add(數(shù)字玩法); group.add(圖像玩法); puzzlepad=new puzzlepad(3,3,50,50); con=getcontentpane(); con.add(puzzlepad,borderlayout.center); jpanel pnorth=new jpanel(); pnorth.add(數(shù)字玩

18、法); pnorth.add(圖像玩法); pnorth.add(開始); con.add(pnorth,borderlayout.north); con.validate(); addwindowlistener(new windowadapter() public void windowclosing(windowevent e) system.exit(0); ); setvisible(true); setbounds(100,50,440,360); validate(); public void actionperformed(actionevent e) if(e.getsour

19、ce()=開始) if(數(shù)字玩法.isselected() puzzlepad.隨機(jī)排列數(shù)字(); else if(圖像玩法.isselected() puzzlepad.隨機(jī)排列圖像();魔板游戲12 else if(e.getsource()=初級(jí)) con.remove(puzzlepad); puzzlepad=new puzzlepad(3,3,50,50); con.add(puzzlepad,borderlayout.center); con.validate(); this.validate(); else if(e.getsource()=高級(jí)) con.remove(puz

20、zlepad); puzzlepad=new puzzlepad(4,4,50,50); con.add(puzzlepad,borderlayout.center); con.validate(); this.validate(); public static void main(string args) new puzzleframe(); 附錄 1.2 puzzlepad 模塊源程序import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.*;import java.u

21、til.vector;import java.awt.image.*;public class puzzlepad extends jpanel implements actionlistener int rows ,colums; java 程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告(2010)13 int width,height; squarepoint point; jbutton block; vector vector; int leftx=50,lefty=50; image image=null; toolkit tool=null; mediatracker mt; int 圖像的寬,圖像的高;

22、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.createimage(氣球.jpg); mt.addimage(image,1); mt.waitforall(); catch(exception e) block=new jbuttonrowscolums; point

23、=new squarepointrowscolums; for(int i=0;irows;i+) 魔板游戲14 for(int j=0;jcolums;j+) if(i=rows-1)&(j=colums-1) else blockij=new jbutton(); blockij.setsize(width,height); blockij.addactionlistener(this); vector.add(blockij); for(int i=0;irows;i+) for(int j=0;jcolums;j+) pointij=new squarepoint(50+j*width

24、,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;java 程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告(2010)15 int y=button.getbounds().y; int m=0,n=0; for(int i=0;irows;i+) for(int j=0;jcolums;j+) if

25、(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); pointmn.set 有方塊(false); else if(point下n.get 有方塊()=false) point下n.setblock(button,this); poi

26、ntmn.set 有方塊(false); else if(pointm左.get 有方塊()=false) pointm左.setblock(button,this); pointmn.set 有方塊(false);魔板游戲16 else if(pointm右.get 有方塊()=false) pointm右.setblock(button,this); pointmn.set 有方塊(false); public void 隨機(jī)排列數(shù)字() vector.removeallelements(); for(int i=0;irows;i+) for(int j=0;j0) int n=(int

27、)(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+; java 程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告(2010)17 畫圖像=false; repaint(); public void 隨機(jī)排列圖像() try 圖像的寬=image.getwidth(this); 圖像的高=image.getheigh

28、t(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,pixels,0,w); pg.grabpixels(); ip=new memoryimagesource(w,h,p

29、ixels,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.draw

溫馨提示

  • 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)論