




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、-. z.JAVA語言程序設(shè)計(jì)課程設(shè)計(jì)報告2048智力小游戲設(shè)計(jì)專業(yè)班級:計(jì)算機(jī)科學(xué)與技術(shù)嵌入13-1 學(xué)生*:卓海有學(xué)生*:小組成員:單建飛堵文斐李棟承梅孔偉指導(dǎo)教師*:宋強(qiáng)-. z.目錄TOC o 1-2 h u HYPERLINK l _Toc16951.前言1HYPERLINK l _Toc287902.游戲需求分析1HYPERLINK l _Toc86332.1 需求分析1HYPERLINK l _Toc98172.2 可行性分析2HYPERLINK l _Toc251373.概要設(shè)計(jì)3HYPERLINK l _Toc293614.詳細(xì)設(shè)計(jì)4HYPERLINK l _Toc22801
2、4.1流程圖4HYPERLINK l _Toc7334.2界面的整體布局4HYPERLINK l _Toc38724.3方法模塊分析5HYPERLINK l _Toc112815.測試8HYPERLINK l _Toc133166.總結(jié)10HYPERLINK l _Toc133166.參考文獻(xiàn)10HYPERLINK l _Toc215107.局部源代碼:10-. z.一、前言最近以來,移動手游越來越成為當(dāng)下游戲產(chǎn)業(yè)中重要的一環(huán),市場也在加大對這一產(chǎn)業(yè)的投入,涌現(xiàn)出了憤怒的小鳥,水果忍者,flappy bird,2048等諸多優(yōu)秀的手游,然而任何一款手游能夠風(fēng)行,主要還是依靠其簡單的操作性,因此
3、本次java課設(shè)我選擇其中的典型2048PC版作為本次課設(shè)的課題。2048游戲規(guī)則很簡單,玩家每次可以選擇上下左右其中一個方向去移動,每移動一次,所有的數(shù)字方塊都會往移動的方向靠攏外,系統(tǒng)也會在空白的地方隨機(jī)出現(xiàn)一個數(shù)字方塊,一樣數(shù)字的方塊在靠攏、相撞時會相加。系統(tǒng)給予的數(shù)字方塊不是2就是4,玩家要想方法在這小小的16格*圍中湊出“2048這個數(shù)字方塊。二、游戲需求分析2.1需求分析現(xiàn)代社會對休閑小游戲的需求是:提高游戲的操作可行性,降低游戲的操作難度,降低游戲的上手難度,降低游戲的競爭需求,對使用設(shè)備的要求趨于簡單化和多樣化,游戲界面更加人性化,功能更加貼合使用。1界面一款的好的游戲其界面必
4、須友好,簡潔已經(jīng)成為當(dāng)今UI設(shè)計(jì)的主流,簡單易上手才能得到玩家的青睞。2功能需求能夠顯示游戲的當(dāng)前得得分,并記錄游戲的最高分并顯示,當(dāng)在次翻開游戲時,能夠顯示最高分;在游戲進(jìn)展的過程中循環(huán)播放音樂,并能夠關(guān)閉音樂或者翻開音樂;游戲的主界面上,一樣的數(shù)字要顯示一樣的顏色。游戲完畢要有相應(yīng)的提示。游戲的主要目的是通過上下左右移動來將相鄰一樣的數(shù)字相加,通過不斷地累加最終加到2048。3操作性需求游戲的體驗(yàn)是衡量一款游戲的關(guān)鍵,本游戲可通過鍵盤w,s,a,d以及方向鍵來控制方塊的移動,還可以通過在游戲的主面板中向上下左右拖動鼠標(biāo)來控制方塊的移動,左右手都可以操作,充分考慮便捷性。不同的人有不一樣習(xí)慣
5、,通過多種方式來操作游戲,可以各種習(xí)慣的人的需求。2.2可行性分析1面向?qū)ο蟮某绦蛟O(shè)計(jì)方法Java面向?qū)ο蟪绦蛟O(shè)計(jì)的根本思想是通過構(gòu)造和組織對象來求解問題的。對象是很好理解的,任何一種物體都可以被認(rèn)為是對象,例如,汽車就是一種對象。對象具有兩個最根本的屬性:具有一定的物質(zhì)根底和一定的功能,這兩種根本屬性在Java語言中表現(xiàn)為擁有一定的存儲單元并具備一定的功能。理解了Java的這種面向?qū)ο蟪绦蛟O(shè)計(jì)的根本思想之后,在以后的編程過程中,就應(yīng)當(dāng)個構(gòu)造人們?nèi)菀桌斫獾母咏谡鎸?shí)物理世界物體的對象。Java面向?qū)ο蟪绦蛟O(shè)計(jì)的過程非常簡單。這里介紹一種自頂向下的程序設(shè)計(jì)方法,首先構(gòu)造一個類來處理需要解決的問
6、題,然后根據(jù)已經(jīng)擁有的類例如以前求解其它問題時實(shí)現(xiàn)的類,分析和構(gòu)造新的類,設(shè)法將問題分解下去,而最開場構(gòu)造的類通過組織這些新構(gòu)造的類、已有的類及由他們生成的實(shí)例來求解指定的問題。這個過程可以繼續(xù)遞歸下去,用在新構(gòu)造的類上,直到最后解決了指定的問題,例如Java的應(yīng)用程序和小應(yīng)用程序都必須有一個類作為入口求解問題。在計(jì)算機(jī)語言中,面向?qū)ο蟮念愐话憔哂腥齻€根本特性:封裝性、繼承性和多態(tài)性,這三種特性進(jìn)一步簡化了Java求解模型,提高了程序的復(fù)用性,節(jié)省了程序的代碼量,從而提高了軟件的生產(chǎn)率。2java技術(shù)分析圖形用戶界面不僅可以提供各種數(shù)據(jù)的根本圖形的直觀表示形式,而且可以建立友好的交互方式,從而
7、使計(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)成了圖形用戶界面的根底。在Java程序設(shè)計(jì)中,要求按照一定的布局方式將組件安排在容器中,然后通過事件處理的方式實(shí)現(xiàn)人機(jī)交互,而
8、容器本身也是組件,這樣在容器中也可以含有容器,從而可以通過這種嵌套方式方便地組合各種組件。事件處理模型是Java語言提供的一種人機(jī)交互模型,它使得用戶能夠通過鼠標(biāo)、鍵盤或其他輸入設(shè)備來控制程序的執(zhí)行流程,從而到達(dá)人機(jī)交互的目的。對鼠標(biāo)、鍵盤或其他輸入設(shè)備的各種操作一般也稱為事件。Java語言對這些事件的處理模型是采用面向?qū)ο蟮姆椒?,即通過對象的形式把各種事件進(jìn)展封裝和處理。這種事件處理模型的三個根本要素是事件源、事件對象以及事件監(jiān)聽器。事件源是各種組件,是承受各種事件的對象。在各種事件源上運(yùn)用鼠標(biāo)、鍵盤或其他輸入設(shè)備進(jìn)展各種操作,就會有事件發(fā)生。每種操作一般都對應(yīng)著事件,Java語言通過事件對
9、象來包裝這些事件。對事件進(jìn)展處理是通過事件監(jiān)聽器實(shí)現(xiàn)的。因?yàn)槭髽?biāo)事件也是一種事件,所以對鼠標(biāo)事件進(jìn)展處理要遵循事件處理模型。鼠標(biāo)事件的處理也是建立在事件源的根底之上,以事件對象本身,最后通過事件監(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,MouseWheelListener,MouseInputListener。前面三個是包中的接口,最后一個接口MouseInp
10、utlistener來自包。接口主要用來處理按下鼠標(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)聽器接口,然后在事件源中注冊處理鼠標(biāo)事件監(jiān)聽器的對象,以便對鼠標(biāo)事件進(jìn)展處理。概要設(shè)計(jì)詳細(xì)設(shè)計(jì)流程圖界面的整體布局分別構(gòu)建mainPane,scoresPane兩大模塊放入游戲窗體,其中scoresPane包含2048字樣的提示,當(dāng)前得分和最高分,當(dāng)?shù)梅殖^最高分時,將得分存入工程文件夾下的myRecording.t*t,覆蓋最高分,同時在最高分顯示最新myRecording.t*t的內(nèi)容。通過Create方法隨機(jī)產(chǎn)生2號
11、方塊或者4號方塊,通過setColor方法設(shè)置每個數(shù)字代表的方塊顏色。方法模塊分析方法1:設(shè)置標(biāo)簽顏色,每次隨機(jī)產(chǎn)生2或4和數(shù)字合并之后就要調(diào)用該方法來設(shè)置標(biāo)簽的顏色publicvoid setColor(int i, int j, String str) if (.equals(str) te*tsij.setBackground(new Color(120,221,247);return;int result = Integer.parseInt(str);switch (result) case 2: te*tsij.setBackground(new Color(240,240,0);
12、 break;case 4: te*tsij.setBackground(Color.pink); break;case 8: te*tsij.setBackground(new Color(240,150,10); break;case 16: te*tsij.setBackground(Color.green); break;case 32: te*tsij.setBackground(Color.magenta); break;case 64: te*tsij.setBackground(new Color(155,10,190);break;case 128: te*tsij.setB
13、ackground(Color.blue); break;case 256: te*tsij.setBackground(Color.gray); break;case 512: te*tsij.setBackground(Color.cyan); break;case 1024: te*tsij.setBackground(Color.DARK_GRAY); break;case 2048: te*tsij.setBackground(Color.red); break;case 4096: te*tsij.setBackground(Color.white); break;default:
14、 break;方法2:在隨機(jī)位置產(chǎn)生一個2號或4號方塊的方法,同時該方法也用于判斷游戲是否完畢。publicvoid Create() int i, j;/用于記錄產(chǎn)生的二維方陣的下標(biāo)值boolean r = true;String str;if (times 0 & biaoji = 1) while (r) i = random.ne*tInt(4);j = random.ne*tInt(4);str = te*tsij.getTe*t();if (str.pareTo() = 0) int ima = 2 * (int) (1 + Math.random() * 2);/ 隨機(jī)產(chǎn)生2或4
15、String imass = String.valueOf(ima);te*tsij.setTe*t(imass);setColor(i, j, imass);times-;r = false;p1= p2 = p3 = p4 = 0;/記錄當(dāng)前的狀態(tài)for(int p = 0; p 4; +p)for(int q = 0; q 0 & p2 0 & p3 0 & p4 0)/ l1到l4同時被鍵盤賦值為1說明任何方向鍵都不能產(chǎn)生新的數(shù)字,說明游戲失敗tips.setTe*t( 游戲完畢!);currentScores.setTe*t(SCORE+String.valueOf(scores)+
16、);JOptionPane.showMessageDialog(null,游戲完畢!);System.e*it(0);方法3:通過鼠標(biāo)左鍵的按下與釋放來判斷向那個方向拖動,拖動實(shí)現(xiàn)主要是通過記錄按下鼠標(biāo)左鍵時鼠標(biāo)指針的位置,然后在記錄鼠標(biāo)左鍵釋放時指針的位置坐標(biāo),通過對兩次的坐標(biāo)值計(jì)算處理,可以得到鼠標(biāo)指針移動的方向,在將獲得的方向值傳到do_label_keyPressed(int)函數(shù)中,從而到達(dá)移動的目的。publicvoid mousePressed(MouseEvent e) / TODO Auto-generated method stub/鼠標(biāo)按下/假設(shè)鼠標(biāo)位置在灰色的區(qū)域內(nèi)則記
17、錄鼠標(biāo)左鍵按下時的坐標(biāo)if(e.get*()=20&e.get*()=180&e.getY()=20&e.get*()=180&e.getY()*2)&(*1-*2)Math.abs(y2-y1)option=1;/移動的方向向左System.out.println(向左方向移動);if(*1Math.abs(y2-y1)option=2;/移動的方向向右System.out.println(向右方向移動);if(y1y2)&(y1-y2)Math.abs(*1-*2)option=3;/移動的方向向上System.out.println(向上方向移動);if(y1Math.abs(*1-*2
18、)option=4;/移動的方向向下System.out.println(向下方向移動);/將上一次的鼠標(biāo)位置清零this.*1=0;this.y1=0;this.*2=0;this.y2=0;do_label_keyPressed(option);方法4:從文件中讀取,記錄。從文件中讀取記錄,同時也要將新的數(shù)據(jù)保存到文件中。讀取文件需要解決的問題是,當(dāng)程序首次運(yùn)行的時候,文件不存在,這時不僅不能從文件中讀數(shù)據(jù),還要創(chuàng)立相應(yīng)的文件。創(chuàng)立文件之后,接下來在運(yùn)行程序就能讀取到數(shù)據(jù)。文件讀取完畢要將文件關(guān)閉。publicstaticvoid getRecording()boolean flag=fa
19、lse;/用于判斷文件是否是新創(chuàng)立的try File f=new File(src/myRecording.t*t);if(f.e*ists()fr=new FileReader(f);br=new BufferedReader(fr);String n=br.readLine();ma*scores_2048=Integer.parseInt(n);elseflag=f.createNewFile(); catch (E*ception e) / TODO: handle e*ceptione.printStackTrace();finallytry /關(guān)閉文件流的順序,先開的后關(guān)閉if(!
20、flag)br.close();fr.close(); catch (E*ception e2) / TODO: handle e*ceptione2.printStackTrace();測試1首次運(yùn)行程序在工程文件中建立保存最高分的文件和再次運(yùn)行程序2游戲完畢六、總結(jié)在這次的課程設(shè)計(jì)中不僅檢驗(yàn)了我所學(xué)習(xí)的知識,也培養(yǎng)了我的實(shí)踐能力,讓我知道遇到一個問題,如何去尋找思路,如何去解決問題,最終完成整個事情。課程設(shè)計(jì)是我們專業(yè)課程知識綜合應(yīng)用的實(shí)踐訓(xùn)練,是我們邁向社會,從事職業(yè)工作前一個必不少的過程。這次課程設(shè)計(jì)不僅是對這學(xué)期所學(xué)知識的一種綜合檢驗(yàn),而且也是對自己動手能力的一種提高,增強(qiáng)了自己實(shí)踐
21、能力。通過這次課程設(shè)計(jì)使我明白了自己知識還比擬欠缺,只是學(xué)習(xí)書本知識還是遠(yuǎn)遠(yuǎn)不夠的,自己不會的東西還有太多,學(xué)習(xí)需要自己長期的積累,在以后的學(xué)習(xí)、工作中都應(yīng)該不斷的學(xué)習(xí),將課本的理論知識與生活中的實(shí)踐知識相結(jié)合,不斷提高自己文化知識和實(shí)踐能力。由于本次試驗(yàn)的很多知識都是現(xiàn)學(xué)現(xiàn)用,以致很多地方的代碼顯得累贅繁瑣。但總體上主要功能是實(shí)現(xiàn)了的,并且美化了一下主界面,使得界面更加簡潔。最后也感謝教師給予的耐心指導(dǎo)與幫助??傊?,此次課程設(shè)計(jì)讓我獲益匪淺,我將會繼續(xù)把它完善做好參考文獻(xiàn)1 java語言程序設(shè)計(jì)根底篇M.機(jī)械工業(yè).2011.3.2 黃曉東.Java課程設(shè)計(jì)案例精編M.:中國水利水電,2007
22、.5.3 求是科技. Java信息管理系統(tǒng)開發(fā)實(shí)例導(dǎo)航M.:人民郵電.2009.4.源代碼清單package my2048game;import java*.sound.sampled.*;import java*.swing.*;import java.io.*;import java.awt.*;import java.awt.event.*;import java.util.*;public class My2048Game e*tends JFrame/定義自己的面板MyPanel mp=null;public static void main(String args) / TODO
23、Auto-generated method stubMy2048Game m2048=new My2048Game();m2048.setFocusable(true);/(設(shè)置)該對象的焦點(diǎn),不能用請求焦點(diǎn)對象名.requestFocus();/構(gòu)造函數(shù)public My2048Game()mp=new MyPanel();this.add(mp);/注冊鼠標(biāo)監(jiān)聽this.addMouseListener(mp);/注冊鍵盤監(jiān)聽this.addKeyListener(mp);this.setTitle(2048游戲);this.setLocation(400, 30);this.setSiz
24、e(500, 800);this.setResizable(false);/制止調(diào)整窗口大小this.setDefaultCloseOperation(JFrame.E*IT_ON_CLOSE);this.setVisible(true);class MyPanel e*tends JPanel implements MouseListener,KeyListener,ActionListener/動作監(jiān)聽器一般用于監(jiān)聽按鈕或者菜單的點(diǎn)擊事件private int *1=0,y1=0;/按下鼠標(biāo)左鍵的位置坐標(biāo)private int *2=0,y2=0;/釋放鼠標(biāo)左鍵的位置坐標(biāo)private i
25、nt option=0;/記錄鼠標(biāo)移動的方向/定義組件private utton 1;/聲音圖標(biāo)的按鈕private static boolean 1_flag=true;/用于控制聲音開關(guān)的一個標(biāo)志private boolean 1_flag2=true;/public static boolean is1_flag() return 1_flag;public static void set1_flag(boolean 1_flag) MyPanel.1_flag = 1_flag;private JPanel scoresPane; / 分?jǐn)?shù)面板private JPanel mainPa
26、ne; / 游戲主面板private JLabel labelMa*Scores; / 最高分標(biāo)簽private JLabel m2048;/顯示2048private JLabel labelScores; / 當(dāng)前得分標(biāo)簽private JLabel tips;/ 提示操作標(biāo)簽private JLabel currentScores;private JLabel te*tScores;private JLabel te*ts; / 創(chuàng)立文本框二維數(shù)組private int temp1 = new int 44; /記錄上一步的狀態(tài)private int temp2 = new int 44
27、; /記錄當(dāng)前的狀態(tài)private int times = 16;/ 記錄剩余空方塊數(shù)目private int scores = 0;/ 記錄分?jǐn)?shù)private int ma*scores=0;/最高分private int temp1scores = 0;private int temp2scores = 0;private int p1, p2, p3, p4;/ 用于判斷游戲是否失敗private int biaoji = 1; /標(biāo)記能否移動Font font = new Font(, Font.BOLD, 14); / 設(shè)置字體類型和大小標(biāo)簽字體的設(shè)置Font font2 = new
28、 Font(, Font.BOLD, 30); / 主面板的數(shù)字字體的設(shè)置Random random = new Random();/構(gòu)造函數(shù)public MyPanel()super();/調(diào)用父類的構(gòu)造方法/在構(gòu)造函數(shù)中創(chuàng)立組件this.setLayout(null);/ 設(shè)置空布局this.setBackground(new Color(2,150,220);/設(shè)置該MyPanel類的背景顏色scoresPane=new JPanel();/創(chuàng)立分?jǐn)?shù)顯示面板scoresPane.setBackground(new Color(5,150,220);/設(shè)置分?jǐn)?shù)面板的背景顏色scoresPa
29、ne.setBounds(0,0,482,100);/設(shè)置該面板顯示的位置和長寬/scoresPane.setBorder(BorderFactory.createMatteBorder(2, 2, 2, 2, Color.yellow);/設(shè)置該面板的邊框this.add(scoresPane);/將分?jǐn)?shù)面板加載到MyPanel面板上scoresPane.setLayout(null);/設(shè)置得分面板的布局為空m2048=new JLabel(2048);/創(chuàng)立標(biāo)簽/m2048.setBorder(BorderFactory.createMatteBorder(2, 2, 2, 2, Col
30、or.yellow);m2048.setFont(new Font(宋體, Font.BOLD, 45);/設(shè)置字體類型和大小m2048.setBounds(0,0,120,100);scoresPane.add(m2048);currentScores = new JLabel();/ 當(dāng)前得分標(biāo)簽currentScores.setTe*t(SCORE+String.valueOf(scores)+);currentScores.setFont(new Font(宋體, Font.BOLD, 30);/ 設(shè)置字體類型和大小/currentScores.setBorder(BorderFact
31、ory.createMatteBorder(0,0, 0, 1, Color.yellow);currentScores.setBounds(240,0, 140, 100);/ 設(shè)置最高分標(biāo)簽的位置尺寸scoresPane.add(currentScores);/ 將最高分標(biāo)簽添加到得分容器中/從文件取得最高分的數(shù)據(jù)Recorder.getRecording();ma*scores=Recorder.getMa*scores_2048();labelMa*Scores = new JLabel(BEST+String.valueOf(ma*scores)+);/ 最高得分標(biāo)簽labelMa*
32、Scores.setFont(new Font(宋體, Font.BOLD, 30);/ 設(shè)置字體類型和大小/labelMa*Scores.setBorder(BorderFactory.createMatteBorder(2, 2, 2, 2, Color.yellow);labelMa*Scores.setBounds(380, 0, 120, 100);scoresPane.add(labelMa*Scores);/ 將得分標(biāo)簽添加到分?jǐn)?shù)面板中1=new utton(new ImageIcon(src/聲音圖標(biāo).jpg);1.setBounds(433,120,45,30);this.a
33、dd(1);/注冊按鈕監(jiān)聽1.setActionmand(shengyin);1.addActionListener(this);mainPane = new JPanel();/ 創(chuàng)立游戲主面板mainPane.setBounds(18, 150, 460, 460);/ 設(shè)置主面板位置尺寸mainPane.setBackground(new Color(40,190,240);/mainPane.setBorder(BorderFactory.createMatteBorder(2, 2, 2, 2, Color.yellow);this.add(mainPane);mainPane.se
34、tLayout(null);/ 設(shè)置空布局te*ts = new JLabel44;/ 創(chuàng)立文本框二維數(shù)組for (int i = 0; i 4; i+) / 遍歷數(shù)組for (int j = 0; j 4; j+) te*tsij = new JLabel();/ 創(chuàng)立標(biāo)簽te*tsij.setFont(font2);te*tsij.setHorizontalAlignment(SwingConstants.CENTER); / 設(shè)置標(biāo)簽內(nèi)容沿*軸的對齊方式;*區(qū)域的中心位置te*tsij.setTe*t();te*tsij.setBounds(110 * j+15, 110 * i+15,
35、 100, 100);/ 設(shè)置方塊的大小位置setColor(i, j, );te*tsij.setOpaque(true); / 設(shè)置控件不透明/te*tsij.setBorder(BorderFactory.createMatteBorder(2, 2, 2,/2, Color.green);/ 設(shè)置方塊邊框顏色mainPane.add(te*tsij);/ 將創(chuàng)立的文本框放在主面板中tips = new JLabel(小提示:在灰色區(qū)域內(nèi)按下鼠標(biāo)左鍵并向上下左右方向拖動 &NBSP &NBSP &NBSP &NBSP &NBSP &NBSP &NBSP 也可以通過鍵盤的方向鍵來上下左右移
36、動+ &NBSP &NBSP &NBSP &NBSP &NBSP &NBSP &NBSP Z 鍵返回上一步);tips.setFont(font);tips.setForeground(Color.black);tips.setBounds(0, 640, 500, 60);this.add(tips);/定義音頻AePlayWave apw=new AePlayWave(src/后弦 - 有你就很幸福_new.wav);apw.start();Create(); / 初始時在隨機(jī)位置產(chǎn)生一個2號或4號方塊Create();/記錄一下當(dāng)前的狀態(tài)for(int i = 0; i 4; +i)fo
37、r(int j = 0; j 4; +j)if( .equals(te*tsij.getTe*t() ) temp1ij = temp2ij = 0;else temp1 ij = temp2ij = Integer.parseInt(te*tsij.getTe*t();/ 設(shè)置標(biāo)簽顏色public void setColor(int i, int j, String str) if (.equals(str) te*tsij.setBackground(new Color(120,221,247);return;int result = Integer.parseInt(str);switc
38、h (result) case 2: te*tsij.setBackground(new Color(240,240,0); break;case 4: te*tsij.setBackground(Color.pink); break;case 8: te*tsij.setBackground(new Color(240,150,10); break;case 16: te*tsij.setBackground(Color.green); break;case 32: te*tsij.setBackground(Color.magenta); break;case 64: te*tsij.se
39、tBackground(new Color(155,10,190); break;case 128: te*tsij.setBackground(Color.blue); break;case 256: te*tsij.setBackground(Color.gray); break;case 512: te*tsij.setBackground(Color.cyan); break;case 1024: te*tsij.setBackground(Color.DARK_GRAY); break;case 2048: te*tsij.setBackground(Color.red); brea
40、k;case 4096: te*tsij.setBackground(Color.white); break;default: break;/ 按鍵輸入事件的處理方法protected void do_label_keyPressed(final KeyEvent e) int code = e.getKeyCode();/ 獲取按鍵代碼int a; / a的引入是為了防止連加的情況出現(xiàn)String str;String str1;int num;switch (code) case KeyEvent.VK_LEFT:case KeyEvent.VK_A: / 如果按鍵代碼是左方向鍵或者A鍵b
41、iaoji = 0; / 標(biāo)記左邊能不能合并for (int i = 0; i 4; i+) a = 5;for (int k = 0; k 3; k+) / 讓左邊每2個能合并的全合并了for (int j = 1; j 4; j+) / 遍歷16個方塊str = te*tsij.getTe*t();/ 獲取當(dāng)前方塊標(biāo)簽文本字符str1 = te*tsij - 1.getTe*t();/ 獲取當(dāng)前左1方塊標(biāo)簽文本字符if (str1.pareTo() = 0) / 如果左1方塊文本為空字符if (str.pareTo() != 0)biaoji = 1; / 如果向左能移,就標(biāo)記一下te*t
42、sij - 1.setTe*t(str);/ 字符左移setColor(i, j - 1, str);te*tsij.setTe*t();/ 當(dāng)前方塊字符置空setColor(i, j, ); else if (str.pareTo(str1) = 0) & (j != a)& (j != a - 1) / 如果當(dāng)前方塊和左1方塊文本字符相等num = Integer.parseInt(str);scores += num;times+;str = String.valueOf(2 * num); / 返回 int參數(shù)的字符串表示形式te*tsij - 1.setTe*t(str);/ 左1方
43、塊文本字符變?yōu)閮煞綁K之和setColor(i, j - 1, str);te*tsij.setTe*t();/ 當(dāng)前方塊字符置空setColor(i, j, );a = j;biaoji = 1;p1 = 1; Create(); break;case KeyEvent.VK_RIGHT:case KeyEvent.VK_D:biaoji = 0;for (int i = 0; i 4; i+) a = 5;for (int k = 0; k = 0; j-) str = te*tsij.getTe*t();str1 = te*tsij + 1.getTe*t();if (str1.pareT
44、o() = 0) if (str.pareTo() != 0)biaoji = 1;te*tsij + 1.setTe*t(str);setColor(i, j + 1, str);te*tsij.setTe*t();setColor(i, j, ); else if (str.pareTo(str1) = 0 & j != a& j != a + 1) num = Integer.parseInt(str);scores += num;times+;str = String.valueOf(2 * num);te*tsij + 1.setTe*t(str);setColor(i, j + 1
45、, str);te*tsij.setTe*t();setColor(i, j, );a = j;biaoji = 1;p2 = 1; Create(); break;case KeyEvent.VK_UP:case KeyEvent.VK_W:biaoji = 0;for (int j = 0; j 4; j+) a = 5;for (int k = 0; k 3; k+) for (int i = 1; i 4; i+) str = te*tsij.getTe*t();str1 = te*tsi - 1j.getTe*t();if (str1.pareTo() = 0) if (str.pa
46、reTo() != 0)biaoji = 1;te*tsi - 1j.setTe*t(str);setColor(i - 1, j, str);te*tsij.setTe*t();setColor(i, j, ); else if (str.pareTo(str1) = 0 & i != a& i != a - 1) num = Integer.parseInt(str);scores += num;times+;str = String.valueOf(2 * num);te*tsi - 1j.setTe*t(str);setColor(i - 1, j, str);te*tsij.setT
47、e*t();setColor(i, j, );a = i;biaoji = 1;p3 = 1; Create(); break;case KeyEvent.VK_DOWN:case KeyEvent.VK_S:biaoji = 0;for (int j = 0; j 4; j+) a = 5;for (int k = 0; k = 0; i-) str = te*tsij.getTe*t();str1 = te*tsi + 1j.getTe*t();if (str1.pareTo() = 0) if (str.pareTo() != 0)biaoji = 1;te*tsi + 1j.setTe
48、*t(str);setColor(i + 1, j, str);te*tsij.setTe*t();setColor(i, j, ); else if (str.pareTo(str1) = 0 & i != a& i != a + 1) num = Integer.parseInt(str);scores += num;times+;str = String.valueOf(2 * num);te*tsi + 1j.setTe*t(str);setColor(i + 1, j, str);te*tsij.setTe*t();setColor(i, j, );a = i;biaoji = 1;
49、p4 = 1; Create(); break;case KeyEvent.VK_Z:if (p1 = 0 | p2 = 0 | p3 = 0 | p4 = 0)for(int i = 0; i 4; +i)for(int j = 0; j 4; +j)if(temp1ij = 0) te*tsij.setTe*t();else te*tsij.setTe*t( String.valueOf(temp1ij) );temp2ij = temp1ij;setColor(i, j, te*tsij.getTe*t();scores = temp1scores;temp2scores = temp1
50、scores;break;default: break;if(ma*scores=scores)ma*scores=scores;Recorder.setMa*scores_2048(ma*scores);Recorder.keepRecording();currentScores.setTe*t(SCORE+String.valueOf(scores)+);labelMa*Scores.setTe*t(BEST+String.valueOf(ma*scores)+);/ 最高得分標(biāo)簽/ 鼠標(biāo)移動的輸入事件的處理方法protected void do_label_keyPressed(int
51、option) int a; / a的引入是為了防止連加的情況出現(xiàn)String str;String str1;int num;switch (option) case 1:biaoji = 0; / 標(biāo)記左邊能不能合并for (int i = 0; i 4; i+) a = 5;for (int k = 0; k 3; k+) / 讓左邊每2個能合并的全合并了for (int j = 1; j 4; j+) / 遍歷16個方塊str = te*tsij.getTe*t();/ 獲取當(dāng)前方塊標(biāo)簽文本字符str1 = te*tsij - 1.getTe*t();/ 獲取當(dāng)前左1方塊標(biāo)簽文本字符i
52、f (str1.pareTo() = 0) / 如果左1方塊文本為空字符if (str.pareTo() != 0)biaoji = 1; / 如果向左能移,就標(biāo)記一下te*tsij - 1.setTe*t(str);/ 字符左移setColor(i, j - 1, str);te*tsij.setTe*t();/ 當(dāng)前方塊字符置空setColor(i, j, ); else if (str.pareTo(str1) = 0) & (j != a)& (j != a - 1) / 如果當(dāng)前方塊和左1方塊0文本字符相等num = Integer.parseInt(str);scores += n
53、um;times+;str = String.valueOf(2 * num); / 返回 int參數(shù)的字符串表示形式te*tsij - 1.setTe*t(str);/ 左1方塊文本字符變?yōu)閮煞綁K之和setColor(i, j - 1, str);te*tsij.setTe*t();/ 當(dāng)前方塊字符置空setColor(i, j, );a = j;biaoji = 1;p1 = 1; Create(); break;case 2:biaoji = 0;for (int i = 0; i 4; i+) a = 5;for (int k = 0; k = 0; j-) str = te*tsij
54、.getTe*t();str1 = te*tsij + 1.getTe*t();if (str1.pareTo() = 0) if (str.pareTo() != 0)biaoji = 1;te*tsij + 1.setTe*t(str);setColor(i, j + 1, str);te*tsij.setTe*t();setColor(i, j, ); else if (str.pareTo(str1) = 0 & j != a& j != a + 1) num = Integer.parseInt(str);scores += num;times+;str = String.value
55、Of(2 * num);te*tsij + 1.setTe*t(str);setColor(i, j + 1, str);te*tsij.setTe*t();setColor(i, j, );a = j;biaoji = 1;p2 = 1; Create(); break;case 3:biaoji = 0;for (int j = 0; j 4; j+) a = 5;for (int k = 0; k 3; k+) for (int i = 1; i 4; i+) str = te*tsij.getTe*t();str1 = te*tsi - 1j.getTe*t();if (str1.pa
56、reTo() = 0) if (str.pareTo() != 0)biaoji = 1;te*tsi - 1j.setTe*t(str);setColor(i - 1, j, str);te*tsij.setTe*t();setColor(i, j, ); else if (str.pareTo(str1) = 0 & i != a& i != a - 1) num = Integer.parseInt(str);scores += num;times+;str = String.valueOf(2 * num);te*tsi - 1j.setTe*t(str);setColor(i - 1
57、, j, str);te*tsij.setTe*t();setColor(i, j, );a = i;biaoji = 1;p3 = 1; Create(); break;case 4:biaoji = 0;for (int j = 0; j 4; j+) a = 5;for (int k = 0; k = 0; i-) str = te*tsij.getTe*t();str1 = te*tsi + 1j.getTe*t();if (str1.pareTo() = 0) if (str.pareTo() != 0)biaoji = 1;te*tsi + 1j.setTe*t(str);setC
58、olor(i + 1, j, str);te*tsij.setTe*t();setColor(i, j, ); else if (str.pareTo(str1) = 0 & i != a& i != a + 1) num = Integer.parseInt(str);scores += num;times+;str = String.valueOf(2 * num);te*tsi + 1j.setTe*t(str);setColor(i + 1, j, str);te*tsij.setTe*t();setColor(i, j, );a = i;biaoji = 1;p4 = 1; Crea
59、te(); break;default: break;if(ma*scores=scores)ma*scores=scores;Recorder.setMa*scores_2048(ma*scores);Recorder.keepRecording();currentScores.setTe*t(SCORE+String.valueOf(scores)+);labelMa*Scores.setTe*t(BEST+String.valueOf(ma*scores)+);/ 最高得分標(biāo)簽/ 在隨機(jī)位置產(chǎn)生一個2號或4號方塊的方法public void Create() int i, j;/用于記錄
60、產(chǎn)生的二維方陣的下標(biāo)值boolean r = true;String str;if (times 0 & biaoji = 1) while (r) i = random.ne*tInt(4);j = random.ne*tInt(4);str = te*tsij.getTe*t();if (str.pareTo() = 0) int ima = 2 * (int) (1 + Math.random() * 2);/ 隨機(jī)產(chǎn)生2或4String imass = String.valueOf(ima);te*tsij.setTe*t(imass);setColor(i, j, imass);ti
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年K2教育中STEM課程實(shí)施與效果評估:創(chuàng)新教育模式
- 結(jié)腸造瘺術(shù)后并發(fā)癥及防治策略2025
- 小升初六年級數(shù)學(xué)下冊??家卓贾R點(diǎn)課件《第六單元第3講:因數(shù)與倍數(shù)》人教版
- 低空經(jīng)濟(jì)八大應(yīng)用場景與實(shí)踐案例解析方案
- 大數(shù)據(jù)背景下高職院校電子商務(wù)專業(yè)課教學(xué)創(chuàng)新研究
- 華為體驗(yàn)店培訓(xùn)材料:云服務(wù)
- 2024年油氣水輸送管材專用料資金籌措計(jì)劃書代可行性研究報告
- 山東省菏澤市巨野縣2024-2025學(xué)年八年級下學(xué)期期中生物試題 (含答案)
- 現(xiàn)場管理試題及答案
- 物理必修一試題及答案
- 法律文書寫作能力測試題庫及解答分析
- 2025合作合同范本:兩人合伙協(xié)議書模板
- 外賣騎手勞務(wù)合同協(xié)議書
- T/CAMIR 002-2022企業(yè)技術(shù)創(chuàng)新體系建設(shè)、管理與服務(wù)要求
- DB31/T 595-2021冷庫單位產(chǎn)品能源消耗指標(biāo)
- 第五章 SPSS基本統(tǒng)計(jì)分析課件
- 2025年計(jì)算機(jī)Photoshop操作實(shí)務(wù)的試題及答案
- 2025時事熱點(diǎn)政治題及參考答案(滿分必刷)
- GB/T 23453-2025天然石灰石建筑板材
- 2024-2030全球WiFi 6移動熱點(diǎn)行業(yè)調(diào)研及趨勢分析報告
- 砌磚理論考試題及答案
評論
0/150
提交評論