版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
常州工學(xué)院學(xué)士學(xué)位設(shè)計(jì)一、設(shè)計(jì)任務(wù)1.設(shè)計(jì)任務(wù)與要求小組設(shè)計(jì)的拼圖游戲是一個(gè)簡(jiǎn)單的益智小游戲,通過(guò)程序運(yùn)行后用鼠標(biāo)就可以操作界面上的按鈕或者菜單選項(xiàng)開(kāi)始拼圖游戲,界面的最上方有本人班級(jí)的名字“13322”,界面上還有“開(kāi)始”“預(yù)覽”“選項(xiàng)”三個(gè)菜單,程序運(yùn)行后就可以通過(guò)鼠標(biāo)控制開(kāi)始游戲。要求:小組設(shè)計(jì)的拼圖游戲是一個(gè)具有一個(gè)簡(jiǎn)單的系統(tǒng)界面,操作簡(jiǎn)單易行,上手快,適用于廣大用戶的小游戲,先通過(guò)玩家鼠標(biāo)點(diǎn)擊“選項(xiàng)”選擇要拼的圖片,然后用鼠標(biāo)點(diǎn)擊分散的小圖片操作來(lái)完成拼圖。并且成功拼成圖片后會(huì)出現(xiàn)“恭喜你完成拼圖,加油!”一句話。2.設(shè)計(jì)方法與思路由于我們要將這個(gè)游戲?qū)懗梢粋€(gè)應(yīng)用程序,所以首先要設(shè)計(jì)一下游戲的框架和菜單。游戲的框架采用標(biāo)準(zhǔn)的Windows框架,在上面有標(biāo)題欄、菜單欄,以方便玩家控制游戲。我們應(yīng)該先做好這一部分。菜單欄包括游戲的開(kāi)始、預(yù)覽、選項(xiàng)等控制菜單??蚣苤虚g嵌入顯示分散的小圖片。然后,應(yīng)該在一個(gè)面板上構(gòu)建游戲的界面,將這個(gè)面板嵌入到游戲的大框架里。這樣整個(gè)游戲的界面就出來(lái)了。對(duì)菜單以及界面上的控制按鈕進(jìn)行響應(yīng),并相應(yīng)地來(lái)控制游戲。這時(shí)我們需要添加對(duì)菜單和按鈕的事件響應(yīng)方法。在游戲面板構(gòu)建好這后,我們應(yīng)該讓游戲能夠玩起來(lái),這一部分主要是編寫(xiě)一些算法,用來(lái)控制游戲。這里我們還應(yīng)該增加對(duì)鼠標(biāo)事件的響應(yīng),讓玩家用鼠標(biāo)控制游戲。該游戲的流程圖見(jiàn)圖。3.設(shè)計(jì)目標(biāo)在這次課程設(shè)計(jì)中,主要是運(yùn)用Java語(yǔ)言來(lái)編寫(xiě),并可運(yùn)用其他的技術(shù)。在我們的系統(tǒng)中,還采用了多線程、異常處理、畫(huà)圖、Socket技術(shù)、Swing控件、網(wǎng)絡(luò)傳輸中的廣播等技術(shù),而這些知識(shí)都是我們沒(méi)有學(xué)過(guò)的,這就要求我們?nèi)ゲ殚喯嚓P(guān)書(shū)籍。正因?yàn)檫@樣,才鍛煉了我的自學(xué)能力,為以后的學(xué)習(xí)與工作打下了基礎(chǔ)。
二、設(shè)計(jì)說(shuō)明1.題目描述此拼圖游戲是一個(gè)myeclipse程序,用戶通過(guò)點(diǎn)擊游戲界面上的按鈕或菜單欄選項(xiàng)控制游戲的開(kāi)始、預(yù)覽、選項(xiàng)等來(lái)開(kāi)始游戲。此游戲分散的小圖片的移動(dòng)規(guī)則是小圖片會(huì)朝著空位置方向移動(dòng),玩家先在界面上選擇開(kāi)始游戲,然后通過(guò)鼠標(biāo)左鍵點(diǎn)擊要移動(dòng)的小圖片,小圖片會(huì)自動(dòng)移動(dòng)到原來(lái)沒(méi)有圖片的空位置,移動(dòng)時(shí),預(yù)備移往的圖片旁邊必須有可供移往的空位置。預(yù)覽菜單的功能是玩家在游戲中任何時(shí)候都可以點(diǎn)擊進(jìn)入觀看完成拼圖后完整的大圖片,選項(xiàng)菜單中,程序?yàn)橥婕姨峁┝撕芏嗖煌N類的圖片,玩家可以根據(jù)自己喜好選擇自己喜歡的圖片開(kāi)始拼圖游戲。2.界面及功能詳細(xì)設(shè)計(jì)拼圖游戲的程序由三個(gè)類構(gòu)成,其中類MyMainFrame包含main()方法,另外兩個(gè)類中MyCanvas中則含六個(gè)方法:方法MyCanvas()、方法reLoadPictrue()、方法isFinish()、方法Start()和方法paint()、方法mousePressed(MouseEventarg0);另一個(gè)類Cell類中則包含了一個(gè)方法move(Stringdirection,intsleep)。此拼圖游戲由三個(gè)類實(shí)現(xiàn)所有設(shè)計(jì)需求。第一個(gè)類MyMainFrame定義了一個(gè)main()方法,創(chuàng)建了MyMainFrame類實(shí)例,設(shè)置了程序的入口同時(shí)也設(shè)置了拼圖游戲的Windows窗口主界面的菜單欄以及主界面分散圖片上的各個(gè)按鈕連接。第二個(gè)類MyCanvas包含了一個(gè)move(Stringdirection,intsleep)方法,這個(gè)方法控制主界面上分散的小圖片受到鼠標(biāo)的按鈕響應(yīng)后圖片的移動(dòng),它控制小圖片往沒(méi)有圖片的空位置移動(dòng)。第三個(gè)類MyCanvas中則含五個(gè)方法:方法MyCanvas()、方法reLoadPictrue()、方法isFinish()、方法Start()和方法paint();另一個(gè)類Cell類中則包含了一個(gè)方法move(Stringdirection,intsleep)。它們各自實(shí)現(xiàn)的功能分析如下:(1)MyCanvas()方法中實(shí)現(xiàn)了游戲系統(tǒng)對(duì)將要進(jìn)行拼圖的圖片加載,函數(shù)中設(shè)置了游戲的圖片庫(kù)中圖片在電腦上的路徑,然后調(diào)用函數(shù)找到相對(duì)應(yīng)的圖片將其分割成九個(gè)大小相等的小方格,并且去掉其中最后一個(gè)方格上的圖案,最后再設(shè)置好沒(méi)有圖案的小方格在整個(gè)界面上的位置。此方法先定義了一個(gè)布爾型變量hasAddActionListener并將其值賦為false;用hasAddActionListener來(lái)設(shè)置方格的動(dòng)作監(jiān)聽(tīng)器的標(biāo)志位,TRUE為已經(jīng)添加上動(dòng)作事件,F(xiàn)ALSE是尚未添加動(dòng)作事件;然后在定義方格,加載當(dāng)前玩家指定的圖片將其分割放到定義好的方格中。拼圖游戲加載圖片模塊的實(shí)現(xiàn)(2)方法reLoadPictrue()reLoadPictrue()方法則實(shí)現(xiàn)了重新加載另外一張圖片的過(guò)程。當(dāng)玩家完成一幅圖的拼圖或者是不能完成當(dāng)前圖片的拼圖想要換一幅圖在進(jìn)行游戲的時(shí)候就調(diào)用此函數(shù)更換圖片,玩家通過(guò)游戲主界面上菜單欄上的選項(xiàng)按鈕響應(yīng)調(diào)用此函數(shù)更換圖片。選項(xiàng)菜單操作的功能圖(3)方法isFinish()isFinish()方法主要是通過(guò)比較玩家拼好的圖片和原圖片想比較,若除去沒(méi)有圖案的空方格兩張圖片完全吻合則判斷出玩家正確完成拼圖。(4)Start()方法的功能先是是對(duì)分配好圖案的小方格進(jìn)行重新排列,打亂順序,當(dāng)?shù)谝粋€(gè)方格距左上角較近時(shí),產(chǎn)生0-4,對(duì)應(yīng)空方格的上下左右移動(dòng),空方格左移動(dòng),與左側(cè)方格互換位置,5到8對(duì)應(yīng)的方格也同理進(jìn)行移動(dòng)打亂圖片順序;當(dāng)小方格圖片的順序打亂后則調(diào)用addMouseListener方法為第個(gè)方格添加動(dòng)作事件,這樣單擊按鈕就能移動(dòng)小方格了。完成了方格的按鈕響應(yīng)。圖5調(diào)用start方法的功能開(kāi)始游戲功能圖(5)方法paint()方法的功能則是工具接收到的鼠標(biāo)的按鈕響應(yīng)在圖中主界面上的小圖采取相應(yīng)的移動(dòng)來(lái)進(jìn)行游戲,其中調(diào)用了類庫(kù)中MyCanvs中的mousePress(MouseEventarg0)方法。同時(shí)調(diào)用isFinish()函數(shù)將拼好的圖片和原來(lái)圖片庫(kù)中的圖片進(jìn)行對(duì)比,判斷拼圖是否完成,沒(méi)有完成就不做處理,游戲繼續(xù),若拼圖完成則輸出“恭喜你完成拼圖,加油!”的鼓勵(lì)標(biāo)語(yǔ)。圖6完成拼圖游戲后的結(jié)束界面4.作品特點(diǎn)使玩家能夠玩的開(kāi)心,玩出激情,讓他們覺(jué)得不一樣的拼圖游戲,圖片的多樣性使玩家不覺(jué)得枯燥無(wú)味。點(diǎn)擊圖片來(lái)控制圖片各種移動(dòng),使玩家可以玩成一張的拼圖,同時(shí)可以根據(jù)拼圖時(shí)間的快慢,可以鍛煉人們的大腦。三、設(shè)計(jì)成果1.設(shè)計(jì)成果及作品運(yùn)行結(jié)果展示運(yùn)行程序拼圖游戲后出現(xiàn)的主界面進(jìn)入系統(tǒng)界面后,檢測(cè)菜單欄的設(shè)置項(xiàng)和操作項(xiàng)的功能是否能夠?qū)崿F(xiàn),選擇操作項(xiàng)的刪除記錄功能、修改記錄功能則出現(xiàn)如圖所示的界面,代表功能已能完全實(shí)現(xiàn)。拼圖游戲的開(kāi)始游戲界面圖拼圖游戲的選項(xiàng)功能界面圖拼圖預(yù)覽界面拼圖完成界面2.作品的優(yōu)缺點(diǎn)本拼圖游戲是一個(gè)具有一個(gè)簡(jiǎn)單的系統(tǒng)界面,操作簡(jiǎn)單易行,上手快,適用于廣大用戶的小游戲,先通過(guò)玩家鼠標(biāo)點(diǎn)擊“選項(xiàng)”選擇要拼的圖片,然后用鼠標(biāo)點(diǎn)擊分散的小圖片操作來(lái)完成拼圖。并且成功拼成圖片后會(huì)出現(xiàn)“恭喜你完成拼圖,加油!”3.工程代碼importjavax.swing.Icon;importjavax.swing.JButton; publicclassCellextendsJButton{ Cell(Iconicon){//實(shí)際為ICON super(icon); this.setSize(100,100); } publicvoidmove(Stringdirection,intsleep){//方格的移動(dòng) 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è)置方格的動(dòng)作監(jiān)聽(tīng)器的標(biāo)志位,TRUE為已經(jīng)添加上動(dòng)作事件,F(xiàn)ALSE是尚未添加動(dòng)作事件 Cellcell[];//定義方格 RectanglecellNull;//定義空方格區(qū)域 publicstaticintpictureID=1;//當(dāng)前選擇的圖片代號(hào) 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個(gè)方格加載圖片,并初使化坐標(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]);//移除最后一個(gè)多余的方格 } publicvoidreLoadPictrue(){//當(dāng)選擇其它圖形進(jìn)行拼圖時(shí),需重新加載新圖片 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(){//對(duì)方格進(jìn)行重新排列,打亂順序 while(cell[0].getBounds().x<=100&&cell[0].getBounds().y<=100){//當(dāng)?shù)谝粋€(gè)方格距左上角較近時(shí) intx=cellNull.getBounds().x; inty=cellNull.getBounds().y; intdirection=(int)(Math.random()*4);//產(chǎn)生0-4,對(duì)應(yīng)空方格的上下左右移動(dòng) if(direction==0){//空方格左移動(dòng),與左側(cè)方格互換位置,左側(cè)方格右移動(dòng) 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)//如果尚未添加動(dòng)作事件,則添加 for(inti=0;i<8;i++)//為第個(gè)方格添加動(dòng)作事件,這樣單擊按鈕就能移動(dòng)了 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中的一些方法,因此沒(méi)有在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小游戲-拼圖我做的第一個(gè)小游戲*Cell類是繼承的按鈕類,并加上相應(yīng)圖形,形成方格*MyCanvas是一個(gè)面板,加載Cell類的對(duì)象(方格),是這三個(gè)類中的核心**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;//定義開(kāi)始,預(yù)覽,設(shè)定按鈕 Containercontainer;//容器,得到內(nèi)容面板 publicMyMainFrame(){//初使化 container=this.getContentPane(); start=newButton("開(kāi)始"); 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自動(dòng)生成方法存根 newMyMainFrame(); } publicvoidactionPerformed(ActionEventarg0){//對(duì)三個(gè)按鈕事件的處理 //TODO自動(dòng)生成方法存根 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. 本站所有資源如無(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年氣液分流閥項(xiàng)目可行性研究報(bào)告
- 2024年L型球型扳手項(xiàng)目可行性研究報(bào)告
- 2024至2030年中國(guó)非標(biāo)紙管行業(yè)投資前景及策略咨詢研究報(bào)告
- 2024至2030年中國(guó)藤制籃行業(yè)投資前景及策略咨詢研究報(bào)告
- 移動(dòng)電商銷售合作協(xié)議書(shū)
- 汽車制造聯(lián)合體協(xié)議書(shū)
- 建筑行業(yè)工人健康體檢協(xié)議書(shū)
- 青少年藝術(shù)家聘用協(xié)議
- 私人住房建設(shè)合同條款解析
- 商業(yè)合同終止協(xié)議書(shū)
- 中國(guó)食物成分表2018年(標(biāo)準(zhǔn)版)第6版
- 2023-2024蘇教版小學(xué)五年級(jí)數(shù)學(xué)上冊(cè)全冊(cè)測(cè)評(píng)試卷(含答案)
- 科普類公園設(shè)計(jì)方案
- 小學(xué)英語(yǔ)就業(yè)能力展示
- 中醫(yī)-艾灸治疼痛
- “安全風(fēng)險(xiǎn)分級(jí)管控”工作制度(2篇)
- 心肌病和心肌炎課件
- 《艾滋病毒》課件
- 平陽(yáng)港區(qū)西灣作業(yè)區(qū)防浪導(dǎo)流堤工程海域使用論證報(bào)告書(shū)
- 管道保溫計(jì)算公式
- 錄音行業(yè)的就業(yè)生涯發(fā)展報(bào)告
評(píng)論
0/150
提交評(píng)論