




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
《JAVA語言程序設計》2048智力小游戲設計1、前言.................................................12、游戲需求分析.........................................12、1需求分析.........................................12、2可行性分析.......................................23、概要設計.............................................34、詳細設計.............................................44、1流程圖...........................................45、測試.................................................86、總結................................................106、參考文獻............................................107、部分源代碼:.........................................10前言最近以來,移動手游越來越成為當下游戲產業中重要的一環,市場也在加大秀的手游,然而任何一款手游能夠風靡,主要還就是依靠其簡單的操作性,因此本2048游戲規則很簡單,玩家每次可以選擇上下左右其中一個方向去移動每移動一次,所有的數字方塊都會往移動的方向靠攏外,系統也會在空白的地方隨機出現一個數字方塊,相同數字的方塊在靠攏、相撞時會相加。系統給予的數字方塊。分析21:,,,單化與多樣化,游戲界面更加人性化能更加貼合使用。(1)界面一款的好的游戲其界面必須友好,簡潔已經成為當今UI設計的主流,簡上手才能得到玩家的青睞。(2)功能需求能夠顯示游戲的當前得得分,并記錄游戲的最高分并顯示,當在次打開游戲時,能夠顯示最高分;在游戲進行的過程中循環播放音樂,并能夠關閉音樂;束要相加,通過不斷地累加最終加到2048(3)操作性需求游戲的體驗就是衡量一款游戲的關鍵,本游戲可通過鍵盤w,s,a,d以及方向鍵來控制方塊的移動,還可以通過在游戲的主面板中向上下左右拖動鼠標來控制方塊的移動,左右手都可以操作,充分考慮便捷性。不同的人有不一樣習慣,通過多種方式來操作游戲以各種習慣的人的需求。22(1)象的程序設計方法Java面向對象程序設計的基本思想就是通過構造與組織對象來求解問題的。對象就是很好理解的,任何一種物體都可以被認為就是對象,例如,汽車就:能,這兩種基本屬性在Java語言中表現為擁有一定的存儲單元并具備一定的功能。理解了Java的這種面向對象程序設計的基本思想之后,在以后的編程過程中,當個構造人們容易理解的更接近于真實物理世界物體的對象。設計方法,首先構造一個類來處理需要解決的問題,然后根據已經擁有的類(例來求解指定的問題。這個過程可以繼續遞歸下去,用在新構造的類上,直到最后解決了指定的問題,例如Java的應用程序與小應用程序都必須有一個類作口求解問題。在計算機語言中,面向對象的類一般具有三個基本特性:封裝性、繼承性與多態性,這三種特性進一步簡化了Java求解模型,提高了程序的復用性,節省了程序的代碼量,提高了軟件的生產率。(2)java圖形用戶界面不僅可以提供各種數據的基本圖形的直觀表示形式,而且可以建立友好的交互方式,從而使計算機軟件可以設計得十分簡單易用。從,系統,而且缺少基本的剪貼板與打印支持功能。現在第二代圖形用戶界面Swing對AWT進行了擴展,Swing不僅在功能上比AWT強大,而且在很大程相關性很小,可以定制指定的操作系統風格的圖形用戶界面。GUI(圖形用戶界面)組件構成了圖形用戶界面的基礎。在Java程序設計中,要求按照一定的布局方式將組件安排在容器中,然后通過事件處理的方式實現人機交互,而容器本身也就是組件,這樣在容器中也可以含有容器,從而可這種嵌套方式方便地組合各種組件。事件處理模型就是Java語言提供的一種人機交互模型,它使得用戶能夠Java對這些事件的處理模型就是采用面向對象的方法,即通過對象的形式把各種事件進行封裝與處理。這種事件處理模型的三個基本要素就是事件源、事件種事件源上運用鼠標、鍵盤或其她輸入設備進行各種操作有事件發生。處理就是通過事件監聽器實現的。因為鼠標事件也就是一種事件,所以對鼠標事件進行處理要遵循事件處理模型。鼠標事件的處理也就是建立在事件源的基礎之上,以事件對象本身,通過事件監聽器進行處理。,與放開鼠標鍵等。類MouseEvent的實例對象記錄了鼠標的當前位置與狀態口 。 這 些 相 關 接 口 包 。,來自包javaxswing、event。鍵、單擊鼠標鍵、鼠標進入組件內與鼠標離開組件區域等事件。對鼠標事件進行處理,就就是要設計類,實現上面的鼠標事件監聽器接口,然后在事件源中注冊處理鼠標事件監聽器的對象,便對鼠標事件進行處理。(1)流程圖(2)界面的整體布局數字代表的方塊顏色。(3)方法模塊分析來設置標簽的顏色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;游戲就是否結束。publicvoidCreate(){inti,j;//用于記錄產生的二維方陣的下標值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);//隨機產Stringimass=String、valueOf(ima);texts、Text(imass);setColor(i,j,imass);timesr=false;p1=p2=p3=p4=0;//前的狀態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說明任何方向鍵都不能產生新的數字tips、setText("游戲結束!");currentScores、setText("<html>SCORE<br>"+String、valueOf(scores)+"</html>"JOptionPaneshowMessageDialognull"游戲結束!"Systemexit);;方法3:通過鼠標左鍵的按下與釋放來判斷向那個方向拖動,拖動實現主要就是通過記錄按下鼠標左鍵時鼠標指針的位置,然后在記錄鼠標左鍵釋放的方向,在將獲得的方向值傳到do_label_keyPressed(int)函數中,從而達動的目的。publicvoidmousePressed(MouseEvente){//TODOAuto-generatedmethodstub按下(e、、、640)、=e);thisy1、tY();out"X="、"++epublicvoidmouseReleased(MouseEvente){//TODOAuto-generatedmethodstub釋放//若鼠標位置在灰色區域內并且按下鼠標的位置不為相應的處理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:從文件中讀取,記錄。從文件中讀取記錄,同時也要將新的數據,,文件不存在,這時不僅不能從文件中讀數據,還要創建相應的文件。創建文件之后,接下來在運行程序就能讀取到數據。文件讀取結束要將文閉。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)結束在這次的課程設計中不僅檢驗了我所學習的知識,也培養了我的實踐能力,讓我知道遇到一個問題如何去尋找思路,如何去解決問題終完成整個事情。課程設計就是我們專業課程知識綜合應用的實踐訓練,就是我們邁向社會,從事次課程設計使我明白了自己知識還比較欠缺是學習書本知識還就是遠遠不夠的,自己不會的東西還有太多學習需要自己長期的積累以后的學習、工作中都應該不斷的學習,將課本的理論知識與生活中的實踐知識相結合,不斷提高自己文化知識與實踐能力。由于本次試驗的很多知識都就是現學現用致很多地方的代碼顯得累贅繁瑣。但總體上主要功能就是實現了的且美化了一下主界面,面更加簡潔。也感謝老師給予的耐心指導與幫助。總之,此次課程設計讓我獲益匪淺將會繼續把它完善做好[1]java語言程序設計基礎篇[M]、機械工業出版社、2011、3、[2]黃曉東、Java課程設計案例精編[M]、北京:中國水利水電出版社,20075[3]求就是科技、Java信息管理系統開發實例導航[M]、北京:人民郵電出版社、20094importjavax、sound、sampled、*;importjava、awt、event、*;publicclassMy2048GameextendsJFrame{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstub
publicMy2048Game()this、setTitle("2048游戲");this、setLocation(400,30);classMyPanelextendsJPanelimplementsMouseListener,KeyListener,ActionListener//動作監聽privatebooleanjb1_flag2=true;//publicstaticbooleanisJb1_flag(){publicstaticvoidsetJb1_flag(booleanjb1_flag){=privateJPanelscoresPane;//分數面板privateJPanelmainPane;//游戲主面板//"privateJLabellabelScores;//當前"得分"標簽privateJLabeltips;//提示操作標簽privateJLabelcurrentScores;privateJLabeltextScores;privateJLabel[][]texts;//創建文本框二維數組privateint[][]temp1=newint[4][4];//記錄上一步的狀態privateint[][]temp2=newint[4][4];//記錄當前的狀態privateinttimes=16;//記錄剩余空方塊數目privateintscores=0;//記錄分數privateinttemp1scores=0;privateinttemp2scores=0;privateintp1,p2,p3,p4;//用于判斷游戲就是否失敗privateintbiaoji=1;//標記能否移動Fontfont=newFont("",Font、BOLD,14);//設置字體類型與大小(標簽字體的設置)Fontfont2=newFont("",Font、BOLD,30);//主面板的數字字體的設置Randomrandom=newRandom();currentScores=newJLabel();//當前得分標簽currentScores、setFont(newFont("宋體",Font、BOLD,30));//設置字體類型與大小currentScores、setBounds(240,0,140,100);//設置最高分標簽的位置尺寸、 labelMaxScores、setFont(newFont("宋體",Font、BOLD,30));//設置字體類型與大//labelMaxScores、setBorder(BorderFactory、createMatteBorder(2,2,2,2,Color、labelMaxScores、setBounds(380,0,120,100);mainPane=newJPanel();//創建游戲主面板mainPane、setBounds(18,150,460,460);//設置主面板位置尺寸texts=newJLabel[4][4];//創建文本框二維數組for(inti=0;i<4;i++){//遍歷數組for(intj=0;j<4;j++){texts[i][j]=newJLabel();//創建標簽、texts[i][j]、setHorizontalAlignment(SwingConstants、CENTER);//設置標、*setColor(i,j,"");texts[i][j]、setOpaque(true);//設置控件不透明2, 2,Color、green));//設置方塊邊框顏色tips=newJLabel("<html>小提示:在灰色區域內按下鼠標左鍵并向上下左右方向拖動<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的引入就是為了防止連加的情況出現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參數的字符串-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的引入就是為了防止連加的情況出現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參數的字符串-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);//隨機產生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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年MICAPS氣象圖形交互系統合作協議書
- 2025年納他霉素食品防腐劑合作協議書
- 2025年細菌類診斷抗原合作協議書
- 語言文字電子出版物服務企業制定與實施新質生產力戰略研究報告
- 經濟與工商管理書籍出版服務行業跨境出海戰略研究報告
- 軟件電子出版物服務行業直播電商戰略研究報告
- 養老院營養餐廳行業深度調研及發展戰略咨詢報告
- 農村勞動力轉移培訓服務行業直播電商戰略研究報告
- 電子商務支付服務企業制定與實施新質生產力戰略研究報告
- 禮儀培訓行業直播電商戰略研究報告
- 精準醫療復合手術室
- 《基于三維熒光技術的水環境污染源深度溯源技術規范》
- 危險廢物處理應急預案(4篇)
- 江蘇省南京市2025屆高三第二次聯考英語試卷含解析
- 慢腎風中醫辨證施護
- 危險化學品工傷事故形勢及典型事故案例
- 《多相反應及反應器》課件
- 2024年10月自考01685動漫藝術概論試題及答案含評分參考
- 不同行業的企業會計制度比較分析
- 投標書售后服務怎么寫
- 數據中心強弱電施工設計方案
評論
0/150
提交評論