版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、-. z.JAVA语言程序设计课程设计报告2048智力小游戏设计专业班级:计算机科学与技术嵌入13-1 学生*:卓海有学生*:小组成员:单建飞堵文斐李栋承梅孔伟指导教师*:宋强-. z.目录TOC o 1-2 h u HYPERLINK l _Toc16951.前言1HYPERLINK l _Toc287902.游戏需求分析1HYPERLINK l _Toc86332.1 需求分析1HYPERLINK l _Toc98172.2 可行性分析2HYPERLINK l _Toc251373.概要设计3HYPERLINK l _Toc293614.详细设计4HYPERLINK l _Toc22801
2、4.1流程图4HYPERLINK l _Toc7334.2界面的整体布局4HYPERLINK l _Toc38724.3方法模块分析5HYPERLINK l _Toc112815.测试8HYPERLINK l _Toc133166.总结10HYPERLINK l _Toc133166.参考文献10HYPERLINK l _Toc215107.局部源代码:10-. z.一、前言最近以来,移动手游越来越成为当下游戏产业中重要的一环,市场也在加大对这一产业的投入,涌现出了愤怒的小鸟,水果忍者,flappy bird,2048等诸多优秀的手游,然而任何一款手游能够风行,主要还是依靠其简单的操作性,因此
3、本次java课设我选择其中的典型2048PC版作为本次课设的课题。2048游戏规则很简单,玩家每次可以选择上下左右其中一个方向去移动,每移动一次,所有的数字方块都会往移动的方向靠拢外,系统也会在空白的地方随机出现一个数字方块,一样数字的方块在靠拢、相撞时会相加。系统给予的数字方块不是2就是4,玩家要想方法在这小小的16格*围中凑出“2048这个数字方块。二、游戏需求分析2.1需求分析现代社会对休闲小游戏的需求是:提高游戏的操作可行性,降低游戏的操作难度,降低游戏的上手难度,降低游戏的竞争需求,对使用设备的要求趋于简单化和多样化,游戏界面更加人性化,功能更加贴合使用。1界面一款的好的游戏其界面必
4、须友好,简洁已经成为当今UI设计的主流,简单易上手才能得到玩家的青睐。2功能需求能够显示游戏的当前得得分,并记录游戏的最高分并显示,当在次翻开游戏时,能够显示最高分;在游戏进展的过程中循环播放音乐,并能够关闭音乐或者翻开音乐;游戏的主界面上,一样的数字要显示一样的颜色。游戏完毕要有相应的提示。游戏的主要目的是通过上下左右移动来将相邻一样的数字相加,通过不断地累加最终加到2048。3操作性需求游戏的体验是衡量一款游戏的关键,本游戏可通过键盘w,s,a,d以及方向键来控制方块的移动,还可以通过在游戏的主面板中向上下左右拖动鼠标来控制方块的移动,左右手都可以操作,充分考虑便捷性。不同的人有不一样习惯
5、,通过多种方式来操作游戏,可以各种习惯的人的需求。2.2可行性分析1面向对象的程序设计方法Java面向对象程序设计的根本思想是通过构造和组织对象来求解问题的。对象是很好理解的,任何一种物体都可以被认为是对象,例如,汽车就是一种对象。对象具有两个最根本的属性:具有一定的物质根底和一定的功能,这两种根本属性在Java语言中表现为拥有一定的存储单元并具备一定的功能。理解了Java的这种面向对象程序设计的根本思想之后,在以后的编程过程中,就应当个构造人们容易理解的更接近于真实物理世界物体的对象。Java面向对象程序设计的过程非常简单。这里介绍一种自顶向下的程序设计方法,首先构造一个类来处理需要解决的问
6、题,然后根据已经拥有的类例如以前求解其它问题时实现的类,分析和构造新的类,设法将问题分解下去,而最开场构造的类通过组织这些新构造的类、已有的类及由他们生成的实例来求解指定的问题。这个过程可以继续递归下去,用在新构造的类上,直到最后解决了指定的问题,例如Java的应用程序和小应用程序都必须有一个类作为入口求解问题。在计算机语言中,面向对象的类一般具有三个根本特性:封装性、继承性和多态性,这三种特性进一步简化了Java求解模型,提高了程序的复用性,节省了程序的代码量,从而提高了软件的生产率。2java技术分析图形用户界面不仅可以提供各种数据的根本图形的直观表示形式,而且可以建立友好的交互方式,从而
7、使计算机软件可以设计得十分简单易用。从Java语言诞生到现在,Java语言已经提供了两代图形用户界面。第一代图形用户界面AWT提供了根本的图形用户界面,它强烈地依赖于具体的计算机操作系统,而且缺少根本的剪贴板和打印支持功能。现在第二代图形用户界面Swing对AWT进展了扩展,Swing不仅在功能上比AWT强大,而且在很大程度上克制了AWT的上述缺点,它所设计的图形用户界面与具体的计算机操作相关性很小,而且可以定制指定的操作系统风格的图形用户界面。GUI图形用户界面组件构成了图形用户界面的根底。在Java程序设计中,要求按照一定的布局方式将组件安排在容器中,然后通过事件处理的方式实现人机交互,而
8、容器本身也是组件,这样在容器中也可以含有容器,从而可以通过这种嵌套方式方便地组合各种组件。事件处理模型是Java语言提供的一种人机交互模型,它使得用户能够通过鼠标、键盘或其他输入设备来控制程序的执行流程,从而到达人机交互的目的。对鼠标、键盘或其他输入设备的各种操作一般也称为事件。Java语言对这些事件的处理模型是采用面向对象的方法,即通过对象的形式把各种事件进展封装和处理。这种事件处理模型的三个根本要素是事件源、事件对象以及事件监听器。事件源是各种组件,是承受各种事件的对象。在各种事件源上运用鼠标、键盘或其他输入设备进展各种操作,就会有事件发生。每种操作一般都对应着事件,Java语言通过事件对
9、象来包装这些事件。对事件进展处理是通过事件监听器实现的。因为鼠标事件也是一种事件,所以对鼠标事件进展处理要遵循事件处理模型。鼠标事件的处理也是建立在事件源的根底之上,以事件对象本身,最后通过事件监听器进展处理。类包装常用的鼠标事件,例如,按下鼠标键和放开鼠标键等。类MouseEvent的实例对象记录了鼠标的当前位置和状态发生变化的鼠标键等。对鼠标事件进展处理最关键的是实现事件监听器接口。这些相关接口包括MouseListener,MouseMotionListener,MouseWheelListener,MouseInputListener。前面三个是包中的接口,最后一个接口MouseInp
10、utlistener来自包。接口主要用来处理按下鼠标键、放开鼠标键、单击鼠标键、鼠标进入组件内和鼠标离开组件区域等事件。对鼠标事件进展处理,就是要设计类,实现上面的鼠标事件监听器接口,然后在事件源中注册处理鼠标事件监听器的对象,以便对鼠标事件进展处理。概要设计详细设计流程图界面的整体布局分别构建mainPane,scoresPane两大模块放入游戏窗体,其中scoresPane包含2048字样的提示,当前得分和最高分,当得分超过最高分时,将得分存入工程文件夹下的myRecording.t*t,覆盖最高分,同时在最高分显示最新myRecording.t*t的内容。通过Create方法随机产生2号
11、方块或者4号方块,通过setColor方法设置每个数字代表的方块颜色。方法模块分析方法1:设置标签颜色,每次随机产生2或4和数字合并之后就要调用该方法来设置标签的颜色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:在随机位置产生一个2号或4号方块的方法,同时该方法也用于判断游戏是否完毕。publicvoid Create() int i, j;/用于记录产生的二维方阵的下标值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);/ 随机产生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;/记录当前的状态for(int p = 0; p 4; +p)for(int q = 0; q 0 & p2 0 & p3 0 & p4 0)/ l1到l4同时被键盘赋值为1说明任何方向键都不能产生新的数字,说明游戏失败tips.setTe*t( 游戏完毕!);currentScores.setTe*t(SCORE+String.valueOf(scores)+
16、);JOptionPane.showMessageDialog(null,游戏完毕!);System.e*it(0);方法3:通过鼠标左键的按下与释放来判断向那个方向拖动,拖动实现主要是通过记录按下鼠标左键时鼠标指针的位置,然后在记录鼠标左键释放时指针的位置坐标,通过对两次的坐标值计算处理,可以得到鼠标指针移动的方向,在将获得的方向值传到do_label_keyPressed(int)函数中,从而到达移动的目的。publicvoid mousePressed(MouseEvent e) / TODO Auto-generated method stub/鼠标按下/假设鼠标位置在灰色的区域内则记
17、录鼠标左键按下时的坐标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(向下方向移动);/将上一次的鼠标位置清零this.*1=0;this.y1=0;this.*2=0;this.y2=0;do_label_keyPressed(option);方法4:从文件中读取,记录。从文件中读取记录,同时也要将新的数据保存到文件中。读取文件需要解决的问题是,当程序首次运行的时候,文件不存在,这时不仅不能从文件中读数据,还要创立相应的文件。创立文件之后,接下来在运行程序就能读取到数据。文件读取完毕要将文件关闭。publicstaticvoid getRecording()boolean flag=fa
19、lse;/用于判断文件是否是新创立的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 /关闭文件流的顺序,先开的后关闭if(!
20、flag)br.close();fr.close(); catch (E*ception e2) / TODO: handle e*ceptione2.printStackTrace();测试1首次运行程序在工程文件中建立保存最高分的文件和再次运行程序2游戏完毕六、总结在这次的课程设计中不仅检验了我所学习的知识,也培养了我的实践能力,让我知道遇到一个问题,如何去寻找思路,如何去解决问题,最终完成整个事情。课程设计是我们专业课程知识综合应用的实践训练,是我们迈向社会,从事职业工作前一个必不少的过程。这次课程设计不仅是对这学期所学知识的一种综合检验,而且也是对自己动手能力的一种提高,增强了自己实践
21、能力。通过这次课程设计使我明白了自己知识还比拟欠缺,只是学习书本知识还是远远不够的,自己不会的东西还有太多,学习需要自己长期的积累,在以后的学习、工作中都应该不断的学习,将课本的理论知识与生活中的实践知识相结合,不断提高自己文化知识和实践能力。由于本次试验的很多知识都是现学现用,以致很多地方的代码显得累赘繁琐。但总体上主要功能是实现了的,并且美化了一下主界面,使得界面更加简洁。最后也感谢教师给予的耐心指导与帮助。总之,此次课程设计让我获益匪浅,我将会继续把它完善做好参考文献1 java语言程序设计根底篇M.机械工业.2011.3.2 黄晓东.Java课程设计案例精编M.:中国水利水电,2007
22、.5.3 求是科技. Java信息管理系统开发实例导航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);/(设置)该对象的焦点,不能用请求焦点对象名.requestFocus();/构造函数public My2048Game()mp=new MyPanel();this.add(mp);/注册鼠标监听this.addMouseListener(mp);/注册键盘监听this.addKeyListener(mp);this.setTitle(2048游戏);this.setLocation(400, 30);this.setSiz
24、e(500, 800);this.setResizable(false);/制止调整窗口大小this.setDefaultCloseOperation(JFrame.E*IT_ON_CLOSE);this.setVisible(true);class MyPanel e*tends JPanel implements MouseListener,KeyListener,ActionListener/动作监听器一般用于监听按钮或者菜单的点击事件private int *1=0,y1=0;/按下鼠标左键的位置坐标private int *2=0,y2=0;/释放鼠标左键的位置坐标private i
25、nt option=0;/记录鼠标移动的方向/定义组件private utton 1;/声音图标的按钮private static boolean 1_flag=true;/用于控制声音开关的一个标志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; / 分数面板private JPanel mainPa
26、ne; / 游戏主面板private JLabel labelMa*Scores; / 最高分标签private JLabel m2048;/显示2048private JLabel labelScores; / 当前得分标签private JLabel tips;/ 提示操作标签private JLabel currentScores;private JLabel te*tScores;private JLabel te*ts; / 创立文本框二维数组private int temp1 = new int 44; /记录上一步的状态private int temp2 = new int 44
27、; /记录当前的状态private int times = 16;/ 记录剩余空方块数目private int scores = 0;/ 记录分数private int ma*scores=0;/最高分private int temp1scores = 0;private int temp2scores = 0;private int p1, p2, p3, p4;/ 用于判断游戏是否失败private int biaoji = 1; /标记能否移动Font font = new Font(, Font.BOLD, 14); / 设置字体类型和大小标签字体的设置Font font2 = new
28、 Font(, Font.BOLD, 30); / 主面板的数字字体的设置Random random = new Random();/构造函数public MyPanel()super();/调用父类的构造方法/在构造函数中创立组件this.setLayout(null);/ 设置空布局this.setBackground(new Color(2,150,220);/设置该MyPanel类的背景颜色scoresPane=new JPanel();/创立分数显示面板scoresPane.setBackground(new Color(5,150,220);/设置分数面板的背景颜色scoresPa
29、ne.setBounds(0,0,482,100);/设置该面板显示的位置和长宽/scoresPane.setBorder(BorderFactory.createMatteBorder(2, 2, 2, 2, Color.yellow);/设置该面板的边框this.add(scoresPane);/将分数面板加载到MyPanel面板上scoresPane.setLayout(null);/设置得分面板的布局为空m2048=new JLabel(2048);/创立标签/m2048.setBorder(BorderFactory.createMatteBorder(2, 2, 2, 2, Col
30、or.yellow);m2048.setFont(new Font(宋体, Font.BOLD, 45);/设置字体类型和大小m2048.setBounds(0,0,120,100);scoresPane.add(m2048);currentScores = new JLabel();/ 当前得分标签currentScores.setTe*t(SCORE+String.valueOf(scores)+);currentScores.setFont(new Font(宋体, Font.BOLD, 30);/ 设置字体类型和大小/currentScores.setBorder(BorderFact
31、ory.createMatteBorder(0,0, 0, 1, Color.yellow);currentScores.setBounds(240,0, 140, 100);/ 设置最高分标签的位置尺寸scoresPane.add(currentScores);/ 将最高分标签添加到得分容器中/从文件取得最高分的数据Recorder.getRecording();ma*scores=Recorder.getMa*scores_2048();labelMa*Scores = new JLabel(BEST+String.valueOf(ma*scores)+);/ 最高得分标签labelMa*
32、Scores.setFont(new Font(宋体, Font.BOLD, 30);/ 设置字体类型和大小/labelMa*Scores.setBorder(BorderFactory.createMatteBorder(2, 2, 2, 2, Color.yellow);labelMa*Scores.setBounds(380, 0, 120, 100);scoresPane.add(labelMa*Scores);/ 将得分标签添加到分数面板中1=new utton(new ImageIcon(src/声音图标.jpg);1.setBounds(433,120,45,30);this.a
33、dd(1);/注册按钮监听1.setActionmand(shengyin);1.addActionListener(this);mainPane = new JPanel();/ 创立游戏主面板mainPane.setBounds(18, 150, 460, 460);/ 设置主面板位置尺寸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);/ 设置空布局te*ts = new JLabel44;/ 创立文本框二维数组for (int i = 0; i 4; i+) / 遍历数组for (int j = 0; j 4; j+) te*tsij = new JLabel();/ 创立标签te*tsij.setFont(font2);te*tsij.setHorizontalAlignment(SwingConstants.CENTER); / 设置标签内容沿*轴的对齐方式;*区域的中心位置te*tsij.setTe*t();te*tsij.setBounds(110 * j+15, 110 * i+15,
35、 100, 100);/ 设置方块的大小位置setColor(i, j, );te*tsij.setOpaque(true); / 设置控件不透明/te*tsij.setBorder(BorderFactory.createMatteBorder(2, 2, 2,/2, Color.green);/ 设置方块边框颜色mainPane.add(te*tsij);/ 将创立的文本框放在主面板中tips = new JLabel(小提示:在灰色区域内按下鼠标左键并向上下左右方向拖动 &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(); / 初始时在随机位置产生一个2号或4号方块Create();/记录一下当前的状态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();/ 设置标签颜色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的引入是为了防止连加的情况出现String str;String str1;int num;switch (code) case KeyEvent.VK_LEFT:case KeyEvent.VK_A: / 如果按键代码是左方向键或者A键b
41、iaoji = 0; / 标记左边能不能合并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();/ 获取当前方块标签文本字符str1 = te*tsij - 1.getTe*t();/ 获取当前左1方块标签文本字符if (str1.pareTo() = 0) / 如果左1方块文本为空字符if (str.pareTo() != 0)biaoji = 1; / 如果向左能移,就标记一下te*t
42、sij - 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) / 如果当前方块和左1方块文本字符相等num = Integer.parseInt(str);scores += num;times+;str = String.valueOf(2 * num); / 返回 int参数的字符串表示形式te*tsij - 1.setTe*t(str);/ 左1方
43、块文本字符变为两方块之和setColor(i, j - 1, str);te*tsij.setTe*t();/ 当前方块字符置空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)+);/ 最高得分标签/ 鼠标移动的输入事件的处理方法protected void do_label_keyPressed(int
51、option) int a; / a的引入是为了防止连加的情况出现String str;String str1;int num;switch (option) case 1:biaoji = 0; / 标记左边能不能合并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();/ 获取当前方块标签文本字符str1 = te*tsij - 1.getTe*t();/ 获取当前左1方块标签文本字符i
52、f (str1.pareTo() = 0) / 如果左1方块文本为空字符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) / 如果当前方块和左1方块0文本字符相等num = Integer.parseInt(str);scores += n
53、um;times+;str = String.valueOf(2 * num); / 返回 int参数的字符串表示形式te*tsij - 1.setTe*t(str);/ 左1方块文本字符变为两方块之和setColor(i, j - 1, str);te*tsij.setTe*t();/ 当前方块字符置空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)+);/ 最高得分标签/ 在随机位置产生一个2号或4号方块的方法public void Create() int i, j;/用于记录
60、产生的二维方阵的下标值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);/ 随机产生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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 土建包清工工程合同
- 二手叉车买卖合同
- 劳动法 不签合同
- 房地产销售合同
- 用公司签订合同
- 热网施工合同
- 医院食堂设施设备管理
- 工业废油回收协议书
- 中公面试协议书退费
- 金蝶代理协议书
- GB 38454-2019坠落防护水平生命线装置
- (妇产科学)第十八章 女性生殖系统炎症课件
- 风电场、光伏电站一次调频技术方案(含试验方案)课件
- 情态动词 完整版课件
- 无锡市惠山区2022-2023九年级初三上学期物理期中试卷+答案
- 腹膜透析平衡试验图课件
- 对外汉语初级教学(餐厅点餐)市公开课金奖市赛课一等奖课件
- GB∕T 17627-2019 低压电气设备的高电压试验技术 定义、试验和程序要求、试验设备
- Q∕SY 1557-2012 测井电缆深度标准井技术规范
- 土木工程材料- 无机胶凝材料PPT教案
- 工程造价与招投标课程设计 任务书
评论
0/150
提交评论