![軟件設(shè)計(jì)畢業(yè)設(shè)計(jì)論文-基于JAVA游戲開發(fā)設(shè)計(jì)與實(shí)現(xiàn)-人人愛拼圖_第1頁](http://file4.renrendoc.com/view/457704081eb63c7e772621737d00c605/457704081eb63c7e772621737d00c6051.gif)
![軟件設(shè)計(jì)畢業(yè)設(shè)計(jì)論文-基于JAVA游戲開發(fā)設(shè)計(jì)與實(shí)現(xiàn)-人人愛拼圖_第2頁](http://file4.renrendoc.com/view/457704081eb63c7e772621737d00c605/457704081eb63c7e772621737d00c6052.gif)
![軟件設(shè)計(jì)畢業(yè)設(shè)計(jì)論文-基于JAVA游戲開發(fā)設(shè)計(jì)與實(shí)現(xiàn)-人人愛拼圖_第3頁](http://file4.renrendoc.com/view/457704081eb63c7e772621737d00c605/457704081eb63c7e772621737d00c6053.gif)
![軟件設(shè)計(jì)畢業(yè)設(shè)計(jì)論文-基于JAVA游戲開發(fā)設(shè)計(jì)與實(shí)現(xiàn)-人人愛拼圖_第4頁](http://file4.renrendoc.com/view/457704081eb63c7e772621737d00c605/457704081eb63c7e772621737d00c6054.gif)
![軟件設(shè)計(jì)畢業(yè)設(shè)計(jì)論文-基于JAVA游戲開發(fā)設(shè)計(jì)與實(shí)現(xiàn)-人人愛拼圖_第5頁](http://file4.renrendoc.com/view/457704081eb63c7e772621737d00c605/457704081eb63c7e772621737d00c6055.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
常州工學(xué)院學(xué)士學(xué)位設(shè)計(jì)一、設(shè)計(jì)任務(wù)1.設(shè)計(jì)任務(wù)與要求小組設(shè)計(jì)的拼圖游戲是一個簡單的益智小游戲,通過程序運(yùn)行后用鼠標(biāo)就可以操作界面上的按鈕或者菜單選項(xiàng)開始拼圖游戲,界面的最上方有本人班級的名字“13322”,界面上還有“開始”“預(yù)覽”“選項(xiàng)”三個菜單,程序運(yùn)行后就可以通過鼠標(biāo)控制開始游戲。要求:小組設(shè)計(jì)的拼圖游戲是一個具有一個簡單的系統(tǒng)界面,操作簡單易行,上手快,適用于廣大用戶的小游戲,先通過玩家鼠標(biāo)點(diǎn)擊“選項(xiàng)”選擇要拼的圖片,然后用鼠標(biāo)點(diǎn)擊分散的小圖片操作來完成拼圖。并且成功拼成圖片后會出現(xiàn)“恭喜你完成拼圖,加油!”一句話。2.設(shè)計(jì)方法與思路由于我們要將這個游戲?qū)懗梢粋€應(yīng)用程序,所以首先要設(shè)計(jì)一下游戲的框架和菜單。游戲的框架采用標(biāo)準(zhǔn)的Windows框架,在上面有標(biāo)題欄、菜單欄,以方便玩家控制游戲。我們應(yīng)該先做好這一部分。菜單欄包括游戲的開始、預(yù)覽、選項(xiàng)等控制菜單??蚣苤虚g嵌入顯示分散的小圖片。然后,應(yīng)該在一個面板上構(gòu)建游戲的界面,將這個面板嵌入到游戲的大框架里。這樣整個游戲的界面就出來了。對菜單以及界面上的控制按鈕進(jìn)行響應(yīng),并相應(yīng)地來控制游戲。這時我們需要添加對菜單和按鈕的事件響應(yīng)方法。在游戲面板構(gòu)建好這后,我們應(yīng)該讓游戲能夠玩起來,這一部分主要是編寫一些算法,用來控制游戲。這里我們還應(yīng)該增加對鼠標(biāo)事件的響應(yīng),讓玩家用鼠標(biāo)控制游戲。該游戲的流程圖見圖。3.設(shè)計(jì)目標(biāo)在這次課程設(shè)計(jì)中,主要是運(yùn)用Java語言來編寫,并可運(yùn)用其他的技術(shù)。在我們的系統(tǒng)中,還采用了多線程、異常處理、畫圖、Socket技術(shù)、Swing控件、網(wǎng)絡(luò)傳輸中的廣播等技術(shù),而這些知識都是我們沒有學(xué)過的,這就要求我們?nèi)ゲ殚喯嚓P(guān)書籍。正因?yàn)檫@樣,才鍛煉了我的自學(xué)能力,為以后的學(xué)習(xí)與工作打下了基礎(chǔ)。
二、設(shè)計(jì)說明1.題目描述此拼圖游戲是一個myeclipse程序,用戶通過點(diǎn)擊游戲界面上的按鈕或菜單欄選項(xiàng)控制游戲的開始、預(yù)覽、選項(xiàng)等來開始游戲。此游戲分散的小圖片的移動規(guī)則是小圖片會朝著空位置方向移動,玩家先在界面上選擇開始游戲,然后通過鼠標(biāo)左鍵點(diǎn)擊要移動的小圖片,小圖片會自動移動到原來沒有圖片的空位置,移動時,預(yù)備移往的圖片旁邊必須有可供移往的空位置。預(yù)覽菜單的功能是玩家在游戲中任何時候都可以點(diǎn)擊進(jìn)入觀看完成拼圖后完整的大圖片,選項(xiàng)菜單中,程序?yàn)橥婕姨峁┝撕芏嗖煌N類的圖片,玩家可以根據(jù)自己喜好選擇自己喜歡的圖片開始拼圖游戲。2.界面及功能詳細(xì)設(shè)計(jì)拼圖游戲的程序由三個類構(gòu)成,其中類MyMainFrame包含main()方法,另外兩個類中MyCanvas中則含六個方法:方法MyCanvas()、方法reLoadPictrue()、方法isFinish()、方法Start()和方法paint()、方法mousePressed(MouseEventarg0);另一個類Cell類中則包含了一個方法move(Stringdirection,intsleep)。此拼圖游戲由三個類實(shí)現(xiàn)所有設(shè)計(jì)需求。第一個類MyMainFrame定義了一個main()方法,創(chuàng)建了MyMainFrame類實(shí)例,設(shè)置了程序的入口同時也設(shè)置了拼圖游戲的Windows窗口主界面的菜單欄以及主界面分散圖片上的各個按鈕連接。第二個類MyCanvas包含了一個move(Stringdirection,intsleep)方法,這個方法控制主界面上分散的小圖片受到鼠標(biāo)的按鈕響應(yīng)后圖片的移動,它控制小圖片往沒有圖片的空位置移動。第三個類MyCanvas中則含五個方法:方法MyCanvas()、方法reLoadPictrue()、方法isFinish()、方法Start()和方法paint();另一個類Cell類中則包含了一個方法move(Stringdirection,intsleep)。它們各自實(shí)現(xiàn)的功能分析如下:(1)MyCanvas()方法中實(shí)現(xiàn)了游戲系統(tǒng)對將要進(jìn)行拼圖的圖片加載,函數(shù)中設(shè)置了游戲的圖片庫中圖片在電腦上的路徑,然后調(diào)用函數(shù)找到相對應(yīng)的圖片將其分割成九個大小相等的小方格,并且去掉其中最后一個方格上的圖案,最后再設(shè)置好沒有圖案的小方格在整個界面上的位置。此方法先定義了一個布爾型變量hasAddActionListener并將其值賦為false;用hasAddActionListener來設(shè)置方格的動作監(jiān)聽器的標(biāo)志位,TRUE為已經(jīng)添加上動作事件,F(xiàn)ALSE是尚未添加動作事件;然后在定義方格,加載當(dāng)前玩家指定的圖片將其分割放到定義好的方格中。拼圖游戲加載圖片模塊的實(shí)現(xiàn)(2)方法reLoadPictrue()reLoadPictrue()方法則實(shí)現(xiàn)了重新加載另外一張圖片的過程。當(dāng)玩家完成一幅圖的拼圖或者是不能完成當(dāng)前圖片的拼圖想要換一幅圖在進(jìn)行游戲的時候就調(diào)用此函數(shù)更換圖片,玩家通過游戲主界面上菜單欄上的選項(xiàng)按鈕響應(yīng)調(diào)用此函數(shù)更換圖片。選項(xiàng)菜單操作的功能圖(3)方法isFinish()isFinish()方法主要是通過比較玩家拼好的圖片和原圖片想比較,若除去沒有圖案的空方格兩張圖片完全吻合則判斷出玩家正確完成拼圖。(4)Start()方法的功能先是是對分配好圖案的小方格進(jìn)行重新排列,打亂順序,當(dāng)?shù)谝粋€方格距左上角較近時,產(chǎn)生0-4,對應(yīng)空方格的上下左右移動,空方格左移動,與左側(cè)方格互換位置,5到8對應(yīng)的方格也同理進(jìn)行移動打亂圖片順序;當(dāng)小方格圖片的順序打亂后則調(diào)用addMouseListener方法為第個方格添加動作事件,這樣單擊按鈕就能移動小方格了。完成了方格的按鈕響應(yīng)。圖5調(diào)用start方法的功能開始游戲功能圖(5)方法paint()方法的功能則是工具接收到的鼠標(biāo)的按鈕響應(yīng)在圖中主界面上的小圖采取相應(yīng)的移動來進(jìn)行游戲,其中調(diào)用了類庫中MyCanvs中的mousePress(MouseEventarg0)方法。同時調(diào)用isFinish()函數(shù)將拼好的圖片和原來圖片庫中的圖片進(jìn)行對比,判斷拼圖是否完成,沒有完成就不做處理,游戲繼續(xù),若拼圖完成則輸出“恭喜你完成拼圖,加油!”的鼓勵標(biāo)語。圖6完成拼圖游戲后的結(jié)束界面4.作品特點(diǎn)使玩家能夠玩的開心,玩出激情,讓他們覺得不一樣的拼圖游戲,圖片的多樣性使玩家不覺得枯燥無味。點(diǎn)擊圖片來控制圖片各種移動,使玩家可以玩成一張的拼圖,同時可以根據(jù)拼圖時間的快慢,可以鍛煉人們的大腦。三、設(shè)計(jì)成果1.設(shè)計(jì)成果及作品運(yùn)行結(jié)果展示運(yùn)行程序拼圖游戲后出現(xiàn)的主界面進(jìn)入系統(tǒng)界面后,檢測菜單欄的設(shè)置項(xiàng)和操作項(xiàng)的功能是否能夠?qū)崿F(xiàn),選擇操作項(xiàng)的刪除記錄功能、修改記錄功能則出現(xiàn)如圖所示的界面,代表功能已能完全實(shí)現(xiàn)。拼圖游戲的開始游戲界面圖拼圖游戲的選項(xiàng)功能界面圖拼圖預(yù)覽界面拼圖完成界面2.作品的優(yōu)缺點(diǎn)本拼圖游戲是一個具有一個簡單的系統(tǒng)界面,操作簡單易行,上手快,適用于廣大用戶的小游戲,先通過玩家鼠標(biāo)點(diǎn)擊“選項(xiàng)”選擇要拼的圖片,然后用鼠標(biāo)點(diǎn)擊分散的小圖片操作來完成拼圖。并且成功拼成圖片后會出現(xiàn)“恭喜你完成拼圖,加油!”3.工程代碼importjavax.swing.Icon;importjavax.swing.JButton; publicclassCellextendsJButton{ Cell(Iconicon){//實(shí)際為ICON super(icon); this.setSize(100,100); } publicvoidmove(Stringdirection,intsleep){//方格的移動 if(direction=="UP"){ this.setLocation(this.getBounds().x,this.getBounds().y-100); }elseif(direction=="DOWN"){ this.setLocation(this.getBounds().x,this.getBounds().y+100); }elseif(direction=="LEFT"){ this.setLocation(this.getBounds().x-100,this.getBounds().y); }else{ this.setLocation(this.getBounds().x+100,this.getBounds().y); } } }importjava.awt.Rectangle;importjava.awt.event.MouseEvent;importjava.awt.event.MouseListener;importjavax.swing.Icon;importjavax.swing.ImageIcon;importjavax.swing.JOptionPane;importjavax.swing.JPanel;publicclassMyCanvasextendsJPanelimplementsMouseListener{ booleanhasAddActionListener=false;//設(shè)置方格的動作監(jiān)聽器的標(biāo)志位,TRUE為已經(jīng)添加上動作事件,F(xiàn)ALSE是尚未添加動作事件 Cellcell[];//定義方格 RectanglecellNull;//定義空方格區(qū)域 publicstaticintpictureID=1;//當(dāng)前選擇的圖片代號 publicMyCanvas(){ this.setLayout(null); this.setSize(400,400); cellNull=newRectangle(200,200,100,100);//空方格區(qū)域在第三行每三列 cell=newCell[9]; Iconicon; for(inti=0;i<3;i++){//為9個方格加載圖片,并初使化坐標(biāo),形成三行三列 for(intj=0;j<3;j++){ icon=newImageIcon("pictrue/pic_"+pictureID+"_"+(i*3+j+1)+".jpg"); cell[i*3+j]=newCell(icon); cell[i*3+j].setLocation(j*100,i*100); this.add(cell[i*3+j]); } } this.remove(cell[8]);//移除最后一個多余的方格 } publicvoidreLoadPictrue(){//當(dāng)選擇其它圖形進(jìn)行拼圖時,需重新加載新圖片 Iconicon; for(inti=0;i<3;i++){ for(intj=0;j<3;j++){ icon=newImageIcon("pictrue/pic_"+pictureID+"_"+(i*3+j+1)+".jpg"); cell[i*3+j].setIcon(icon); } } } publicbooleanisFinish(){//判斷是否拼合成功 for(inti=0;i<8;i++){ intx=cell[i].getBounds().x; inty=cell[i].getBounds().y; if(y/100*3+x/100!=i) returnfalse; } returntrue; } publicvoidStart(){//對方格進(jìn)行重新排列,打亂順序 while(cell[0].getBounds().x<=100&&cell[0].getBounds().y<=100){//當(dāng)?shù)谝粋€方格距左上角較近時 intx=cellNull.getBounds().x; inty=cellNull.getBounds().y; intdirection=(int)(Math.random()*4);//產(chǎn)生0-4,對應(yīng)空方格的上下左右移動 if(direction==0){//空方格左移動,與左側(cè)方格互換位置,左側(cè)方格右移動 x-=100; if(test(x,y)){ for(intj=0;j<8;j++){ if((cell[j].getBounds().x==x)&&(cell[j].getBounds().y==y)){//依次尋找左側(cè)的按鈕 cell[j].move("RIGHT",100); cellNull.setLocation(x,y); break;//找到后跳出for循環(huán) } } } }elseif(direction==1){//RIGHT x+=100; if(test(x,y)){ for(intj=0;j<8;j++){ if((cell[j].getBounds().x==x)&&(cell[j].getBounds().y==y)){ cell[j].move("LEFT",100); cellNull.setLocation(x,y); break; } } } }elseif(direction==2){//UP y-=100; if(test(x,y)){ for(intj=0;j<8;j++){ if((cell[j].getBounds().x==x)&&(cell[j].getBounds().y==y)){ cell[j].move("DOWN",100); cellNull.setLocation(x,y); break; } } } }else{//DOWN y+=100; if(test(x,y)){ for(intj=0;j<8;j++){ if((cell[j].getBounds().x==x)&&(cell[j].getBounds().y==y)){ cell[j].move("UP",100); cellNull.setLocation(x,y); break; } } } } } if(!hasAddActionListener)//如果尚未添加動作事件,則添加 for(inti=0;i<8;i++)//為第個方格添加動作事件,這樣單擊按鈕就能移動了 cell[i].addMouseListener(this); hasAddActionListener=true; } privatebooleantest(intx,inty){ if((x>=0&&x<=200)||(y>=0&&y<=200)) returntrue; else returnfalse; }// publicvoidpaint(Graphicsg){// // for(inti=0;i<=300;i+=100)// g.drawLine(0,i,300,i);// for(inti=0;i<=300;i+=100)// g.drawLine(i,0,i,300);// for(inti=0;i<8;i++)// cell[i].repaint();// } publicvoidmouseClicked(MouseEventarg0){ } publicvoidmouseEntered(MouseEventarg0){ } publicvoidmouseExited(MouseEventarg0) { } publicvoidmouseReleased(MouseEventarg0){ } publicvoidmousePressed(MouseEventarg0){//方格的鼠標(biāo)事件,因?yàn)橛玫搅薓yCanvas中的一些方法,因此沒有在Cell類中處理鼠標(biāo)事件 Cellbutton=(Cell)arg0.getSource(); intx1=button.getBounds().x;//得到所單擊方格的坐標(biāo) inty1=button.getBounds().y; intx2=cellNull.getBounds().x;//得到空方格的坐標(biāo) inty2=cellNull.getBounds().y; if(x1==x2&&y1-y2==100)//進(jìn)行比較,如果滿足條件則進(jìn)行交換 button.move("UP",100); elseif(x1==x2&&y1-y2==-100) button.move("DOWN",100); elseif(x1-x2==100&y1==y2) button.move("LEFT",100); elseif(x1-x2==-100&&y1==y2) button.move("RIGHT",100); else return;//不滿足就不進(jìn)行任何處理 cellNull.setLocation(x1,y1); this.repaint(); if(this.isFinish()){//進(jìn)行是否完成的判斷 JOptionPane.showMessageDialog(this,"恭喜你完成拼圖,加油!"); for(inti=0;i<8;i++) cell[i].removeMouseListener(this);//如果已完成,撤消鼠標(biāo)事件,鼠標(biāo)單擊方格不在起作用 hasAddActionListener=false; } } }/**JAVA小游戲-拼圖我做的第一個小游戲*Cell類是繼承的按鈕類,并加上相應(yīng)圖形,形成方格*MyCanvas是一個面板,加載Cell類的對象(方格),是這三個類中的核心**2008年6月1日-10日**/importjava.awt.BorderLayout;importjava.awt.Button;importjava.awt.Choice;importjava.awt.Color;importjava.awt.Container;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.Icon;importjavax.swing.ImageIcon;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JOptionPane;importjavax.swing.JPanel;publicclassMyMainFrameextendsJFrameimplementsActionListener{ MyCanvasmyCanvas; JPanelpanelNorth,panelPreview;//定義上方的面板,及預(yù)覽所需的面板 Buttonstart,preview,set;//定義開始,預(yù)覽,設(shè)定按鈕 Containercontainer;//容器,得到內(nèi)容面板 publicMyMainFrame(){//初使化 container=this.getContentPane(); start=newButton("開始"); start.addActionListener(this); preview=newButton("預(yù)覽"); preview.addActionListener(this); set=newButton("選項(xiàng)"); set.addActionListener(this); panelPreview=newJPanel(); panelPreview.setLayout(null); Iconicon=newImageIcon("pictrue/pic_"+MyCanvas.pictureID+".jpg"); JLabellabel=newJLabel(icon); label.setBounds(0,0,300,300); panelPreview.add(label); panelNorth=newJPanel(); panelNorth.setBackground(Color.red); panelNorth.add(start); panelNorth.add(preview); panelNorth.add(set); myCanvas=newMyCanvas(); container.add(myCanvas,BorderLayout.CENTER); container.add(panelNorth,BorderLayout.NORTH); this.setTitle("拼圖小游戲-13322"); this.setLocation(300,200); this.setSize(308,365); this.setResizable(false); this.setVisible(true); this.setDefaultCloseOperation(3); } publicstaticvoidmain(String[]args){ //TODO自動生成方法存根 newMyMainFrame(); } publicvoidactionPerformed(ActionEventarg0){//對三個按鈕事件的處理 //TODO自動生成方法存根 Buttonbutton=(Button)arg0.getSource(); if(button==start){ myCanvas.Start(); }elseif(button==preview){ if(button.getLabel()=="預(yù)覽"){ container.remove(myCanvas); container.add(panelPreview); panelPreview.updateUI(); container.repaint(); button.setLabel("返回"); }else{ container.remove(panelPreview); container.add(myCanvas); container.repaint(); button.setLabel("預(yù)覽"); } }elseif(button==set){//修改所選圖片 Choicepic=newChoice(); pic.add("小貓"); pic.add("小豬"); pic.add("云"); pic.add("QQ"); pic.add("卡通"); pic.add("花"); inti=JOptionPane.showConfirmDialog(this, pic,"選擇圖片",JOptionPane.OK_CANCEL_OPTION); if(i==JOptionPane.YES_OPTION){ MyCanvas.pictureID=pic.getSelectedIndex()+1; myCanvas.reLoadPictrue(); Iconic
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024秋七年級數(shù)學(xué)上冊 第二章 有理數(shù)2.2數(shù)軸 2在數(shù)軸上比較數(shù)的大小說課稿(新版)華東師大版
- 2023九年級數(shù)學(xué)下冊 第二十八章 銳角三角函數(shù)28.2 解直角三角形及其應(yīng)用28.2.2 應(yīng)用舉例第2課時 方向角和坡角問題說課稿 (新版)新人教版
- Module 7 Unit 2 There are twelve boys on the bike(說課稿)-2024-2025學(xué)年外研版(三起)英語 四年級上冊
- 16赤壁賦說課稿
- 4《說說我們的學(xué)校》(說課稿)- 2004-2025學(xué)年統(tǒng)編版道德與法治三年級上冊001
- 2025銷售居間合同勞動合同
- Unit4《Bobbys House》lesson6(說課稿)-2024-2025學(xué)年北師大版(三起)英語四年級上冊
- 10在牛肚子里旅行 說課稿-2024-2025學(xué)年三年級上冊語文統(tǒng)編版
- 16新年的禮物 (說課稿)統(tǒng)編版道德與法治一年級上冊
- 2024年九年級語文上冊 第五單元 第9課《劉姥姥進(jìn)賈府》說課稿 北師大版
- 2025年醫(yī)美醫(yī)院公司組織架構(gòu)和業(yè)務(wù)流程
- 防滑防摔倒安全教育
- 乳腺癌課件教學(xué)課件
- 連續(xù)性腎替代治療抗菌藥物劑量調(diào)整專家共識(2024年版)解讀
- 春節(jié)節(jié)后收心安全培訓(xùn)
- 2024年廣西區(qū)公務(wù)員錄用考試《行測》真題及答案解析
- 高中物理斜面模型大全(80個)
- 2025年高考物理復(fù)習(xí)壓軸題:電磁感應(yīng)綜合問題(解析版)
- 2024-2030年芯片行業(yè)市場發(fā)展分析及發(fā)展趨勢前景預(yù)測報(bào)告
- 2024年個人車位租賃合同經(jīng)典版(二篇)
- 相互批評意見500條【5篇】
評論
0/150
提交評論