版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、目錄1設(shè)計(jì)目的22總體設(shè)計(jì)23 關(guān)鍵技術(shù)33.1 系統(tǒng)的功能模塊劃分33.1.1 PUZZLEFRAME.JAVA類模塊33.1.2 PUZZLEPAD.JAVA類模塊43.1.3 SQUAREPOINT.JAVA類模塊44程序流程55主要源代碼75.1PUZZLEFRAME模塊源程序75.2 PUZZLEPAD模塊源程序105.3 SQUAREPOINT類模塊源程序176 運(yùn)行結(jié)果及結(jié)論196.1 測(cè)試方案196.2 運(yùn)行結(jié)果196. 3小結(jié)207.參考文獻(xiàn)211設(shè)計(jì)目的 本次課程設(shè)計(jì)是通過(guò)Java語(yǔ)言編制一個(gè)魔板游戲,它是一款經(jīng)典的智力游戲。而Java語(yǔ)言是當(dāng)今較為流行的網(wǎng)絡(luò)編程語(yǔ)言,它具
2、有面向?qū)ο?、跨平臺(tái)、分布應(yīng)用等特點(diǎn)。這次課程設(shè)計(jì),還有利于加深對(duì)Java課程的進(jìn)一步了解,也可以鞏固所學(xué)Java語(yǔ)言基本知識(shí),增進(jìn)Java語(yǔ)言編輯基本功,掌握J(rèn)DK、Editplus、Eclipse、JCreator等開發(fā)工具的運(yùn)用,拓寬常用類庫(kù)的應(yīng)用。使學(xué)生通過(guò)該教學(xué)環(huán)節(jié)與手段,把所學(xué)課程及相關(guān)知識(shí)加以融會(huì)貫通,全面掌握J(rèn)ava語(yǔ)言的編程思想及面向?qū)ο蟪绦蛟O(shè)計(jì)的方法。利用所學(xué)高級(jí)語(yǔ)言的語(yǔ)法特性,結(jié)合數(shù)據(jù)結(jié)構(gòu)算法、網(wǎng)絡(luò)知識(shí)、文件處理和數(shù)據(jù)庫(kù)等知識(shí)完成綜合題目的設(shè)計(jì)和代碼實(shí)現(xiàn),并培養(yǎng)鍛煉分析程序、撰寫報(bào)告等能力。2總體設(shè)計(jì)在設(shè)計(jì)魔板游戲時(shí),要編寫7個(gè)Java源文件:PuzzleGame.java
3、、PuzzlePad.java、Point.java、Block.java、HandleImage.java、VerifySuccess.java和HandleMove.java。魔板游戲除了需要編寫的上述7個(gè)Java源文件所給出的類外,還需要Java系統(tǒng)提供的一些重要的類,如JMenuItem、JButton和JRadioButton等類。魔板游戲所用到的一些重要的類以及之間的組合關(guān)系如圖1所示。PuzzleGameJMenuPuzzlePadJRadioButtonJButtonPointBlockHandleMoveImageHandleImageVerifySuccess圖2-1程序模
4、塊3 關(guān)鍵技術(shù)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.1 PuzzleFrame.java類模塊PuzzleFrame類負(fù)責(zé)創(chuàng)建魔板游戲的主窗口,該類含有main方法,程序從該類開始。PuzzleFrame類的成員變量中有4種重要類型的對(duì)象:PuzzlePad、JmenuItem、JRadioBu
5、tton和JButton。PuzzleFrame類的主要成員的作用將在后面的詳細(xì)設(shè)計(jì)中闡述,PuzzleFrame類主要成員變量(屬性)和主要方法如表3-1、3-2所示。成員變量描述變量類型名稱魔板開始游戲的按鈕選擇玩法PuzzlePadJbuttonJradioButtonPuzzlePad開始數(shù)字玩法,圖像玩法表3-1 PuzzleFrame.java主要成員變量(屬性)名稱功能備注PuzzleFrameactionPerformedmain創(chuàng)建程序主窗口處理ActionEvent事件程序開始運(yùn)行的方法構(gòu)造方法接口方法表3-2 PuzzleFrame.java主要方法3.1.2 Puzzl
6、ePad.java類模塊PuzzlePad類創(chuàng)建的對(duì)象是PuzzleFrame類最重要的成員之一,代表“魔板”。該類的成員變量中有5種重要類型的對(duì)象:Point、Block和Image。PuzzlePad類類主要成員變量(屬性)和主要方法如表3-3、3-4所示。描述變量類型名稱魔板中的行數(shù)和列數(shù)魔板中方塊的寬和高魔板中二維點(diǎn)數(shù)組魔板中而為方塊數(shù)組模板可能用到的圖像intintSquarePointJButtonImagerows,columswidth,heightpointblockimage表3-3 PuzzlePad.java主要成員變量(屬性)名稱功能備注PuzzlePad隨機(jī)排列數(shù)字
7、隨機(jī)排列圖像paintComponentactionPerformed創(chuàng)建魔板對(duì)象隨機(jī)排列魔板中方塊上的數(shù)字隨機(jī)排列魔板中方塊上的圖像繪制圖像處理ActionEvent事件構(gòu)造方法接口方法表3-4 PuzzlePad.java主要方法3.1.3 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ì)象booleanJButt
8、on有方塊block表3-5 SquarePoint.java主要成員變量(屬性)名稱功能備注SquarePointget有方塊set有方塊setBlockgetBlock創(chuàng)建“點(diǎn)”對(duì)象判斷點(diǎn)上是否有方塊設(shè)置點(diǎn)上是否有方塊在點(diǎn)上放置方塊獲取點(diǎn)上的方塊構(gòu)造方法表3-6 SquarePoint.java主要方法4程序流程根據(jù)對(duì)模板游戲的功能分析,設(shè)計(jì)得到魔板游戲總流程,如圖4-1所示:圖4-1 系統(tǒng)流程圖流程解釋:程序分為兩種玩法,數(shù)字玩法和圖片玩法,又分為初級(jí)和高級(jí)兩種模式,進(jìn)入游戲選擇游戲難度,后選擇玩法,數(shù)字或圖片玩法,系統(tǒng)將各切片順序打亂,移動(dòng)切片,判斷順序是否正確,正確游戲結(jié)束,不正確繼
9、續(xù)移動(dòng),程序結(jié)束。5主要源代碼5.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; Container
10、 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(開始玩); 開始.addActionListener(this);
11、group=new ButtonGroup(); 數(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ù)字玩法); pNorth.add(圖像玩法); pNorth.add
12、(開始); 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.getSource()=開始) if(數(shù)字玩法.isSelected() pu
13、zzlePad.隨機(jī)排列數(shù)字(); else if(圖像玩法.isSelected() puzzlePad.隨機(jī)排列圖像(); 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(puzzlePad); puzzlePad=new PuzzlePad(4,4,5
14、0,50); con.add(puzzlePad,BorderLayout.CENTER); con.validate(); this.validate(); public static void main(String args) new PuzzleFrame(); 5.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
15、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 mt; int 圖像的寬,圖像的高; Image blockImage; boolean 畫圖像=true; public PuzzlePad(int r,int c,i
16、nt w,int h) setLayout(null); vector=new Vector(); rows=r; colums=c; width=w; height=h; tool=getToolkit(); try image=tool.createImage(dog.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;jco
17、lums;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,50+i*height); if(i=rows-1)&(j=colums-1) else pointij.setBlock(blockij,t
18、his); 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;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)
19、; 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); pointmn.set有方塊(false); else if(pointm左.get有方塊()=false) pointm左.setBlock(button,this); pointmn.set有方塊(
20、false); 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)(Math.random()*vector.size(); JButton b=(JButton)vector.elementAt(n); b.setText(+i); b.setIcon(null); b.setB
21、order(BorderFactory.createLineBorder(Color.blue,1); vector.remove(n); i+; 畫圖像=false; repaint(); 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; f
22、or(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,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.
23、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
24、(leftX,leftY,colums*width,rows*height); if(畫圖像=true) g.drawImage(image,colums*width+80,height,colums*width,rows*height,this); for(int i=0;irows;i+) g.setColor(Color.white); g.drawLine(colums*width+80,height+i*height, colums*width+80+colums*width,height+i*height); for(int j=0;jcolums;j+) g.drawLine(c
25、olums*width+80+j*width,height, colums*width+80+j*width,height+rows*height); g.setColor(Color.black); g.fillRect(colums*width+80+(colums-1)*width, height+(rows-1)*height, width, height); 5.3 SquarePoint類模塊源程序import java.awt.*;import javax.swing.JButton;public class SquarePoint int x,y; boolean 有方塊; J
26、Button block=null; Container con=null; public SquarePoint(int x,int y) this.x=x; this.y=y; public boolean get有方塊() return 有方塊; public void set有方塊(boolean boo) 有方塊=boo; public int getX() return x; public int getY() return y; public void setBlock(JButton block,Container con) this.con=con; this.block=b
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 新型水泥施工方案(3篇)
- 公關(guān)高端活動(dòng)策劃方案(3篇)
- 踝關(guān)節(jié)損傷康復(fù)訓(xùn)練方案
- 幼兒教師年度個(gè)人工作總結(jié)范例
- 油漆施工方案流程(3篇)
- 庫(kù)房弱電施工方案(3篇)
- 《國(guó)家物資應(yīng)急預(yù)案》(3篇)
- 2026年零售業(yè)智慧創(chuàng)新應(yīng)用報(bào)告
- 珠寶平臺(tái)活動(dòng)策劃方案(3篇)
- 電動(dòng)閘閥施工方案(3篇)
- 2025年白山輔警招聘考試題庫(kù)及答案1套
- 特種設(shè)備外借協(xié)議書
- 三元股份財(cái)務(wù)風(fēng)險(xiǎn)控制研究
- 2025年廣東高校畢業(yè)生三支一扶考試真題
- DBJ-T 13-417-2023 工程泥漿技術(shù)標(biāo)準(zhǔn)
- 湖南省長(zhǎng)沙市雅禮教育集團(tuán)2024-2025學(xué)年七年級(jí)(下)期末數(shù)學(xué)試卷
- 鋁業(yè)廠房建設(shè)項(xiàng)目施工組織方案
- DB63-T 2256.3-2025 水利信息化工程施工質(zhì)量評(píng)定規(guī)范 第3部分 水情監(jiān)測(cè)系統(tǒng)
- 患者身份識(shí)別錯(cuò)誤應(yīng)急預(yù)案與處理流程
- 25年軍考數(shù)學(xué)試卷及答案
- 化工儲(chǔ)存設(shè)備知識(shí)培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論