版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 《面向?qū)ο蟪绦蛟O(shè)計》</p><p><b> 課程設(shè)計報告</b></p><p><b> 目 錄</b></p><p> 1設(shè)計目的及內(nèi)容1</p><p> 1.1課程設(shè)計目的1</p><p> 1.2 課程設(shè)計內(nèi)容1&
2、lt;/p><p><b> 2系統(tǒng)需求分析1</b></p><p> 2.1 系統(tǒng)目標(biāo)1</p><p> 2.2 主體功能1</p><p> 2.3 開發(fā)環(huán)境1</p><p><b> 3概要設(shè)計2</b></p><p>
3、 3.1 系統(tǒng)的功能模塊劃分2</p><p> 3.1.1 PuzzleFrame.java類模塊2</p><p> 3.1.2 PuzzlePad.java類模塊2</p><p> 3.1.3 SquarePoint.java類模塊3</p><p> 3.2 系統(tǒng)流程圖3</p><p>
4、 4設(shè)計過程與分析5</p><p> 5設(shè)計結(jié)果與測試6</p><p><b> 參考文獻(xiàn):13</b></p><p><b> 1設(shè)計目的及內(nèi)容</b></p><p><b> 1.1課程設(shè)計目的</b></p><p> 利用
5、所學(xué)高級語言的語法特性,結(jié)合數(shù)據(jù)結(jié)構(gòu)算法、網(wǎng)絡(luò)知識、文件處理和數(shù)據(jù)庫等知識完成綜合題目的設(shè)計和代碼實現(xiàn),并培養(yǎng)鍛煉分析程序、撰寫報告等能力。</p><p> 1.2 課程設(shè)計內(nèi)容</p><p> ?。?)設(shè)計一款經(jīng)典的智力游戲,魔板游戲。魔板由3*3或4*4個格子組成。對于3*3魔板,在前8個格子里隨即放置8個編號1-8的方塊,最后一個格子是未放置方塊的空格子;對于4*4的魔板,在前
6、15格子里隨即放置15編號1-15的方塊,最后一個格子是未放置方塊的空格子。</p><p> (2)用鼠標(biāo)單擊任何與空格子水平或垂直相鄰的方塊可以把該方塊移入空格子,而當(dāng)前方塊移動之前所在的格子成為空格子。通過不斷地移動方塊可以將方塊一行一行地按數(shù)字順序排好,例如,對于3*3格子組成的魔板,要求方塊最后排列的順序如圖6.1所示。</p><p> ?。?)魔板游戲也可以使用圖像來代替數(shù)
7、字。例如,對于4*4的魔板,將一幅圖像分成4*4幅小圖像,除去最后一幅小圖像(圖像的右下角),將其余各幅小圖像打亂順序后放在魔板方塊上,最終目標(biāo)是通過移動方塊恢復(fù)原始圖像(不包括圖像的右下角)。</p><p><b> 2系統(tǒng)需求分析</b></p><p><b> 2.1 系統(tǒng)目標(biāo)</b></p><p> 設(shè)
8、計GUI界面的魔板游戲程序。</p><p><b> 2.2 主體功能</b></p><p> 這個程序定義了一些組件,工具欄按鈕,文本區(qū)和菜單。魔板游戲程序設(shè)計通過PuzzleFrame.java、PuzzlePad.java、SquarePoint.java 3個類來實現(xiàn)魔板游戲的整體功能。</p><p><b> 2
9、.3 開發(fā)環(huán)境</b></p><p> 操作系統(tǒng):Microsoft Windows 7</p><p> 開發(fā)工具:jdk1.6.0_22 、MyEclipse8.5</p><p><b> 3概要設(shè)計</b></p><p> 3.1 系統(tǒng)的功能模塊劃分</p><p>
10、; 在設(shè)計魔板游戲時,需要編寫3個java源文件:PuzzleFrame.java、PuzzlePad.java、SquarePoint.java。</p><p> 魔板游戲除了需要編寫的上述3個Java源文件所給出的類外,還需要Java系統(tǒng)提供的一些重要的類,如JMenuItem、JButton和JRadioButton等類。</p><p> 3.1.1 PuzzleFrame
11、.java類模塊</p><p> PuzzleFrame類負(fù)責(zé)創(chuàng)建魔板游戲的主窗口,該類含有main方法,程序從該類開始。PuzzleFrame類的成員變量中有4種重要類型的對象:PuzzlePad、JmenuItem、JRadioButton和JButton。PuzzleFrame類的主要成員的作用將在后面的詳細(xì)設(shè)計中闡述,PuzzleFrame類主要成員變量(屬性)和主要方法如表所示。</p>
12、<p> 表格1 PuzzleFrame.java主要成員變量(屬性)</p><p> 表格 2 PuzzleFrame.java主要方法</p><p> 3.1.2 PuzzlePad.java類模塊</p><p> PuzzlePad類創(chuàng)建的對象是PuzzleFrame類最重要的成員之一,代表“魔板”。該類的成員變量中有5種重要類
13、型的對象:Point、Block和Image。PuzzlePad類類主要成員變量(屬性)和主要方法如表所示。</p><p> 表格 3 PuzzlePad.java主要成員變量(屬性)</p><p> 表格 4 PuzzlePad.java主要方法</p><p> 3.1.3 SquarePoint.java類模塊</p><p&
14、gt; SquarePoint類負(fù)責(zé)創(chuàng)建確定位置的對象,使用Point對象可以確定Block對象在PuzzlePad對象中的位置,即確定“方塊”在“魔板”中的位置。SquarePoint.java類主要成員變量(屬性)和主要方法如表所示。</p><p> 表格5 SquarePoint.java主要成員變量(屬性)</p><p> 表格6 SquarePoint.java主要
15、方法</p><p><b> 3.2 系統(tǒng)流程圖</b></p><p> 根據(jù)對模板游戲的功能分析,設(shè)計得到魔板游戲總流程,如圖所示:</p><p> 圖 1 系統(tǒng)流程圖</p><p><b> 4設(shè)計過程與分析</b></p><p> 由于我們要將這個
16、游戲?qū)懗梢粋€應(yīng)用程序,所以首先要設(shè)計一下游戲的框架和菜單。 </p><p> 游戲的框架采用標(biāo)準(zhǔn)的Windows框架,在上面有標(biāo)題欄、菜單欄,以方便玩家控制游戲。我們應(yīng)該先做好這一部分。菜單欄包括魔板游戲??蚣苤虚g嵌入顯示單選按鈕和按鈕。</p><p> 然后,應(yīng)該在一個面板上構(gòu)建游戲的界面,將這個面板嵌入到游戲的大框架里。這樣整個游戲的界面就出來了。 <
17、/p><p> 對菜單以及界面上的控制按鈕進(jìn)行響應(yīng),并相應(yīng)地來控制游戲。這時我們需要添加對菜單和按鈕的事件響應(yīng)方法。 </p><p> 在游戲面板構(gòu)建好這后,我們應(yīng)該讓游戲能夠玩起來,這一部分主要是編寫一些算法,用來控制游戲。這里我們還應(yīng)該增加對鼠標(biāo)事件的響應(yīng),讓玩家用鼠標(biāo)控制游戲。</p><p> 為了實現(xiàn)魔板游戲的所有需求,設(shè)計應(yīng)分為三個部分:首
18、先需要設(shè)計此魔板游戲的的界面以及其框架布局。魔板游戲的基本框架從上由下依次是、菜單欄、游戲操作主界面。</p><p> 菜單欄包含了魔板游戲一個菜單選項,并對各個菜單項以及界面上的小方格控制按鈕進(jìn)行事件響應(yīng),相應(yīng)地來成功控制魔板游戲中的有關(guān)操作。其次則需設(shè)計魔板游戲的“拼圖”功能設(shè)計,需要設(shè)計在主界面中加載大圖片并將其分割到9個或16個小方格里,在設(shè)置方格為按鈕事件響應(yīng),然后編寫算法控制小方格的移動,移動方向
19、總是朝沒有圖案的空方格上移動,同時還需要在游戲中設(shè)置預(yù)覽功能,讓玩家在游戲的任何時候都能預(yù)覽他們要完成的拼圖。 </p><p> 魔板游戲的程序由三個類構(gòu)成,其中類PuzzleFrame包含main()方法; PuzzlePad類中則含五個方法:方法PuzzlePad()、方法actionPerformed()、方法隨機(jī)排列數(shù)字()、方法隨機(jī)排列圖像()和方法paintComponent
20、();SquarePoint類中則包含了方法SquarePoint(int x,int y)</p><p> 此魔板游戲由三個類實現(xiàn)所有設(shè)計需求。</p><p> 第一個類PuzzleFrame定義了一個main()方法,創(chuàng)建了PuzzleFrame類實例,設(shè)置了程序的入口同時也設(shè)置了魔板游戲的Windows窗口主界面的菜單欄以及主界面分散按鈕上的各個連接。
21、160;</p><p> 第二個類SquarePoint包含了一個SquarePoint(int x,int y)方法,這個方法控制主界面上分散的小圖片受到鼠標(biāo)的按鈕響應(yīng)后圖片的移動,它控制小圖片往沒有圖片的空位置移動。 </p><p> 第三個類PuzzlePad中則含五個方法:方法PuzzlePad()添加圖片和設(shè)置小方格的布局;方法actionP
22、erformed()實現(xiàn)小方格的移動規(guī)則;方法隨機(jī)排列數(shù)字()和方法隨機(jī)排列圖像()實現(xiàn)點擊開始玩按鈕時,隨機(jī)產(chǎn)生一個圖片和數(shù)字的排列;方法paintComponent()實現(xiàn)小方格中黑色小方格功能實現(xiàn)。</p><p><b> 5設(shè)計結(jié)果與測試</b></p><p> 圖 2 初級魔板游戲數(shù)字玩法</p><p> import
23、javax.swing.*;</p><p> import java.awt.*;</p><p> public class Block extends JTextField{</p><p> Point point;</p><p> Object object;</p><p><b>
24、Block(){</b></p><p> setEditable(false);</p><p> setHorizontalAlignment(JTextField.CENTER);</p><p> setFont(new Font("Arial",Font.BOLD,16));</p><p>
25、 setForeground(Color.blue);</p><p><b> } </b></p><p> public void setAtPoint(Point p){</p><p><b> point=p;</b></p><p><b> }</b>&
26、lt;/p><p> public Point getAtPoint(){</p><p> return point;</p><p><b> }</b></p><p> public void setObject(Object object){</p><p> this.objec
27、t=object;</p><p> if(object instanceof Integer){</p><p> Integer number=(Integer)object;</p><p> setText(""+number.intValue());</p><p><b> }</b&g
28、t;</p><p> else if(object instanceof Image){</p><p> repaint();</p><p><b> }</b></p><p><b> }</b></p><p> public Object getObj
29、ect(){</p><p> return object;</p><p><b> }</b></p><p> public void paintComponent(Graphics g){</p><p> super.paintComponent(g); </p><p>
30、int w=getBounds().width;</p><p> int h=getBounds().height;</p><p><b> try{ </b></p><p> g.drawImage((Image)object,0,0,w,h,this);</p><p><b> }</
31、b></p><p> catch(Exception exp){}</p><p><b> }</b></p><p><b> }</b></p><p> 圖 3 高級魔板游戲數(shù)字玩法 </p><p> public class Point{&l
32、t;/p><p><b> int x,y;</b></p><p> boolean haveBlock;</p><p> Block block=null; </p><p> public Point(int x,int y){</p><p>&
33、lt;b> this.x=x;</b></p><p><b> this.y=y;</b></p><p><b> }</b></p><p> public boolean isHaveBlock(){</p><p> return haveBlock;</
34、p><p><b> }</b></p><p> public void setHaveBlock(boolean boo){</p><p> haveBlock=boo;</p><p><b> }</b></p><p> public int getX(){
35、</p><p><b> return x;</b></p><p><b> }</b></p><p> public int getY(){</p><p><b> return y;</b></p><p><b> }&
36、lt;/b></p><p> public boolean equals(Point p){</p><p> if(p.getX()==this.getX()&&p.getY()==this.getY())</p><p> return true;</p><p><b> else</b&
37、gt;</p><p> return false; </p><p><b> }</b></p><p> public void setBlock(Block block){</p><p> this.block=block; </p><p><b> }</
38、b></p><p> public Block getBlock(){</p><p> return block;</p><p><b> }</b></p><p> 圖 4 初級魔板游戲圖像玩法</p><p> public Image [] getImages(Im
39、age image,int rows,int colums){</p><p> Image [] blockImage=new Image[rows*colums];</p><p><b> try{</b></p><p> imageWidth=image.getWidth(this);</p><p>
40、 imageHeight=image.getHeight(this);</p><p> int w=imageWidth/colums; </p><p> int h=imageHeight/rows;</p><p><b> int k=0; </b></
41、p><p> PixelGrabber pg=null; </p><p> ImageProducer ip=null; </p><p> for(int i=0;i<rows;i++){</p><p> for(int j=0;j<colums;j++){</p><
42、;p> int pixels[]= new int[w*h]; </p><p> pg=new PixelGrabber(image,j*w,i*h,w,h,pixels,0,w); </p><p> pg.grabPixels(); </p>&l
43、t;p> ip=new MemoryImageSource(w,h,pixels,0,w);</p><p> blockImage[k]=tool.createImage(ip); </p><p> k++; </p><p><b> }</b></p><p><b&g
44、t; }</b></p><p><b> }</b></p><p> 圖 5 高級魔板游戲圖像玩法</p><p> public void actionPerformed(ActionEvent e){</p><p> if(e.getSource()==startButton){<
45、/p><p> if(digitPlay.isSelected()){</p><p> puzzlePad.setIsDigitPlay();</p><p><b> }</b></p><p> else if(imagePlay.isSelected()){</p><p> puz
46、zlePad.setImage(image);</p><p> puzzlePad.setIsImagePlay();</p><p><b> }</b></p><p><b> } </b></p><p> else if(e.getSource()==oneGrade){<
47、/p><p> puzzlePad.setGrade(1);</p><p><b> }</b></p><p> else if(e.getSource()==twoGrade){</p><p> puzzlePad.setGrade(2);</p><p><b> }&l
48、t;/b></p><p> else if(e.getSource()==newImage){</p><p> FileNameExtensionFilter filter = new FileNameExtensionFilter(</p><p> "JPG & GIF Images", "jpg"
49、, "gif");</p><p> JFileChooser chooser=new JFileChooser();</p><p> chooser.setFileFilter(filter); </p><p> int state=chooser.showOpenDialog(null);</p><p>
50、 File file=chooser.getSelectedFile();</p><p> if(file!=null&&state==JFileChooser.APPROVE_OPTION){</p><p><b> try{</b></p><p> image=tool.createImage(file.toUR
51、I().toURL());</p><p> puzzlePad.setImage(image);</p><p><b> }</b></p><p> catch(Exception exp){} </p><p><b> }</b></p><p><
52、b> }</b></p><p> else if(e.getSource()==defaultImage){</p><p><b> try{</b></p><p> image=tool.createImage(new File("dog.jpg").toURI().toURL());<
53、;/p><p> puzzlePad.setImage(image);</p><p><b> }</b></p><p> catch(Exception exp){} </p><p><b> }</b></p><p><b> }</b&g
54、t;</p><p><b> 圖 6 最終結(jié)果</b></p><p> public void actionPerformed(ActionEvent e){</p><p> spendTime++;</p><p> showTime.setText("您的用時:"+spendTim
55、e+"秒");</p><p><b> } </b></p><p> public void mouseReleased(MouseEvent e){</p><p> if(verify.isSuccess()){</p><p> recordTime.stop();</p>
56、;<p> JOptionPane.showMessageDialog(this,"您成功了!","消息框", JOptionPane.INFORMATION_MESSAGE );</p><p><b> }</b></p><p><b>
57、 參考文獻(xiàn):</b></p><p> [1]耿祥義,張躍平.Java2實用教程(第三版)[M].北京:清華大學(xué)出版社, 2006. </p><p> [2]耿祥義.Java課程設(shè)計(第三版)[M].北京:清華大學(xué)出版社,2004.</p><p> [3]張躍平.Java2實用教程實驗指導(dǎo)與習(xí)題解答(第三版)[
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 魔板游戲課程設(shè)計報告
- 基于java的魔板游戲設(shè)計與開發(fā)
- 紙牌游戲課程設(shè)計
- 紙牌游戲課程設(shè)計
- 剪刀游戲課程設(shè)計
- 賽車游戲課程設(shè)計
- java課程設(shè)計-蜘蛛紙牌游戲設(shè)計課程設(shè)計報告
- java課程設(shè)計-猜數(shù)游戲課程設(shè)計報告
- 掃雷游戲課程設(shè)計報告
- 約瑟夫生死游戲課程設(shè)計
- java掃雷游戲課程設(shè)計
- java課程設(shè)計--手機(jī)游戲
- 約瑟夫生死游戲課程設(shè)計
- 推箱子游戲課程設(shè)計
- java課程設(shè)計-掃雷游戲
- 紙牌游戲-課程設(shè)計報告
- java課程設(shè)計-撲克游戲
- 掃雷游戲課程設(shè)計報告
- 掃雷小游戲課程設(shè)計
- 推箱子游戲課程設(shè)計
評論
0/150
提交評論