版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、XX學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系實(shí)驗(yàn)報(bào)告課程名稱程序設(shè)計(jì)基礎(chǔ)實(shí)驗(yàn)(2)實(shí)驗(yàn)項(xiàng)目應(yīng)用系統(tǒng)的面向?qū)ο笤O(shè)計(jì)與分析實(shí)驗(yàn)類型綜合性實(shí)驗(yàn)完成人所在班級(jí)指導(dǎo)教師完成日期2009年11月30日一、實(shí)驗(yàn)報(bào)告簡(jiǎn)表02二、設(shè)計(jì)內(nèi)容與要求021、設(shè)計(jì)內(nèi)容2、設(shè)計(jì)要求三、總體設(shè)計(jì)031、需求分析2、功能描述3、設(shè)計(jì)工具與運(yùn)行環(huán)境4、類及類間關(guān)系描述四、詳細(xì)設(shè)計(jì)051、類圖2、源代碼五、實(shí)例運(yùn)行及應(yīng)用效果201、魔板游戲界面2、測(cè)試游戲及輸出結(jié)果六、體會(huì)與總結(jié)24實(shí)驗(yàn)報(bào)告正文.實(shí)驗(yàn)報(bào)告簡(jiǎn)表實(shí)驗(yàn)課題名稱魔板游戲綜合性實(shí)驗(yàn)項(xiàng)目應(yīng)用系統(tǒng)的面向?qū)ο笤O(shè)計(jì)與分析服務(wù)課程程序設(shè)計(jì)基礎(chǔ)實(shí)驗(yàn)(2)實(shí)驗(yàn)小組組長(zhǎng)指導(dǎo)教師參與實(shí)驗(yàn)人員及其在實(shí)驗(yàn)課題中
2、承擔(dān)的主要任務(wù)(包括組長(zhǎng))學(xué)號(hào)小組成員姓名班級(jí)在實(shí)驗(yàn)課題中的主要作用.設(shè)計(jì)內(nèi)容與要求1設(shè)計(jì)內(nèi)容:用面向?qū)ο蟮腏ava程序設(shè)計(jì)語(yǔ)言開發(fā)設(shè)計(jì)GUI界面的魔板游戲程序。2、設(shè)計(jì)要求:(1)、魔板由3*3或4*4的方格組成,其中一個(gè)格子是空的。對(duì)于3*3的魔板,其他格子里隨機(jī)放置8個(gè)編號(hào)為0-7的方塊;對(duì)于4*4的魔板,其他格子里隨即放置15個(gè)編號(hào)為0-14的方塊,如果是n*n的方格原理相同。(2)、用鼠標(biāo)單擊任何與格子相鄰的方塊可以把該方塊移入空格子。通過(guò)不斷地移動(dòng)方塊,可以將方塊一行一行按數(shù)字順序依次排序。(3)、魔板游戲也可以使用圖像來(lái)代替數(shù)字,對(duì)于3*3的魔板,將圖像分成3*3個(gè)方塊,打亂順序
3、后,放入魔板,并將其中一個(gè)方格置為空。最終目標(biāo)是通過(guò)移動(dòng)方塊來(lái)恢復(fù)為原始圖像。4*4的魔板與3*3的方法相似。三. 總體設(shè)計(jì)1、需求分析:魔板游戲就是大家以前常玩的拼板游戲!就是將一幅完整的圖片分成小塊,打亂順序,再拼好,并且只能將圖塊和臨界的空格交換位置。用最短的時(shí)間和最省的步驟將圖形拼好,此玩法雖然簡(jiǎn)單,但特別考驗(yàn)智力,魔板游戲與魔方游戲相似屬于益智游戲。此項(xiàng)目我們需要通過(guò)面向?qū)ο蟮腏ava程序設(shè)計(jì)來(lái)實(shí)現(xiàn),游戲設(shè)計(jì)中需要用到GUI圖形界面的設(shè)計(jì),產(chǎn)生隨機(jī)數(shù)生成打亂的圖片,各種事件(動(dòng)作事件、鼠標(biāo)事件和窗口事件等)的響應(yīng)和處理等面向?qū)ο蟮闹R(shí)來(lái)實(shí)現(xiàn)游戲的各項(xiàng)功能。2、功能描述:我們所完成的魔
4、板游戲可以實(shí)現(xiàn)基本的魔板游戲的功能。此項(xiàng)目魔板游戲可由用戶選擇3*3和4*4兩個(gè)不同難度,N*N的魔板游戲原理與此相同,游戲可以通過(guò)下拉列表實(shí)現(xiàn)選擇不同的游戲圖像,增加游戲的趣味性。點(diǎn)擊“開始游戲”按鈕后可以實(shí)現(xiàn)游戲步驟的計(jì)數(shù),拼圖右邊有一個(gè)完整的圖像可以供用戶參照,用鼠標(biāo)單擊任何與格子相鄰的方塊可以把該方塊移入空格子。通過(guò)不斷地移動(dòng)方塊,可以將方塊一行一行按數(shù)字或圖片依次拼圖。若成功完成拼圖(即左邊的拼圖與右邊的參照?qǐng)D像一樣),則有提示:“恭喜您,成功完成”的字樣出現(xiàn)。3、設(shè)計(jì)工具與運(yùn)行環(huán)境:(1)、設(shè)計(jì)工具:Editplus。(2)、運(yùn)行環(huán)境:JDK,WindowsXP。4、類及類間關(guān)系描
5、述:此游戲項(xiàng)目創(chuàng)建了兩個(gè)類:MobanFrame類和MobanSquare類,其中MobanFrame類調(diào)用MobanSquare類。四. 詳細(xì)設(shè)計(jì)(包括類圖及源代碼)1類圖:2、源代碼:MobanFrame類:importjava.awt.*;.*;publicclassMobanFrameextendsFrameimplementsActionListener,MouseListener,ltemListenerMobanSquareposition;聲明方塊PointstartPoint=newPoint(110,120);繪制左邊圖像的起始點(diǎn)PointrightStartPoint=n
6、ewPoint(450,120);/繪制右邊圖像的起始點(diǎn)intnum;/存儲(chǔ)隨機(jī)數(shù)的數(shù)組PointpointMove;inttotalStep=0;/總共已走的步數(shù)Stringselectedlmage='金牛座"/當(dāng)前選中的要游戲圖像StringgamingImage=""/正在游戲的圖像booleanstartGame=false;intsquareNumber=3;intlevel=1;/游戲等級(jí)intsquareSize=80;ImagesourceImage;/游戲圖像的來(lái)源圖像ImagespaceSourceImage;空格圖像的來(lái)源圖像Ima
7、gespaceImage;ImagemyImage;/存儲(chǔ)打亂的圖像的數(shù)組Graphics2Dggg;/*/*顯示在界面上的一些組件*/*/TextFieldtfx;TextFieldtfy;MenuBarmnbMyMenuBar;MenumnChooseLevel;MenuItemmniLevell,mniLevel2;LabellbStep;顯示所走的步數(shù)LabellbSuccess=newLabel("");ButtonbtnStartGame;ChoicechChoiceImage;publicMobanFrame()super("魔板游戲");
8、pointMove=newPoint4;方塊可以移動(dòng)的四個(gè)方向pointMove0=newPoint(-1,0);pointMove1=newPoint(1,0);pointMove2=newPoint(0,-1);pointMove3=newPoint(0,1);setLayout(newFlowLayout();chChoicelmage=newChoice();chChoicelmage.add('金牛座");chChoicelmage.add('邁克爾喬丹");chChoicelmage.add('多啦a夢(mèng)");chChoicelm
9、age.add('射手座");chChoicelmage.add('功夫熊貓");chChoicelmage.add('蠟筆小新");chChoicelmage.add('柯南");chChoicelmage.add('小狗");chChoicelmage.add('小狗2");chChoicelmage.add('小貓");chChoicelmage.add("Baby");chChoicelmage.add('數(shù)字");mniL
10、evel1=newMenultem("簡(jiǎn)單");mniLevel2=newMenultem("困難");mnChooseLevel=newMenu(難度");mnbMyMenuBar=newMenuBar();tfx=newTextField(8);tfy=newTextField(8);tfx.setText("0");tfy.setText("1");tfx.setVisible(false);tfy.setVisible(false);lbStep=newLabel("已走步數(shù):"
11、;+lnteger.toString(totalStep);btnStartGame=newButton("開始游戲");mnChooseLevel.add(mniLevell);mnChooseLevel.add(mniLevel2);mnbMyMenuBar.add(mnChooseLevel);this.setMenuBar(mnbMyMenuBar);add(tfx);add(tfy);add(lbSuccess);add(lbStep);add(chChoicelmage);add(btnStartGame);mniLevel1.addActionListener
12、(this);mniLevel2.addActionListener(this);btnStartGame.addActionListener(this);chChoicelmage.addltemListener(this);this.addMouseListener(this);addWindowListener(newWindowAdapter()publicvoidwindowClosing(WindowEvente)System.exit(O););ProInit();GetImage();GetRandom();setSize(800,500);setVisible(true);p
13、ublicvoidGetlmage()獲取要完成的拼圖,并將拼圖打亂mylmage=newlmagesquareNumber*squareNumber;ImageFiltercropFilte"ImageFiltercropFilter2;ImageFiltercropFilter3;Toolkittool=getToolkit();sourceImage=tool.createImage(selectedImage+".jpg");spaceSourceImage=tool.createImage("space.jpg");sourceIma
14、ge=sourceImage.getScaledInstance(squareSize*squareNumber,squareSize*squareNumber,Image.SCALE_DEFAULT);/得到一個(gè)指定大小的圖像cropFilter1=newCropImageFilter(O,0,squareSize*squareNumber,squareSize*squareNumber);四個(gè)參數(shù)分別為圖像起點(diǎn)坐標(biāo)和寬高,即CropImageFilter(intx,inty,intwidth,intheight),詳細(xì)情況請(qǐng)參考APIsourceImage=createImage(newF
15、ilteredImageSource(sourceImage.getSource(),cropFilter1);for(inti=O;ivsquareNumber*squareNumber;i+)從源圖像上按選擇的游戲難度截取相應(yīng)個(gè)數(shù)的小圖像塊cropFilter2=newCropImageFilter(i%squareNumber)*squareSize,(i/squareNumber)*squareSize,squareSize,squareSize);myImagei=createImage(newFilteredImageSource(sourceImage.getSource(),c
16、ropFilter2);cropFilter3=newCropImageFilter(O,0,squareSize,squareSize);spaceImage=createImage(newFilteredImageSource(spaceSourceImage.getSource(),cropFilter3);myImagesquareNumber*squareNumber-1=spaceImage;publicvoidProInit()ghtStartPoint.y+(squareNumber-1)*squareSize,this);position=newMobanSquaresqua
17、reNumber+2squareNumber+2;publicvoidpaint(Graphicsg)/繪制拼圖booleanshowSuccess=true;IbStep.setTextC已走步數(shù):"+lnteger.toString(totalStep);if(startGame)for(inti=1;i<squareNumber+1;i+)for(intj=1;jvsquareNumber+1;j+)g.drawlmage(positionij.Getlmage(),startPointx+(positionij.y-1)*squareSize,startPoint.y+
18、(positionij.x-1)*squareSize,this);繪制左邊打亂的方塊g.setColor(Color.cyan);for(inti=0;i<squareNumber+1;i+)g.drawLine(startPoint.x+squareSize*i,startPoint.y,startPoint.x+squareSize*i,startPoint.y+squareNumber*squareSize);g.drawLine(startPoint.x,startPointy+squareSize*i,startPointx+squareNumber*squareSize,s
19、tartPoint.y+squareSize*i);g.drawlmage(sourcelmage,rightStartPoint.x,rightStartPointy,this);/繪制右邊參照?qǐng)Dg.drawlmage(spacelmage,rightStartPoint.x+(squareNumber-1)*squareSize,rifor(inti=1;ivsquareNumber+1;i+)判斷用戶是否完成拼圖for(intj=1;jvsquareNumber+1;j+)if(positionij.GetOrder()!=(i-1)*squareNumber+(j-1)showSucc
20、ess=false;if(showSuccess)用戶完成拼圖,彈出完成對(duì)話框showSuccess=false;lbSuccess.setText恭喜您,成功完成");publicvoidGetRandom()/生成隨機(jī)數(shù),并將隨機(jī)圖像賦給每個(gè)方塊intk=squareNumber*squareNumber;booleannumExist=false;inttotal=0;for(intj=O;jvsquareNumber*squareNumber;j+)numj=-1;while(total<squareNumber*squareNumber)/生成與方塊個(gè)數(shù)相同的隨機(jī)數(shù)(
21、0.方塊個(gè)數(shù)-1)k=(int)(Math.random()*10)+(int)(Math.random()*10)%(squareNumber*squafor(intj=1;jvsquareNumber+1;j+)reNumber);for(intj=0;jvtotal;j+)if(k=numj)numExist=true;break;if(!numExist)numtotal=k;total+;numExist=false;for(inti=0;i<squareNumber+2;i+)for(intj=0;jvsquareNumber+2;j+)if(i=0|i=squareNumb
22、er+1|j=0|j=squareNumber+1)/實(shí)例化外圍方塊,這些方塊是不可見的this.positionij=newMobanSquare(i,j,-1,squareNumber*squareNumber-1);for(inti=1;ivsquareNumber+1;i+)/實(shí)例化要顯示給用戶的方塊,此些方塊可見,并可以移動(dòng)this.positionij=newMobanSquare(i,j,num(i-1)*squareNumber+j-1,squareNumber*squareNumber-1);this.positionij.Setlmage(mylmagethis.posit
23、ionij.GetOrder();publicvoidMove(intx,inty)移動(dòng)方塊intsquare_X,square_Y,order_Old,order_New;square_X=(y-1-startPoint.y)/squareSize+1;square_Y=(x-1-startPoint.x)/squareSize+1;for(inti=0;i<4;i+)if(positionsquare_X+pointMovei.xsquare_Y+pointMovei.y.arrive)/當(dāng)前方塊可以移動(dòng),即空白塊是它的鄰塊this.totalStep+;PointnewPoint=
24、newPoint(square_X+pointMovei.x,square_Y+pointMovei.y);order_Old=positionsquare_Xsquare_Y.GetOrder();order_New=positionnewPointxnewPointy.GetOrder();positionsquare_Xsquare_Y.SetOrder(order_New);positionsquare_Xsquare_Y.Setlmage(mylmageorder_New);positionnewPoint.xnewPointy.SetOrder(order_Old);positio
25、nnewPoint.xnewPointy.Setlmage(mylmageorder_Old);repaint();break;publicvoidactionPerformed(ActionEvente)if(e.getSource()=btnStartGame)II點(diǎn)擊"開始游戲按鈕"lbSuccess.setText("");totalStep=0;if(level=1)難度為簡(jiǎn)單squareNumber=3;if(level=2)II難度為困難squareNumber=4;startGame=true;gaminglmage=selectedlm
26、age;ProInit();Getlmage();GetRandom();repaint();if(e.getSource()=mniLevel1)/在,難度"菜單項(xiàng)里選擇了"簡(jiǎn)單"菜單子項(xiàng)level=1;startPoint=newPoint(110,120);II繪制左邊圖像的起始點(diǎn)rightStartPoint=newPoint(450,120);/I繪制右邊圖像的起始點(diǎn)if(e.getSource()=mniLevel2)/在,難度"菜單項(xiàng)里選擇了"困難"菜單子項(xiàng)level=2;startPoint=newPoint(40,1
27、00);/繪制左邊圖像的起始點(diǎn)rightStartPoint=newPoint(440,100);/從制右邊圖像的起始點(diǎn)publicvoiditemStateChanged(ltemEvente)處理下拉框事件的方法if(e.getltemSelectable()instanceofChoice)selectedlmage=(Choice)e.getltemSelectable().getSelectedltem();tfx.setText(selectedlmage);tfy.setText(gaminglmage);if(selectedlmage!=gaminglmage)Getlmag
28、e();startGame=false;repaint();publicvoidmouseClicked(MouseEvente)處理在圖片上點(diǎn)擊鼠標(biāo)事件的方法intclick_X,click_Y;click_X=e.getX();click_Y=e.getY();tfx.setText(Integer.toString(e.getY()-1-startPoint.x)/squareSize+1);tfy.setText(lnteger.toString(e.getX()-1-startPoint.y)/squareSize+1);if(click_X>=startPoint.x&
29、;&click_Xv=startPoint.x+squareNumber*squareSize&&click_Y>=startPoint.y&&click_Yv=startPoint.y+squareNumber*squareSize)Move(click_X,click_Y);publicvoidmouseExited(MouseEvente)publicvoidmouseEntered(MouseEvente)publicvoidmousePressed(MouseEvente)publicvoidmouseReleased(MouseEven
30、te)publicstaticvoidmain(Stringargs)newMobanFrame();MobanSquare類:importjava.awt.*;publicclassMobanSquarepublicintx,y;privateintorder;privateintnowSpaceOrder;privatebooleansquareHere;publicbooleanarrive;privateImagesquareimage;publicMobanSquare(intpx,intpy,intorder,intspaceOrder)/MobanSquare的構(gòu)造函數(shù)this.
31、x=px;this.y=py;this.order=order;this.nowSpaceOrder=spaceOrder;if(this.order=this.nowSpaceOrder)arrive=true;elsearrive=false;if(this.order=this.nowSpaceOrder|this.order=-1)squareHere=false;elsesquareHere=true;publicbooleanGetSquareHere()/得到當(dāng)前位置是否有方塊returnthis.squareHere;publicvoidSetSquareHere(booleanb)/設(shè)置當(dāng)前位置是否是方塊this.squareHere=b;publicintGetOrder()/得到當(dāng)前位置方塊上的序號(hào)returnth
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 教研成果成果轉(zhuǎn)化
- 裝修設(shè)計(jì)師的工作總結(jié)
- 房地產(chǎn)行業(yè)設(shè)計(jì)師工作總結(jié)
- 2024年爬山安全教案
- 2024年計(jì)算機(jī)應(yīng)屆生簡(jiǎn)歷
- 農(nóng)田租賃協(xié)議書(2篇)
- 2024年苯噻草胺項(xiàng)目營(yíng)銷方案
- 《贛州市國(guó)家稅務(wù)局》課件
- 烏魯木齊市實(shí)驗(yàn)學(xué)校2023-2024學(xué)年高三上學(xué)期1月月考政治試題(解析版)
- 甘肅省部分學(xué)校2025屆高三上學(xué)期第一次聯(lián)考(期末)歷史試卷(含答案解析)
- 麻醉醫(yī)學(xué)知識(shí)培訓(xùn)培訓(xùn)課件
- 人教版四年級(jí)上冊(cè)數(shù)學(xué) 第五單元《平行四邊形和梯形》單元專項(xiàng)訓(xùn)練 作圖題(含答案)
- 物業(yè)品質(zhì)督導(dǎo)述職報(bào)告
- 2024年山東濟(jì)南軌道交通集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 療愈行業(yè)現(xiàn)狀分析
- 北京海淀區(qū)2023-2024學(xué)年六年級(jí)上學(xué)期期末數(shù)學(xué)數(shù)學(xué)試卷
- 2023年安全總監(jiān)年終工作總結(jié)
- 浙江省杭州拱墅區(qū)2023-2024學(xué)年六年級(jí)上學(xué)期期末語(yǔ)文試題
- 以消費(fèi)者為中心:提升營(yíng)銷效果的技巧
- 部編版四年級(jí)道德與法治上冊(cè)期末復(fù)習(xí)計(jì)劃
- 獸用疫苗管理制度
評(píng)論
0/150
提交評(píng)論