![JAVA魔板游戲_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/15/f3cf0f46-c4e2-4d97-ad83-248485e91d1d/f3cf0f46-c4e2-4d97-ad83-248485e91d1d1.gif)
![JAVA魔板游戲_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/15/f3cf0f46-c4e2-4d97-ad83-248485e91d1d/f3cf0f46-c4e2-4d97-ad83-248485e91d1d2.gif)
![JAVA魔板游戲_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/15/f3cf0f46-c4e2-4d97-ad83-248485e91d1d/f3cf0f46-c4e2-4d97-ad83-248485e91d1d3.gif)
![JAVA魔板游戲_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/15/f3cf0f46-c4e2-4d97-ad83-248485e91d1d/f3cf0f46-c4e2-4d97-ad83-248485e91d1d4.gif)
![JAVA魔板游戲_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/15/f3cf0f46-c4e2-4d97-ad83-248485e91d1d/f3cf0f46-c4e2-4d97-ad83-248485e91d1d5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、量城工甯院Java程序設(shè)計課程設(shè)計報告XXX魔板游戲?qū)I(yè)XXX學(xué)生姓名XXX班級XXX學(xué)號XXX指導(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è)計 75測試 85.1 測試方案 85.2 測試結(jié)果 86小結(jié) 9參考文獻(xiàn) 10附 錄 11附錄1源程序清單 11附錄1 1.1PUZZLEFRAM模塊源程序 11附錄1.2 PUZZLEPALB塊源程序 13附錄1.3 SQUAREPOINT模
2、塊源程序 20模板游戲的設(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的魔板,在前15格子里隨即放置15編號1-15的方 塊,最后一個格子是未放置方塊的空格子。(2)用鼠標(biāo)單擊任何與空格子水平或垂直相鄰的方塊可以把該方塊移入空格 子,而當(dāng)前方塊移動之前所在的格子
3、成為空格子。通過不斷地移動方塊可以將方塊 一行一行地按數(shù)字順序排好,例如,對于 3*3格子組成的魔板,要求方塊最后排列 的順序如圖6.1所示。(3)魔板游戲也可以使用圖像來代替數(shù)字。例如,對于 4*4的魔板,將一幅 圖像分成4*4幅小圖像,除去最后一幅小圖像(圖像的右下角),將其余各幅小圖 像打亂順序后放在魔板方塊上,最終目標(biāo)是通過移動方塊恢復(fù)原始圖像(不包括圖 像的右下角)。(4)魔板游戲分為兩個級別,用戶可以通過界面上提供的菜單來選擇“初級” 或“高級”兩個級別。對于“初級”級別,魔板由3*3個格子組成;對于“高級”級別,魔板由4*4個格子組成2系統(tǒng)需求分析2.1 系統(tǒng)目標(biāo)設(shè)計GUI界面的
4、魔板游戲程序。2.2 主體功能這個程序定義了一些組件,工具欄按鈕,文本區(qū)和菜單。魔板游戲程序設(shè)計通過 PuzzleFrame.java PuzzlePad.java SquarePoint.java3 個類來實現(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)的功能模塊劃分在設(shè)計魔板游戲時,需要編寫3個java源文件:PuzzleFrame.java PuzzlePad.java SquarePoint.java魔板游戲除了需要編寫的上述 3個Java源文件所給出的類外,
5、還需要Java系 統(tǒng)提供的一些重要的類,如 JMenuItem、JButton和JRadioButton等類。魔板游戲的 總體功能圖如圖3-1所示。主界面選擇級別選擇圖像圖像玩法圖3-1總體功能圖3.1.2 PuzzleFrame.java 類模塊PuzzleFrame類負(fù)責(zé)創(chuàng)建魔板游戲的主窗口,該類含有main方法,程序從該類開始。PuzzleFrame類的成員變量中有 4種重要類型的對象:PuzzlePad JmenuItemJRadioButton和JButton。PuzzleFrame類的主要成員的作用將在后面的詳細(xì)設(shè)計中闡述,PuzzleFrame類主要成員變量(屬性)和主要方法如表
6、3-1、3-2所示成員變量描述變量類型名稱開始游戲的按鈕選擇玩法選擇級別PuzzlePadJbuttonJradioButtonJmenuItemPuzzlePad開始數(shù)字玩法,圖像玩法初級,高級表3-1PuzzleFrame.java主要成員變量(屬性)名稱功能備注PuzzleFrame actionPerformed main創(chuàng)建程序主窗口處理ActionEvent事件程序開始運(yùn)行的方法構(gòu)造方法接口方法表 3-2 PuzzleFrame.java 主要方法3.1.3 PuzzlePad.java 類模塊PuzzlePad類創(chuàng)建的對象是PuzzleFrame類最重要的成員之一,代表“魔板”。
7、該類的成員變量中有5種重要類型的對象:Point、Block和Image。PuzzlePad類類 主要成員變量(屬性)和主要方法如表 3-3、3-4所示。描述變量類型名稱魔板中的行數(shù)和列數(shù)introws,colums魔板中方塊的寬和高intwidth,height魔板中二維點數(shù)組SquarePoint口point魔板中而為方塊數(shù)組JButtonblock模板可能用到的圖像Imageimage表3-3PuzzlePad.java主要成貝變重(屬性)名稱功能備注PuzzlePad創(chuàng)建魔板對象構(gòu)造方法隨機(jī)排列數(shù)字隨機(jī)排列魔板中方塊上的數(shù)字隨機(jī)排列圖像隨機(jī)排列魔板中方塊上的圖像paintCompone
8、nt繪制圖像actionPerformed處理ActionEvent事件接口方法表 3-4 PuzzlePad.java主要方法3.1.4 SquarePoint.java 類模塊SquarePoint類負(fù)責(zé)創(chuàng)建確定位置的對象,使用 Point對象可以確定Block對象 在PuzzlePad對象中的位置,即確定“方塊”在“魔板”中的位置。 SquarePoint.java 類主要成員變量(屬性)和主要方法如表 3-5、3-6所示。描述變量類型名稱判斷點上是否有方塊boolean有方塊點上的方塊對象JButtonblock表3-5SquarePoint.java主要成員變量(屬性)名稱功能備注S
9、quarePoint創(chuàng)建“點”對象構(gòu)造方法get后力塊判斷點上是否有方塊set后力塊設(shè)置點上是否有方塊setBlock在點上放置方塊getBlock表 3-6 SquarePoint.java主要方法3.2 系統(tǒng)流程圖根據(jù)對模板游戲的功能分析,設(shè)計得到魔板游戲總流程,如圖 2-2所示:開始圖2-2系統(tǒng)流程圖4系統(tǒng)詳細(xì)設(shè)計4.1運(yùn)行效果1、將三個java文件和圖像文件保存到一個文件夾中,例如 C:moban。將三個 java文件分別編譯生成相應(yīng)的字節(jié)碼文件(class)。然后,用java解釋器運(yùn)行主類: C:mobanjava PuzzleFrame 效果如圖 4-1、4-2 所示。圖4-1數(shù)字
10、玩法主界面圖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)行測試。用 java解釋器運(yùn)行主類:C:mobanjava PuzzleFrame5.2 測試結(jié)果圖5-1測試結(jié)果6小結(jié)這次我做
11、的課題是“模板游戲”,通過這次的課程設(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)驗,達(dá)到進(jìn)步的目的。在學(xué)與做的過程中自身的努力以及相關(guān)圖書 資料的幫助,對java編程的理解也從能夠使用提高到了熟練使用,對程
12、序開發(fā)的 一般過程和對數(shù)據(jù)庫知識的運(yùn)用也有了進(jìn)一步的了解。通過課程設(shè)計,我學(xué)習(xí)到不少的 JAVA編程語言的知識,但由于自己的理論知 識水平有限,實踐知識和設(shè)計經(jīng)驗不足,在設(shè)計過程中難免存在一些問題,甚至錯 誤。這些我會在以后的工作學(xué)習(xí)和實踐中加以改進(jìn)和提高。通過這次課程設(shè)計使我獲得了很多東西。其一編程的重要步驟是分析。分析 問題的本身和現(xiàn)實要求。分析過程中采用畫流程圖的方法能使我的思路特別清晰。 拿到一個題目不要僅僅局限在一種思想上, 要盡量的多嘗試其他的做法,然后比較, 集各家之所長,拿出最優(yōu)秀的程序來。參考文獻(xiàn)1耿祥義,張躍平.Java2實用教程(第三版)M.北京:清華大學(xué)出版社,2006
13、2耿祥義.Java課程設(shè)計(第三版)M.北京:清華大學(xué)出版社,20043張躍平.Java2實用教程實驗指導(dǎo)與習(xí)題解答(第三版)M.北京:清華大學(xué)出 版社,2004附錄1源程序清單附錄1 I.IPuzzleFrame模塊源程序import java.awt.*;import java.awt.event.*;import javax.swing.*;public class PuzzleFrame extends JFrame implements ActionListener PuzzlePad puzzlePad;JButton 開始;JMenuBar bar;JMenu fileMenu;
14、JMenuItem初級,高級;JRadioButton數(shù)字玩法,圖像玩法;ButtonGroup group=null;Container con=null;public PuzzleFrame()bar=new JMenuBar();fileMenu=new JMenu("魔板游戲");初級=new JMenuItem("初級");高級=new JMenuItem("高級");fileMenu.add(初級);fileMenu.add(高級);bar.add(fileMenu);setJMenuBar(bar);初級.addActi
15、onListener(this);高級.addActionListener(this);開始=new JButton("開始玩");開始.addActionListener(this);group=new ButtonGroup();數(shù)字玩法=new JRadioButton("數(shù)字玩法",true);圖像玩法=new JRadioButton("圖像玩法",false);group.add頷字玩法);group.add(ffl像玩法);puzzlePad=new PuzzlePad(3,3,50,50);con=getContent
16、Pane();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(WindowEvent e)System.exit(0););setVisible(true);setBounds(100,50
17、,440,360);validate。;public void actionPerformed(ActionEvent e) if(e.getSource()=開始)if(數(shù)字玩法.isSelected()puzzlePad隨機(jī)排列數(shù)字();else if(圖像玩法.isSelected()puzzlePad隨機(jī)排歹!J圖像();else if(e.getSource()=0 級)con.remove(puzzlePad);puzzlePad=new PuzzlePad(3,3,50,50);con.add(puzzlePad,BorderLayout.CENTER);con.validate
18、();this.validate();else if(e.getSource()=S 級)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 PuzzleFrame();附錄1.2 PuzzlePad模塊源程序import java.awt.*;import java.awt.event.*;import java
19、x.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;Vector vector;int leftX=50,leftY=50;Image image=null;Toolkit tool=null;MediaTracker
20、 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();tryimage=tool.createImage('氣球.jpg");mt.addImage(image,1);mt.waitForAll();catch(Exception e)block=new JButtonrow
21、scolums;point=new SquarePointrowscolums;for(int i=0;i<rows;i+)for(int j=0;j<colums;j+)if(i=rows-1)&&(j=colums-1)elseblockij=new JButton();blockij.setSize(width,height);blockij.addActionListener(this);vector.add(blockij);for(int i=0;i<rows;i+)for(int j=0;j<colums;j+)pointij=new Sq
22、uarePoint(50+j*width,50+i*height);if(i=rows-1)&&(j=colums-1)elsepointij.setBlock(blockij,this);public void actionPerformed(ActionEvent e)JButton button=(JButton)e.getSource();int x=button.getBounds().x;int y=button.getBounds().y;int m=0,n=0;for(int i=0;i<rows;i+)for(int j=0;j<colums;j+
23、)if(pointij.getX()=x&&pointij.getY()=y)m=i;n=j;int ±=Math.max(0,m-1);int 下=MNh.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)
24、;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ī)排列數(shù)字()vector.removeAllElements();for(int i=0;i<rows;i+)for(int j=0;j<colums;j+)if(i=row
25、s-1)&&(j=colums-1)elsevector.add(blockij);int i=1;while(vector.size()>0)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()
26、;public void隨機(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;i<rows;i+)for(int j=0;j<colums;j+)int pixels二 new intw*h;pg=new PixelGrabber(image,j*w,i
27、*h,w,h,pixels,0,w);pg.grabPixels();ip=new MemoryImageSource(w,h,pixels,0,w);blockImagek=tool.createImage(ip);k+;vector.removeAllElements();for(int i=0;i<rows;i+)for(int j=0;j<colums;j+)if(i=rows-1)&&(j=colums-1)elsevector.add(blockij);int num=0;while(vector.size()>0)int n=(int)(Math
28、.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(畫圖像二工
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030全球開放式框架工業(yè)顯示器行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國平盤電滑環(huán)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球TGV基板行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國完全生物基聚酰胺行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 幼兒繪本講述與演繹幼兒繪本講述的停連運(yùn)用技巧講解
- 2025景區(qū)商場蛇年新春嘉年華活動策劃方案
- 2025綠洲集團(tuán)工程合同管理規(guī)范
- 沙石采購合同范本工程合同
- 2025【合同范本】打印機(jī)耗材長期供貨合同
- 防雷技術(shù)服務(wù)合同
- 中儲糧蘭州公司考試筆試題庫
- 焊接機(jī)器人在汽車制造中應(yīng)用案例分析報告
- 重建成長型思維課件
- 電捕焦油器火災(zāi)爆炸事故分析
- 質(zhì)量問題分析及措施報告
- 汽修廠安全風(fēng)險分級管控清單
- 現(xiàn)代通信原理與技術(shù)(第五版)PPT全套完整教學(xué)課件
- 病例展示(皮膚科)
- DB31T 685-2019 養(yǎng)老機(jī)構(gòu)設(shè)施與服務(wù)要求
- 燕子山風(fēng)電場項目安全預(yù)評價報告
- 高一英語課本必修1各單元重點短語
評論
0/150
提交評論