版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
《JAVA語言程序設(shè)計》2048智力小游戲設(shè)計1、前言.................................................12、游戲需求分析.........................................12、1需求分析.........................................12、2可行性分析.......................................23、概要設(shè)計.............................................34、詳細設(shè)計.............................................44、1流程圖...........................................45、測試.................................................86、總結(jié)................................................106、參考文獻............................................107、部分源代碼:.........................................10前言最近以來,移動手游越來越成為當下游戲產(chǎn)業(yè)中重要的一環(huán),市場也在加大秀的手游,然而任何一款手游能夠風(fēng)靡,主要還就是依靠其簡單的操作性,因此本2048游戲規(guī)則很簡單,玩家每次可以選擇上下左右其中一個方向去移動每移動一次,所有的數(shù)字方塊都會往移動的方向靠攏外,系統(tǒng)也會在空白的地方隨機出現(xiàn)一個數(shù)字方塊,相同數(shù)字的方塊在靠攏、相撞時會相加。系統(tǒng)給予的數(shù)字方塊。分析21:,,,單化與多樣化,游戲界面更加人性化能更加貼合使用。(1)界面一款的好的游戲其界面必須友好,簡潔已經(jīng)成為當今UI設(shè)計的主流,簡上手才能得到玩家的青睞。(2)功能需求能夠顯示游戲的當前得得分,并記錄游戲的最高分并顯示,當在次打開游戲時,能夠顯示最高分;在游戲進行的過程中循環(huán)播放音樂,并能夠關(guān)閉音樂;束要相加,通過不斷地累加最終加到2048(3)操作性需求游戲的體驗就是衡量一款游戲的關(guān)鍵,本游戲可通過鍵盤w,s,a,d以及方向鍵來控制方塊的移動,還可以通過在游戲的主面板中向上下左右拖動鼠標來控制方塊的移動,左右手都可以操作,充分考慮便捷性。不同的人有不一樣習(xí)慣,通過多種方式來操作游戲以各種習(xí)慣的人的需求。22(1)象的程序設(shè)計方法Java面向?qū)ο蟪绦蛟O(shè)計的基本思想就是通過構(gòu)造與組織對象來求解問題的。對象就是很好理解的,任何一種物體都可以被認為就是對象,例如,汽車就:能,這兩種基本屬性在Java語言中表現(xiàn)為擁有一定的存儲單元并具備一定的功能。理解了Java的這種面向?qū)ο蟪绦蛟O(shè)計的基本思想之后,在以后的編程過程中,當個構(gòu)造人們?nèi)菀桌斫獾母咏谡鎸嵨锢硎澜缥矬w的對象。設(shè)計方法,首先構(gòu)造一個類來處理需要解決的問題,然后根據(jù)已經(jīng)擁有的類(例來求解指定的問題。這個過程可以繼續(xù)遞歸下去,用在新構(gòu)造的類上,直到最后解決了指定的問題,例如Java的應(yīng)用程序與小應(yīng)用程序都必須有一個類作口求解問題。在計算機語言中,面向?qū)ο蟮念愐话憔哂腥齻€基本特性:封裝性、繼承性與多態(tài)性,這三種特性進一步簡化了Java求解模型,提高了程序的復(fù)用性,節(jié)省了程序的代碼量,提高了軟件的生產(chǎn)率。(2)java圖形用戶界面不僅可以提供各種數(shù)據(jù)的基本圖形的直觀表示形式,而且可以建立友好的交互方式,從而使計算機軟件可以設(shè)計得十分簡單易用。從,系統(tǒng),而且缺少基本的剪貼板與打印支持功能?,F(xiàn)在第二代圖形用戶界面Swing對AWT進行了擴展,Swing不僅在功能上比AWT強大,而且在很大程相關(guān)性很小,可以定制指定的操作系統(tǒng)風(fēng)格的圖形用戶界面。GUI(圖形用戶界面)組件構(gòu)成了圖形用戶界面的基礎(chǔ)。在Java程序設(shè)計中,要求按照一定的布局方式將組件安排在容器中,然后通過事件處理的方式實現(xiàn)人機交互,而容器本身也就是組件,這樣在容器中也可以含有容器,從而可這種嵌套方式方便地組合各種組件。事件處理模型就是Java語言提供的一種人機交互模型,它使得用戶能夠Java對這些事件的處理模型就是采用面向?qū)ο蟮姆椒?即通過對象的形式把各種事件進行封裝與處理。這種事件處理模型的三個基本要素就是事件源、事件種事件源上運用鼠標、鍵盤或其她輸入設(shè)備進行各種操作有事件發(fā)生。處理就是通過事件監(jiān)聽器實現(xiàn)的。因為鼠標事件也就是一種事件,所以對鼠標事件進行處理要遵循事件處理模型。鼠標事件的處理也就是建立在事件源的基礎(chǔ)之上,以事件對象本身,通過事件監(jiān)聽器進行處理。,與放開鼠標鍵等。類MouseEvent的實例對象記錄了鼠標的當前位置與狀態(tài)口 。 這 些 相 關(guān) 接 口 包 。,來自包javaxswing、event。鍵、單擊鼠標鍵、鼠標進入組件內(nèi)與鼠標離開組件區(qū)域等事件。對鼠標事件進行處理,就就是要設(shè)計類,實現(xiàn)上面的鼠標事件監(jiān)聽器接口,然后在事件源中注冊處理鼠標事件監(jiān)聽器的對象,便對鼠標事件進行處理。(1)流程圖(2)界面的整體布局數(shù)字代表的方塊顏色。(3)方法模塊分析來設(shè)置標簽的顏色publicvoidsetColor(inti,intj,Stringstr){if(""、equals(str)){texts、setBackground(Color(120,221,247));return;
result=Integer、parseInt(str);switch(result){case2:texts[i][j]、setBackground(newColor(240,240,0));break;case4:texts[i][j]、setBackground(Color、pink);break;case8:texts[i][j]、setBackground(newColor(240,150,10));break;case16:texts[i][j]、setBackground(Color、green);break;case32:texts[i][j]、setBackground(Color、magenta);break;case64:texts[i][j]、setBackground(newColor(155,10,190));break;case128:texts[i][j]、setBackground(Color、blue);break;case256:texts[i][j]、setBackground(Color、gray);break;case512:texts[i][j]、setBackground(Color、cyan);break;case1024:texts[i][j]、setBackground(Color、DARK_GRAY);break;case2048:texts[i][j]、setBackground(Color、red);break;case4096:texts[i][j]、setBackground(Color、white);break;default:break;游戲就是否結(jié)束。publicvoidCreate(){inti,j;//用于記錄產(chǎn)生的二維方陣的下標值booleanr=true;if(times>0&&biaoji==1){while(r){i=random、nextInt(4);j=random、nextInt(4);str=texts[i][j]、getText();if((str、compareTo("")==0)){intima=2*(int)(1+Math、random()*2);//隨機產(chǎn)Stringimass=String、valueOf(ima);texts、Text(imass);setColor(i,j,imass);timesr=false;p1=p2=p3=p4=0;//前的狀態(tài)for(intp=0;p<4;++p){for(intq=0;q<4;++q){temp1[p][q]=temp2[p][q];if(""、equals(texts[p][q]、getText()))temp2[p][q]=elsetemp2[p][q]=Integer、parseInt(texts[p][q]、temp1scores=temp2scores;temp2scores=scores;elseif(p1>0&&p2>0&&p3>0&&p4>0)//到l41說明任何方向鍵都不能產(chǎn)生新的數(shù)字tips、setText("游戲結(jié)束!");currentScores、setText("<html>SCORE<br>"+String、valueOf(scores)+"</html>"JOptionPaneshowMessageDialognull"游戲結(jié)束!"Systemexit);;方法3:通過鼠標左鍵的按下與釋放來判斷向那個方向拖動,拖動實現(xiàn)主要就是通過記錄按下鼠標左鍵時鼠標指針的位置,然后在記錄鼠標左鍵釋放的方向,在將獲得的方向值傳到do_label_keyPressed(int)函數(shù)中,從而達動的目的。publicvoidmousePressed(MouseEvente){//TODOAuto-generatedmethodstub按下(e、、、640)、=e);thisy1、tY();out"X="、"++epublicvoidmouseReleased(MouseEvente){//TODOAuto-generatedmethodstub釋放//若鼠標位置在灰色區(qū)域內(nèi)并且按下鼠標的位置不為相應(yīng)的處理if(e、getX()>=20&&e、getX()<=480&&e、getY()>=180&&e、getY()<=640&&this、x1!=0&&thisy1=0)thisx2、tX();this、y2=e、etY();if(()&&((-)>Math、abs-y1option//向向左Systemprintln(}if((x1<x2)&&((x2-x1)>Math、abs(y2-y1)))option//向向右Systemprintln(}if((y1>y2)&&((y1-y2)>Math、abs(x1-x2)))option//向向上Systemprintln(}if((y1<y2)&&((y2-y1)>Math、abs(x1-x2)))option//向向下Systemoutprintln(向下方向移動this、y2do_label_keyPressed(option);方法4:從文件中讀取,記錄。從文件中讀取記錄,同時也要將新的數(shù)據(jù),,文件不存在,這時不僅不能從文件中讀數(shù)據(jù),還要創(chuàng)建相應(yīng)的文件。創(chuàng)建文件之后,接下來在運行程序就能讀取到數(shù)據(jù)。文件讀取結(jié)束要將文閉。publicstaticvoidgetRecording()flag=//newFile("src/myRecording、txt");(f())=newbrnewBufferedReader();Stringn=br、readLine();maxscores_2048、parseInt);}、ewFile();}catch(Exceptione){//TODO:handleexception);},g));}catch(Exceptione2){//TODO:handleexceptione();(1)首次運行程序(在工程文件中建立保存最高分的文件再次運行程序(2)結(jié)束在這次的課程設(shè)計中不僅檢驗了我所學(xué)習(xí)的知識,也培養(yǎng)了我的實踐能力,讓我知道遇到一個問題如何去尋找思路,如何去解決問題終完成整個事情。課程設(shè)計就是我們專業(yè)課程知識綜合應(yīng)用的實踐訓(xùn)練,就是我們邁向社會,從事次課程設(shè)計使我明白了自己知識還比較欠缺是學(xué)習(xí)書本知識還就是遠遠不夠的,自己不會的東西還有太多學(xué)習(xí)需要自己長期的積累以后的學(xué)習(xí)、工作中都應(yīng)該不斷的學(xué)習(xí),將課本的理論知識與生活中的實踐知識相結(jié)合,不斷提高自己文化知識與實踐能力。由于本次試驗的很多知識都就是現(xiàn)學(xué)現(xiàn)用致很多地方的代碼顯得累贅繁瑣。但總體上主要功能就是實現(xiàn)了的且美化了一下主界面,面更加簡潔。也感謝老師給予的耐心指導(dǎo)與幫助??傊?此次課程設(shè)計讓我獲益匪淺將會繼續(xù)把它完善做好[1]java語言程序設(shè)計基礎(chǔ)篇[M]、機械工業(yè)出版社、2011、3、[2]黃曉東、Java課程設(shè)計案例精編[M]、北京:中國水利水電出版社,20075[3]求就是科技、Java信息管理系統(tǒng)開發(fā)實例導(dǎo)航[M]、北京:人民郵電出版社、20094importjavax、sound、sampled、*;importjava、awt、event、*;publicclassMy2048GameextendsJFrame{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstub
publicMy2048Game()this、setTitle("2048游戲");this、setLocation(400,30);classMyPanelextendsJPanelimplementsMouseListener,KeyListener,ActionListener//動作監(jiān)聽privatebooleanjb1_flag2=true;//publicstaticbooleanisJb1_flag(){publicstaticvoidsetJb1_flag(booleanjb1_flag){=privateJPanelscoresPane;//分數(shù)面板privateJPanelmainPane;//游戲主面板//"privateJLabellabelScores;//當前"得分"標簽privateJLabeltips;//提示操作標簽privateJLabelcurrentScores;privateJLabeltextScores;privateJLabel[][]texts;//創(chuàng)建文本框二維數(shù)組privateint[][]temp1=newint[4][4];//記錄上一步的狀態(tài)privateint[][]temp2=newint[4][4];//記錄當前的狀態(tài)privateinttimes=16;//記錄剩余空方塊數(shù)目privateintscores=0;//記錄分數(shù)privateinttemp1scores=0;privateinttemp2scores=0;privateintp1,p2,p3,p4;//用于判斷游戲就是否失敗privateintbiaoji=1;//標記能否移動Fontfont=newFont("",Font、BOLD,14);//設(shè)置字體類型與大小(標簽字體的設(shè)置)Fontfont2=newFont("",Font、BOLD,30);//主面板的數(shù)字字體的設(shè)置Randomrandom=newRandom();currentScores=newJLabel();//當前得分標簽currentScores、setFont(newFont("宋體",Font、BOLD,30));//設(shè)置字體類型與大小currentScores、setBounds(240,0,140,100);//設(shè)置最高分標簽的位置尺寸、 labelMaxScores、setFont(newFont("宋體",Font、BOLD,30));//設(shè)置字體類型與大//labelMaxScores、setBorder(BorderFactory、createMatteBorder(2,2,2,2,Color、labelMaxScores、setBounds(380,0,120,100);mainPane=newJPanel();//創(chuàng)建游戲主面板mainPane、setBounds(18,150,460,460);//設(shè)置主面板位置尺寸texts=newJLabel[4][4];//創(chuàng)建文本框二維數(shù)組for(inti=0;i<4;i++){//遍歷數(shù)組for(intj=0;j<4;j++){texts[i][j]=newJLabel();//創(chuàng)建標簽、texts[i][j]、setHorizontalAlignment(SwingConstants、CENTER);//設(shè)置標、*setColor(i,j,"");texts[i][j]、setOpaque(true);//設(shè)置控件不透明2, 2,Color、green));//設(shè)置方塊邊框顏色tips=newJLabel("<html>小提示:在灰色區(qū)域內(nèi)按下鼠標左鍵并向上下左右方向拖動<br>&NBSP&NBSP&NBSP&NBSP&NBSP&NBSP&NBSP也可以通過鍵盤的方向+"<br>&NBSP&NBSP&NBSP&NBSP&NBSP&NBSP&NBSPZ鍵返tips、setBounds(0,640,500,60);for(inti=0;i<4;++i){for(intj=0;j<4;++j){if(""、equals(texts[i][j]、getText()))temp1[i][j]=temp2[i][j]=0;elsetemp1[i][j]=temp2[i][j]=Integer、parseInt(texts[i][j]、getText());publicvoidsetColor(inti,intj,Stringstr){if(""、equals(str)){texts[i][j]setBackground(newColor(120,221,247));intresult=Integer、parseInt(str);switch(result){、、、protectedvoiddo_label_keyPressed(finalKeyEvente){intcode=e、getKeyCode();//獲取按鍵代碼inta;//a的引入就是為了防止連加的情況出現(xiàn)str;Stringstr1;switch(code){caseKeyEvent、VK_A://如果按鍵代碼就是左方向鍵或者A鍵biaoji=0;//標記左邊能不能合并for(inti=0;i<4;i++){a=5;for(intk=0;k<3;k++){//讓左邊每2個能合并的全合并了for(intj=1;j<4;j++){//遍歷16個方塊str=texts[i][j]、getText();//獲取當前方塊標簽文本字符str1=texts[i][j-1]、getText();//獲取當前左1方塊標簽文本if(str、compareTo("")!=0)biaoji=1;//如果向左能移,就標記一下texts[i][j-1]、setText(str);//字符左移setColor(i,j-1,str);setColor(i,j,"");}elseif((str、compareTo(str1)==0)&&(j!=a)&&(j!=a-1)){//如果當前方塊與左1方塊文本scores+=num;str=String、valueOf(2*num);//返回int參數(shù)的字符串-setColor(i,j-1,str);setColor(i,j,"");a=j;biaoji=1;p1=1;Create();break;biaoji=0;for(inti=0;i<4;i++){a=5;for(intk=0;k<3;k++){for(intj=2;j>=0;j--){str1=texts[i][j+1]、getText();if(str1、compareTo("")==0){if(str、compareTo("")!=0)biaoji=1;+setColor(i,j+1,str);setColor(i,j,"");}elseif(str、compareTo(str1)==0&&j!=a&&j!=a+1){scores+=num;str=String、valueOf(2*num);texts[i][j+1]、setText(str);setColor(i,j+1,str);setColor(i,j,"");a=j;biaoji=1;p2=1;Create();break;biaoji=0;for(intj=0;j<4;j++){a=5;for(intk=0;k<3;k++){for(inti=1;i<4;i++){str1=texts[i-1][j]、getText();if(str1、compareTo("")==0){if(str、compareTo("")!=0)biaoji=1;setColor(i-1,j,str);setColor(i,j,"");}elseif(str、compareTo(str1)==0&&i!=a&&i!=a-1){scores+=num;str=String、valueOf(2*num);texts[i-1][j]、setText(str);setColor(i-1,j,str);setColor(i,j,"");a=i;biaoji=1;p3=1;Create();break;caseKeyEvent、VK_DOWN:biaoji=0;for(intj=0;j<4;j++){a=5;for(intk=0;k<5;k++){for(inti=2;i>=0;i--){str1=texts[i+1][j]、getText();if(str1、compareTo("")==0){if(str、compareTo("")!=0)biaoji=1;setColor(i+1,j,str);setColor(i,j,"");}elseif(str、compareTo(str1)==0&&i!=a&&i!=a+1){scores+=num;str=String、valueOf(2*num);texts[i+1][j]、setText(str);setColor(i+1,j,str);setColor(i,j,"");a=i;biaoji=1;p4=1;Create();break;if(p1<=0||p2<=0||p3<=0||p4<=0){for(inti=0;i<4;++i){for(intj=0;j<4;++j){temp2[i][j]=temp1[i][j];j,scores=temp1scores;default:break; protectedvoiddo_label_keyPressed(intoption){inta;//a的引入就是為了防止連加的情況出現(xiàn)str;Stringstr1;switch(option){biaoji=0;//標記左邊能不能合并for(inti=0;i<4;i++){a=5;for(intk=0;k<3;k++){//讓左邊每2個能合并的全合并了for(intj=1;j<4;j++){//遍歷16個方塊str=texts[i][j]、getText();//獲取當前方塊標簽文本字符str1=texts[i][j-1]、getText();//獲取當前左1方塊標簽文本if(str、compareTo("")!=0)biaoji=1;//如果向左能移,就標記一下texts[i][j-1]、setText(str);//字符左移setColor(i,j-1,str);setColor(i,j,"");}elseif((str、compareTo(str1)==0)&&(j!=a)&&(j!=a-1)){//如果當前方塊與左1方塊0文本scores+=num;str=String、valueOf(2*num);//返回int參數(shù)的字符串-setColor(i,j-1,str);setColor(i,j,"");a=j;biaoji=1;p1=1;Create();break;biaoji=0;for(inti=0;i<4;i++){a=5;for(intk=0;k<3;k++){for(intj=2;j>=0;j--){str1=texts[i][j+1]、getText();if(str1、compareTo("")==0){if(str、compareTo("")!=0)biaoji=1;+setColor(i,j+1,str);setColor(i,j,"");}elseif(str、compareTo(str1)==0&&j!=a&&j!=a+1){scores+=num;str=String、valueOf(2*num);texts[i][j+1]、setText(str);setColor(i,j+1,str);setColor(i,j,"");a=j;biaoji=1;p2=1;Create();break;biaoji=0;for(intj=0;j<4;j++){a=5;for(intk=0;k<3;k++){for(inti=1;i<4;i++){str1=texts[i-1][j]、getText();if(str1、compareTo("")==0){if(str、compareTo("")!=0)biaoji=1;setColor(i-1,j,str);setColor(i,j,"");}elseif(str、compareTo(str1)==0&&i!=a&&i!=a-1){scores+=num;str=String、valueOf(2*num);texts[i-1][j]、setText(str);setColor(i-1,j,str);setColor(i,j,"");a=i;biaoji=1;p3=1;Create();break;biaoji=0;for(intj=0;j<4;j++){a=5;for(intk=0;k<5;k++){for(inti=2;i>=0;i--){str1=texts[i+1][j]、getText();if(str1、compareTo("")==0){if(str、compareTo("")!=0)biaoji=1;setColor(i+1,j,str);setColor(i,j,"");}elseif(str、compareTo(str1)==0&&i!=a&&i!=a+1){scores+=num;str=String、valueOf(2*num);texts[i+1][j]、setText(str);setColor(i+1,j,str);setColor(i,j,"");a=i;biaoji=1;p4=1;Create();break;default:break; publicvoidCreate(){booleanr=true;str;if(times>0&&biaoji==1){while(r){i=random、nextInt(4);j=random、nextInt(4);if((str、compareTo("")==0)){intima=2*(int)(1+Math、random()*2);//隨機產(chǎn)生2或4setColor(i,j,imass);r=false;p1=p2=p3=p4=0;for(intp=0;p<4;++p){for(intq=0;q<4;++q
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 塑料扣蓋課程設(shè)計
- web課程設(shè)計例子
- 礦山機械租賃合同示范
- 車子轉(zhuǎn)租合同范文大全
- 車身廣告發(fā)布合同范文
- 代付運費協(xié)議合同范文
- 農(nóng)業(yè)生產(chǎn)贈與合同(2024年版)
- 代理合作項目合同(2024年版)
- 氣體買賣合同簽訂注意什么
- 幼兒口才課主題課程設(shè)計
- 廣東省東莞市2023-2024學(xué)年八年級上學(xué)期期末英語試題
- 中小學(xué)人工智能教育的重要性與知識體系梳理
- 地鐵運營公司工務(wù)線路質(zhì)量評定標準
- 感染性休克急診處理課件
- 歷史七年級上學(xué)期期末試卷含答案
- 【基于抖音短視頻的營銷策略分析文獻綜述2800字(論文)】
- 2021-2022學(xué)年度西城區(qū)五年級上冊英語期末考試試題
- 《組織行為學(xué)》(本)形考任務(wù)1-4
- 廣東省廣州市白云區(qū)2022-2023學(xué)年九年級上學(xué)期期末語文試題
- 劇本-進入黑夜的漫長旅程
- 化肥購銷合同范本正規(guī)范本(通用版)
評論
0/150
提交評論