2048小游戲java課程設(shè)計(jì)報(bào)告書_第1頁
2048小游戲java課程設(shè)計(jì)報(bào)告書_第2頁
2048小游戲java課程設(shè)計(jì)報(bào)告書_第3頁
2048小游戲java課程設(shè)計(jì)報(bào)告書_第4頁
2048小游戲java課程設(shè)計(jì)報(bào)告書_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

《JAVA語言程序設(shè)計(jì)》課程設(shè)計(jì)報(bào)告2048智力小游戲設(shè)計(jì)專業(yè)班級(jí):計(jì)算機(jī)科學(xué)與技術(shù)嵌入13T學(xué)生姓名:卓海有學(xué)生學(xué)號(hào):小組成員:單建飛堵文斐李棟承梅孔偉指導(dǎo)教師姓名:宋強(qiáng)目錄TOC\o"1-5"\h\z1?前言 1游戲需求分析 1\o"CurrentDocument"需求分析 1\o"CurrentDocument"可行性分析 2概要設(shè)計(jì) 3詳細(xì)設(shè)計(jì) 4流程圖 4\o"CurrentDocument"界面的整體布局 4方法模塊分析 5\o"CurrentDocument"測試 8總結(jié) 10\o"CurrentDocument"參考文獻(xiàn) 10部分源代碼: 10一、前言最近以來,移動(dòng)手游越來越成為當(dāng)下游戲產(chǎn)業(yè)中重要的一環(huán),市場也在加大對這一產(chǎn)業(yè)的投入,涌現(xiàn)出了憤怒的小鳥,水果忍者,flappybird,2048等諸多優(yōu)秀的手游,然而任何一款手游能夠風(fēng)靡,主要還是依靠其簡單的操作性,因此本次java課設(shè)我選擇其中的典型2048PC版作為本次課設(shè)的課題。2048游戲規(guī)則很簡單,玩家每次可以選擇上下左右其中一個(gè)方向去移動(dòng),每移動(dòng)一次,所有的數(shù)字方塊都會(huì)往移動(dòng)的方向靠攏外,系統(tǒng)也會(huì)在空白的地方隨機(jī)出現(xiàn)一個(gè)數(shù)字方塊,相同數(shù)字的方塊在靠攏、相撞時(shí)會(huì)相加。系統(tǒng)給予的數(shù)字方塊不是2就是4,玩家要想辦法在這小小的16格范圍中湊出“2048”這個(gè)數(shù)字方塊。二、游戲需求分析需求分析現(xiàn)代社會(huì)對休閑小游戲的需求是:提高游戲的操作可行性,降低游戲的操作難度,降低游戲的上手難度,降低游戲的競爭需求,對使用設(shè)備的要求趨于簡單化和多樣化,游戲界面更加人性化,功能更加貼合使用。界面一款的好的游戲其界面必須友好,簡潔已經(jīng)成為當(dāng)今UI設(shè)計(jì)的主流,簡單易上手才能得到玩家的青睞。功能需求能夠顯示游戲的當(dāng)前得得分,并記錄游戲的最高分并顯示,當(dāng)在次打開游戲時(shí),能夠顯示最高分;在游戲進(jìn)行的過程中循環(huán)播放音樂,并能夠關(guān)閉音樂或者打開音樂;游戲的主界面上,相同的數(shù)字要顯示相同的顏色。游戲結(jié)束要有相應(yīng)的提示。游戲的主要目的是通過上下左右移動(dòng)來將相鄰相同的數(shù)字相加,通過不斷地累加最終加到2048o操作性需求游戲的體驗(yàn)是衡量一款游戲的關(guān)鍵,本游戲可通過鍵盤w,s,a,d以及方向鍵來控制方塊的移動(dòng),還可以通過在游戲的主面板中向上下左右拖動(dòng)鼠標(biāo)來控制方塊的移動(dòng),左右手都可以操作,充分考慮便捷性。不同的人有不一樣習(xí)慣,通過多種方式來操作游戲,可以各種習(xí)慣的人的需求??尚行苑治雒嫦?qū)ο蟮某绦蛟O(shè)計(jì)方法Java而向?qū)ο蟪绦蛟O(shè)計(jì)的基本思想是通過構(gòu)造和組織對象來求解問題的。對象是很好理解的,任何一種物體都可以被認(rèn)為是對象,例如,汽車就是一種對象。對象具有兩個(gè)最懇本的屬性:具有一定的物質(zhì)基礎(chǔ)和一定的功能,這兩種基本屬性在Java語言中表現(xiàn)為擁有一定的存儲(chǔ)單元并具備一定的功能。理解了Java的這種面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思想之在以E的編程過程中,就應(yīng)當(dāng)個(gè)構(gòu)造人們?nèi)菀桌斫獾母咏谡鎸?shí)物理世界物體的對象。Java面向?qū)ο蟪绦蛟O(shè)計(jì)的過程非常簡單。這里介紹一種自頂向下的程序設(shè)計(jì)方法,首先構(gòu)造一個(gè)類來處理需要解決的問題,然后根據(jù)已經(jīng)擁有的類(例如以前求解其它問題時(shí)實(shí)現(xiàn)的類),分析和構(gòu)造新的類,設(shè)法將問題分解下去,而最開始構(gòu)造的類通過組織這些新構(gòu)造的類、已有的類及由他們生成的實(shí)例來求解指定的問題。這個(gè)過程可以繼續(xù)遞歸下去,用在新構(gòu)造的類上,直到最后解決了指定的問題,例如Java的應(yīng)用程序和小應(yīng)用程序都必須有一個(gè)類作為入口求解問題。在計(jì)算機(jī)語言中,而向?qū)ο蟮念愐话憔哂腥齻€(gè)基本特性:封裝性、繼承性和多態(tài)性,這三種特性進(jìn)一步簡化了Java求解模型,提高了程序的復(fù)用性,節(jié)省了程序的代碼量,從而提高了軟件的生產(chǎn)率。java技術(shù)分析圖形用戶界面不僅可以提供各種數(shù)據(jù)的基本圖形的直觀表示形式,而且可以建立友好的交互方式,從而使計(jì)算機(jī)軟件可以設(shè)計(jì)得十分簡單易用。從Java語言誕生到現(xiàn)在,Java語言已經(jīng)提供了兩代圖形用戶界面。第一代圖形用戶界面AWT提供了基本的圖形用戶界面,它強(qiáng)烈地依賴于具體的計(jì)算機(jī)操作系統(tǒng),而且缺少基本的剪貼板和打印支持功能?,F(xiàn)在第二代圖形用戶界而Swing對AWT進(jìn)行了擴(kuò)展,Swing不僅在功能上比AWT強(qiáng)大,而且在很大程度上克服了AWT的上述缺點(diǎn),它所設(shè)計(jì)的圖形用戶界面與具體的計(jì)算機(jī)操作相關(guān)性很小,而且可以定制指定的操作系統(tǒng)風(fēng)格的圖形用戶界面。GUI(圖形用戶界面)組件構(gòu)成了圖形用戶界面的基礎(chǔ)。在Java程序設(shè)計(jì)中,要求按照一定的布局方式將組件安排在容器中,然后通過事件處理的方式實(shí)現(xiàn)人機(jī)交互,而容器本身也是組件,這樣在容器中也可以含有容器,從而可以通過這種嵌套方式方便地組合各種組件。事件處理模型是Java語言提供的一種人機(jī)交互模型,它使得用戶能夠通過鼠標(biāo)、鍵盤或其他輸入設(shè)備來控制程序的執(zhí)行流程,從而達(dá)到人機(jī)交互的目的。對鼠標(biāo)、鍵盤或其他輸入設(shè)備的各種操作一般也稱為事件。Java語言對這些事件的處理模型是采用面向?qū)ο蟮姆椒?,即通過對象的形式把各種事件進(jìn)行封裝和處理。這種事件處理模型的三個(gè)基本要素是事件源、事件對象以及事件監(jiān)聽器。事件源是各種組件,是接受各種事件的對象。在各種事件源上運(yùn)用鼠標(biāo)、鍵盤或其他輸入設(shè)備進(jìn)行各種操作,就會(huì)有事件發(fā)生。每種操作一般都對應(yīng)著事件,Java語言通過事件對象來包裝這些事件。對爭件進(jìn)行處理是通過事件監(jiān)聽器實(shí)現(xiàn)的。因?yàn)槭髽?biāo)事件也是一種事件,所以對鼠標(biāo)事件進(jìn)行處理要遵循事件處理模型。鼠標(biāo)事件的處理也是建立在事件源的基礎(chǔ)之上,以事件對象本身,最后通過事件監(jiān)聽器進(jìn)行處理。類包裝常用的鼠標(biāo)事件,例如,按下鼠標(biāo)鍵和放開鼠標(biāo)鍵等。類MouseEvent的實(shí)例對象記錄了鼠標(biāo)的當(dāng)前位置和狀態(tài)發(fā)生變化的鼠標(biāo)鍵等。對鼠標(biāo)事件進(jìn)行處理最關(guān)鍵的是實(shí)現(xiàn)事件監(jiān)聽器接口。這些相關(guān)接口包括MouseListener, MouseMotionListener, MouseWheeIListener,MouseInputListener。前而三個(gè)是包中的接口,最后一個(gè)接口MouseInputIistener來自包。接口主要用來處理按下鼠標(biāo)鍵、放開鼠標(biāo)鍵、單擊鼠標(biāo)鍵、鼠標(biāo)進(jìn)入組件內(nèi)和鼠標(biāo)離開組件區(qū)域等事件。對鼠標(biāo)事件進(jìn)行處理,就是要設(shè)計(jì)類,實(shí)現(xiàn)上面的鼠標(biāo)事件監(jiān)聽器接口,然E在事件源中注冊處理鼠標(biāo)事件監(jiān)聽器的對象,以便對鼠標(biāo)事件進(jìn)行處理。三、概要設(shè)計(jì)

四、詳細(xì)設(shè)計(jì)(1)流程圖主程序游戲開始顯示界面▼監(jiān)聽總苕和恫標(biāo)的上下移動(dòng)操作和2鏗,并作相應(yīng)的處理對界面上的按鈕的監(jiān)聽.并作相應(yīng)的處理是,界面的整體布局分別構(gòu)建mainPane,scoresPane兩大模塊放入游戲窗體,其中scoresPane包含2048字樣的提示,當(dāng)前得分和最高分,當(dāng)?shù)梅殖^最高分時(shí)■,將得分存入工程文件夾下的,覆蓋最高分,同時(shí)在最高分顯示最新的內(nèi)容。通過Create方法隨機(jī)產(chǎn)生2號(hào)方塊或者4號(hào)方塊,通過setColor方法設(shè)置每個(gè)數(shù)字代表的方塊顏色。方法模塊分析方法1:設(shè)置標(biāo)簽顏色,每次隨機(jī)產(chǎn)生2或4和數(shù)字合并之后就要調(diào)用該方法來設(shè)置標(biāo)簽的顏色publicvoidsetColor(inti,intjtStringstr){if(,,H.equals(str)){texts[i][j].setBackground(newColor(120,2219247));return;)irrtresult=(str);switch(result){case2:texts[i][j].setBackground(newCoIor(240,240,0));break;case4:texts[i][j].setBackground;break;case8:texts[i][j].setBackground(newColor(240,150,10));break;case16:texts[i][j]?setBackground;break;case32:texts[i][j]?setBackground;break;case64:texts[i][j].setBackground(newColor(155,10,190));break;case128:texts[i][j].setBackground;break;case256:texts[i][j].setBackground;break;case512:texts[i][j]?setBackground;break;case1024:texts[i][j].setBackground;break;case2048:texts[i][j]?setBackground;break;case4096:texts[i][j].setBackground;break;defauIt:break;))方法2:在隨機(jī)位置產(chǎn)生一個(gè)2號(hào)或4號(hào)方塊的方法,同時(shí)該方法也用于判斷游戲是否結(jié)束。publicvoidCreate0{inti,j;etText();if((”")==0)){intima=2*(int)(1+0*2);etText(imass);setColor(i,j,imass);times—;r=false;p1=p2=p3=p4=0;quaIs(texts[p][q].getText()))temp2[p][q]=0;elsetemp2[p][q]=(texts[p][q].getText0);)}tempiscores=temp2scores;temp2scores=scores;}elseif(p1>0&&p2>0&&p3>0&&p4>0)工業(yè)出版社…黃曉東.Java課程設(shè)計(jì)案例精編[M].北京:中國水利水電出版社,.求是科技.Java信息管理系統(tǒng)開發(fā)實(shí)例字航[M].北京:人民郵電出版社…源代碼清單packagemy2048game;import?*;import?*;import?*;import?*;pubIicclassMy2048GameextendsJFrame{equestFocus();}pg"));(433,120,45,30);(jb1);etFont(font2);texts[i][j]?setHorizontalAIignment;etText(;texts[i][j].setBounds(110 * j+15, 110 * i+15, 100,100);et0paque(true);etBorder(2,2,2,quaIs(texts[i][j].getText()))temp1[i][j]=temp2[i][j]=0;elsetempi[i][j]=temp2[i][j]=(texts[i][j].getText());}}}quaIs(str)){texts[i][j].setBackground(newColor(120,221,247));return;}intresult=(str);switch(resuIt){case2:texts[i][j].setBackground(newColor(240,240,0));break;case4:texts[i][j].setBackground;break;case8:texts[i][j].setBackground(newColor(240,150,10));break;case16:texts[i][j].setBackground;break;case32:texts[i][j]?setBackground;break;case64:texts[i][j].setBackground(newColor(155,10,190));break;case128:texts[i][j]?setBackground;break;case256:texts[i][j]?setBackground;break;case512:texts[i][j].setBackground;break;case1024:texts[i][j].setBackground;break;case2048:texts[i][j].setBackground;break;case4096:texts[i][j].setBackground;break;defauIt:break;1etText()jetText()jetText(str);etText(MM);etText(str);etText("n);etText();str1=texts[i][j+1].getText();if("”)==0){if(,,H)!=0)biaoji=1;texts[i][j+1].setText(str);setColor(i,j+1,str);texts[i][j].setText(HM);setColor(i,j,””);}elseif(str1)=0&&j!=a&&j匸a+1){

num=(str);scores+=num;times++;str=(2*num);11texts[i][j+1].setText(str);setColor(i,j+1,str);texts[i][j].setText(”H);setColor(i,j,a=j;biaoji=1;}p2=1;Create();break;case:case:biaoji=0;for(intj=0;j<4;j++){a=5;for(intk=0;k<3;k++){for(inti=1;i<4;i++){str=texts[i][j].getText0;str1=texts[i-1][j].getText();if("”)==0){if(,,M)!=0)biaoji=1;texts[i-1][j].setText(str);setColor(i-1,j,str);texts[i][j].setText(MM);setColor(i,j,MM);}elseif(str1)=0&&i!=a&&i!二a-1){

num=(str);scores+=num;times++;str=(2*num);texts[i-1][j].setText(str);setColor(i-1,j,str);texts[i][j].setText(”n);setColor(i,j,””);a=i;biaoji=1;p3=1;Create();break;case:case:biaoji=0;for(intj=0;j<4;j++){a=5;for(intk=0;k<5;k++){for(inti=2;i>=0;i―){

str=texts[i][j].getText();str1=texts[i+1][j].getText();if("”)==0){if(,,n)!=0)biaoji=1;texts[i+1][j].setText(str);setColor(i+1,j,str);texts[i][j].setText('*n);setColor(i,j,"”);}elseif(str1)=0&&i!=a&&i匸a+1){num=(str);scores+=num;times++;str=(2?num);texts[i+11[j].setText(str);setColor(i+1,j,str);texts[i][j].setText('*H);setColor(i,j,MM);a=i;biaoji=1;}}}}p4=1;Create();break;case:if(p1<=0||p2<=0||p3<=0||p4<=0){for(inti=0;i<4;++i){for(intj=0;j<4;++j){if(tempi[i][j]==0)texts[i][j].setText(M'*);elsetexts[i][j].setText((tempi[i][j]));11temp2[i][j]=tempi[i][j];setColor(i,j,texts[i][j].getText());scores=tempiscores;temp2scores=temp1scores;}break;default:break;}if(maxscores<=scores){maxscores二scores;(maxscores);0;}(N<htmI>SCORE<br>,?+(scores)+"</html>M);(H<htmI>BEST<br>"+(maxscores)+H</htmI>");etText();etText();etText(str);etText('*n);etText(str);etText(H'*);etText();str1=texts[i][j+1].getText();if("")==0){ifC,H)!=0)biaoji=1;texts[i][j+1].setText(str);setColor(i,j+1,str);texts[i][j].setText(HH);setColor(i,j,}elseif(str1)=0&&j!=a&&j!二a+1){num=(str);scores+=num;times++;str=(2*num);texts[i][j+1].setText(str);setColor(i,j+1,str);texts[i][j].setText(HH);setColor(i,j,MM);a=j;biaoji=1;p2=1;Create();break;case3:biaoji=0;for(intj=0;j<4;j++){a=5;for(intk=0;k<3;k++){for(inti二1;i<4;i++){str=texts[i][j].getText0;str1=texts[i-1][j].getText();if("”)==0){if(,,H)!=0)biaoji=1;texts[i-1][j].setText(str);setColor(i-1,j,str);texts[i][j].setText('*n);setColor(i,j,””);}elseif(str1)=0&&i!=a&&i匸a-1){num=(str);scores+=num;times++;str=(2*num);texts[i-11[j].setText(str);setColor(i-1,j,str);texts[i][j].setText('*H);setColor(i,j,"”);a=i;biaoji=1;}p3=1;Create();break;case4:biaoji=0;for(intj=0;j<4;j++){a=5;for(intk=0;k<5;k++){for(inti=2;i>=0;i—){str=texts[i][j].getText0;str1=texts[i+1][j].getText();if("”)==0){if(,,H)!=0)biaoji=1;texts[i+1][j].setText(str);setColor(i+1,j,str);texts[i][j].setText(MM);setColor(i,j,"n);}elseif(str1)=0&&i!二a&&i匸a+1){

num=(str);scores+=num;times++;str=(2*num);texts[i+1][j].setText(str);setColor(i+1,j,str);texts[i][j].setText(”n);setColor(i,j,””);a=i;biaoji=1;}}}}p4=1;Create();break;defauIt:break;}if(maxscores<=scores){maxscores二scores;(maxscores);0;}(XhtmI>SC0RE<br>n+(scores)+M</htmI”);(n<htmI>BEST<br>"+(maxscores)+n</htmI>");etText();if(("")==0)){intima=2*(int)(1+0*2);etText(imass);setColor(i,j,imass);times—;r=false;p1=p2=p3=p4=0;

quaIs(texts[p][q].getText()))temp2[p][q]=0;elsetemp2[p][q]=(texts[p][q].getText());}}temp1scores=temp2scores;temp2scores=scores;}elseif(p1>0&&p2>0&&p3>0&&p4>0){qualsC'shengyin")){if(jb1_flag2){setJb1_flag(false);jb1_fIag2=false;(nev/ImageIcon("src/靜音圖標(biāo).jpg'));(faIse);pg"));(faIse);//讓按鈕失去焦點(diǎn)}(false);//設(shè)置焦點(diǎn),不能用請求焦點(diǎn)}}}//記錄類classRecorder{//定義一個(gè)變量記錄最商分privatestaticintmaxscores_2048=0;pubIicstaticintgetMaxscores_2048(){returnmaxscores_2048;}pubIicstaticvoidsetMaxscores_2048(intmaxscores_2048){=maxscores_2048;}//定義文件輸入流變量privateprivateprivatestaticFiIeReaderfr=nuII;privateprivateprivatestaticBufferedReaderbr=nuII;staticFiIeV/riterfw=null;privatestaticBufferedWriterbw=nuII;//從文件中讀取,記錄pubIicstaticvoidgetRecording()booleanflag=faIse;//用于判斷文件是否是新創(chuàng)建的try{Filef=newFileCsrc/");ifO)fr=newFiIeReader(f);br=newBufferedReader(fr);Stringn=();maxscores_2048=(n);elsefIag=();}}catch(Exceptione){//TODO:handleexception0;}finalI

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論