

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
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)完成人所在班級指導(dǎo)教師完成日期2009年11月30日一、實(shí)驗(yàn)報(bào)告簡表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、測試游戲及輸出結(jié)果六、體會與總結(jié)24實(shí)驗(yàn)報(bào)告正文.實(shí)驗(yàn)報(bào)告簡表實(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)小組組長指導(dǎo)教師參與實(shí)驗(yàn)人員及其在實(shí)驗(yàn)課題中
2、承擔(dān)的主要任務(wù)(包括組長)學(xué)號小組成員姓名班級在實(shí)驗(yàn)課題中的主要作用.設(shè)計(jì)內(nèi)容與要求1設(shè)計(jì)內(nèi)容:用面向?qū)ο蟮腏ava程序設(shè)計(jì)語言開發(fā)設(shè)計(jì)GUI界面的魔板游戲程序。2、設(shè)計(jì)要求:(1)、魔板由3*3或4*4的方格組成,其中一個(gè)格子是空的。對于3*3的魔板,其他格子里隨機(jī)放置8個(gè)編號為0-7的方塊;對于4*4的魔板,其他格子里隨即放置15個(gè)編號為0-14的方塊,如果是n*n的方格原理相同。(2)、用鼠標(biāo)單擊任何與格子相鄰的方塊可以把該方塊移入空格子。通過不斷地移動方塊,可以將方塊一行一行按數(shù)字順序依次排序。(3)、魔板游戲也可以使用圖像來代替數(shù)字,對于3*3的魔板,將圖像分成3*3個(gè)方塊,打亂順序
3、后,放入魔板,并將其中一個(gè)方格置為空。最終目標(biāo)是通過移動方塊來恢復(fù)為原始圖像。4*4的魔板與3*3的方法相似。三. 總體設(shè)計(jì)1、需求分析:魔板游戲就是大家以前常玩的拼板游戲!就是將一幅完整的圖片分成小塊,打亂順序,再拼好,并且只能將圖塊和臨界的空格交換位置。用最短的時(shí)間和最省的步驟將圖形拼好,此玩法雖然簡單,但特別考驗(yàn)智力,魔板游戲與魔方游戲相似屬于益智游戲。此項(xiàng)目我們需要通過面向?qū)ο蟮腏ava程序設(shè)計(jì)來實(shí)現(xiàn),游戲設(shè)計(jì)中需要用到GUI圖形界面的設(shè)計(jì),產(chǎn)生隨機(jī)數(shù)生成打亂的圖片,各種事件(動作事件、鼠標(biāo)事件和窗口事件等)的響應(yīng)和處理等面向?qū)ο蟮闹R來實(shí)現(xiàn)游戲的各項(xiàng)功能。2、功能描述:我們所完成的魔
4、板游戲可以實(shí)現(xiàn)基本的魔板游戲的功能。此項(xiàng)目魔板游戲可由用戶選擇3*3和4*4兩個(gè)不同難度,N*N的魔板游戲原理與此相同,游戲可以通過下拉列表實(shí)現(xiàn)選擇不同的游戲圖像,增加游戲的趣味性。點(diǎn)擊“開始游戲”按鈕后可以實(shí)現(xiàn)游戲步驟的計(jì)數(shù),拼圖右邊有一個(gè)完整的圖像可以供用戶參照,用鼠標(biāo)單擊任何與格子相鄰的方塊可以把該方塊移入空格子。通過不斷地移動方塊,可以將方塊一行一行按數(shù)字或圖片依次拼圖。若成功完成拼圖(即左邊的拼圖與右邊的參照圖像一樣),則有提示:“恭喜您,成功完成”的字樣出現(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;/存儲隨機(jī)數(shù)的數(shù)組PointpointMove;inttotalStep=0;/總共已走的步數(shù)Stringselectedlmage='金牛座"/當(dāng)前選中的要游戲圖像StringgamingImage=""/正在游戲的圖像booleanstartGame=false;intsquareNumber=3;intlevel=1;/游戲等級intsquareSize=80;ImagesourceImage;/游戲圖像的來源圖像ImagespaceSourceImage;空格圖像的來源圖像Ima
7、gespaceImage;ImagemyImage;/存儲打亂的圖像的數(shù)組Graphics2Dggg;/*/*顯示在界面上的一些組件*/*/TextFieldtfx;TextFieldtfy;MenuBarmnbMyMenuBar;MenumnChooseLevel;MenuItemmniLevell,mniLevel2;LabellbStep;顯示所走的步數(shù)LabellbSuccess=newLabel("");ButtonbtnStartGame;ChoicechChoiceImage;publicMobanFrame()super("魔板游戲");
8、pointMove=newPoint4;方塊可以移動的四個(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夢");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("簡單");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ì)情況請參考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);/繪制右邊參照圖g.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)用戶完成拼圖,彈出完成對話框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í)例化要顯示給用戶的方塊,此些方塊可見,并可以移動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)移動方塊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)前方塊可以移動,即空白塊是它的鄰塊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)難度為簡單squareNumber=3;if(level=2)II難度為困難squareNumber=4;startGame=true;gaminglmage=selectedlm
26、age;ProInit();Getlmage();GetRandom();repaint();if(e.getSource()=mniLevel1)/在,難度"菜單項(xiàng)里選擇了"簡單"菜單子項(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)前位置方塊上的序號returnth
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 租賃商場場地合同
- 公司員工激勵演講稿
- 養(yǎng)老護(hù)理行業(yè)老年人照護(hù)需求評估
- 肉羊養(yǎng)殖購銷合同
- 生物醫(yī)藥領(lǐng)域新藥研發(fā)投資合同
- 有關(guān)個(gè)人向公司借款協(xié)議書
- 城市道路施工安全管理規(guī)定
- 好品質(zhì)故事解讀
- 電影制作公司演員拍攝安全協(xié)議
- 2025年漢語拼音yw助力企業(yè)營銷策略分析
- 胸膜疾病課件
- 公路施工技術(shù)全套課件
- 胸痹心痛中醫(yī)診療方案及臨床路徑
- 泛讀2unit2-music
- 中學(xué)生防溺水安全教育課件(PPT 44頁)
- 2019版外研社高中英語選擇性必修二Unit 1 Growing up 單詞表
- 重慶危險(xiǎn)性較大的分部分項(xiàng)工程安全管理實(shí)施細(xì)則
- 三菱 PLC FX2N-4AD 4DA 模擬量模塊教材(課堂PPT)
- 有機(jī)金屬化學(xué)1
- JIT標(biāo)準(zhǔn)作業(yè)作業(yè)指導(dǎo)書
- 安徽省2020-2021學(xué)年七年級語文下學(xué)期期末測試卷[含答案]
評論
0/150
提交評論