2048小游戏设计_第1页
2048小游戏设计_第2页
2048小游戏设计_第3页
2048小游戏设计_第4页
2048小游戏设计_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.2048小游戏(1) 程序介绍2048是一款益智小游戏,玩家需要在l6个格子中通过数字叠加的方法将最初的数字2凑成数字2048。有16个格子,初始时会有两个格子上安放了两个数字2, 每次可以选择上下左右其中一个方向去滑动, 每滑动一次, 所有的数宇方块都会往滑动的方向靠拢外, 系统也会在空自的地方随即出现一个数字方块,相同数字的方块在靠拢、相撞时会相加。 2o48是比较流行的一款数字游成a本课程设计通过设计与开发 JvM平台上的2048游戏,进一步掌握所学Java课程的知识, 体验 Java的跨平台性, 同时将 Java设计方面的知识拓展应用(二) 功能需求描述l、图形用户界面: 2048的最大特点就是玩家对图形界面里的数字进行操作, 也就是是玩家与游戏的互动2、当前分数 scoRE 与最高分数的显示:在我们设计的2048游戏中当前分数取了页面i内所有数字相加的值为分数, 对玩家玩游戏的进展有直接性、 客观性的展现, 同时, 最高分数取了以往玩家退出游戏时所保存分数的最高分3、数字颜色游戏中数宇的颜色以2为首項的等比数列变化,即2、4、8、l6、32、 “、128、256、5l2、l024、2048_.对应的数字卡片变色4、游戏的退出:游戏退出时,我们采用弹出对话框的确认玩家是否真的要退出游戏, 当然这样做更符合游戏人性化设计的观念 。(三)玩法技巧:1、 最大数尽可能放在角落 2、数字按顺序紧邻排列3、 首先満足最大数和次大数在的那一列/行是满的 4、 时刻注意活动较大数旁边要有相近的数 5、 以大数所在的一行为主要移动方向6、不要急于“清理桌面”(四)程序说明一个类 Copy2048继承JFrame, 类中包括, 一个构造方法 Copy2048,构造方法中设定游戏界面的大小,背景颜色,边框,字体,标签,布局,位置,记录剩余空方块数目,记录分数,用于判断游成是否失败,用于判断游戏是否失败,设置字体类型和大小, 为最高分标签添加接键监听器, 一个 KeyEvent按键事件, 构造方法中创建游戏主面板,设置主面板位置尺寸,设置空布局,创建文本框二维数组,创建标签,调用时间处理方法, 一个Create2方法,是在随机位置产生一个2号方块的方法, ll到l4同时被键盘赋値为1说明任何方向键都不能产生新的数字2,那就说明游戏失败GAME OVER! 一个setColor方法,是为了产生2l:)48小游戏方块的颜色。(五) 程序结构l.重新开始,若是初次运行游戏,则从文件中读入最高分void restart02.控制方法ptlblic void keyPtessed(KeyEvent e)3.结图方法public void paint(iraphics g)4.判断是否己经失败,若失败则返回true,否则返回falsepablic boolean judgeFai105.向下滑动,若各列均投有方块相相或移动,则返回false,否则返回true; public void moveDown06.向左滑动,若各行均投有方块相相或移动,则返回false,否则返回true; ptlblic void moveLeft07.向右滑动,若各行均投有方块相相或移动,则返回false,否则返回true, public void moveRight08.向上滑动,若各行均投有方块相消或移动,则返回false,否则返回true; Public void moveUp09.在游戏区空用处随机生成2public void generateRandom2 0(6) JAVA制作2048小游戏详细代码import java.awt.Color;import java.awt.EventOueue;import java.awt.BorderLayout;impol1 java.awt.FlowLayout;import java.awt.Font;import java.awt.event.;import java.util. Random;import javax.swing_BorderFactory;import javax.swing_lcon;import javax.swing. lmagelcon;import javax.swing_JFrame;import javax.swing.JLabel;import javax.swing_JPanel;import javax.swing.SwingConstants;import java)(.swing_border.*;import java)(.swing.JTextField;public class Copy2048 extends JFrameprivate JPanel scoresPane;private JPanel mainPane;private JLabel labelMaxScores;private JLabel labelScores;private JLabel tips;private JTextField textMa)(Scores; private JLabel textScores;private JLabel texts;privatelcorl icon2;private int times= 16;private int scores= 0;private int11 ,l2,l3,l4,l5;/提示操作t示签/-记录剩余空方块数目/-记最分数/用 -判断游戏是否失败Font font= new Font(”H, Font.BOLD,14); Font font2 = new Font(-, Font.BOLD,30); Random random= new Random0;/般置字体类型和大小/设置字体类型和大小/随机类实例化public static void main(StringI args)EventOueue.invokeLater(new Runnable0public void run0tryCopy2048 ffame= new Copy20480;frame.setVisible(true);catch(Exception e1)e1 .prlntStact(Trace0;);public Copy20480super0;setFiesizable(false); getContentPane0.setLayout(null);setBounds(500, 50, 500, 615);setDefaultCoseOperation(J Frame. EX0N_CLOSE) ; setTltle(2048PC版) scoresPane= new JPanel0; scoresPane.setBackground(Color.green); scoresPane.setBounds(20, 20, 460, 40);scoresPane.setBorder(BorderFactory.createMatteBorder(2, 2, 2, 2,Color.YELLOW);getContentPane0.add(scoresPane);scoresPane.setLayout(null);labelMaxScores= new JLabel(最高分:); labelMaxScores.setFont(font) ;labelMaxScores.setBounds(10, 5, 50, 30);scoresPane.add(labelMaxScores); textMaxScores= new JTextField( );textMaxScores.setBounds(60, 5, 150, 30);textMaxScores.setFont(font);textMaxScores.setEditable(false);scores Pane.add(textMaxScores) ;数面ili , 1 labelScores= new JLabel(”得 分:); labelScores.setFont(font) ;labelScores.setBounds(240, 5, 50, 30); scoresPane.add(labelScores);textSoores= new JLabe1(String.valueOf(scores); textSoores.setFont(font);textSoores.setBounds(290, 5, 150, 30);scores Pane.add(textScores) ;mainPane= new JPanel0; mainPane.setBounds(20, 70, 460, 500); this.getContentPane0.add(mainPane);mainPane.setLayout(null); /设置空布用texts= new JLabel44;for(int i= 0; i4; i+)for(int j= 0; j4; j+)textsilm= new JLabel0;textsilm.setFont(font2);/创建文本框二维数组/遍历数组/创建 t示签textsilm. setHorizontalAlign me nt(SwingConstants.CENTE R) ; textsilm. setText(-) ;textsilm.setBounds(120* j, 120*i, 100, 100); /设置方块的大小位置setColor(l, j, ”);te),(tsilm. setOpaque(true) ;textsilm.setBorder(BorderFactory.createMatteBorder(2, 2, 2,2, Color.green);/设置方決边框颜色main Pane.add(textsilm) ;文本框放在tips=newJLabel(Tips:使用上、下、左、右键或者W、 S、 A、 D键控制H);tips.setFont(font);tips.setBounds(60,480,400,20)main Pane.add(tips) ;textMaxScores.add KeyListe:ner( new KeyAdapte r0高分标签添加接键监所器publicvoid keyPressed( KeyEvente)(do_label_keyPressed(e) ;);/调用时同处理方法Create20;Create20; /t* 接键输入事件的处理方法param e*/protected void do_label_keyPressed(fina KeyEvent e)int code= e.getKeyCode0;/获取接键代码inta;String str;Strirlg str1 ;int num;switch(oode)(case KeyEvent.VK_LEFT:case KeyEvent.VK_A:或者A键for(int i= 0; i:4; i+)a=5;/a 的引入是为了防止上连加的情況出现/如果按键代码是左方向键for(int k= 0; k 3; k+)for(int j= 1 ; j4; j+)str= textsilm.getTe)(t0;/遍历1 6个方块/获取当前方块标签文本字符str1 =textsij-1.getText0; /获取当前左1方块r(l00.;Ca -一 s al0本示:整文本字特if(pareTo() = 0)/如果左1方块文本为空字符textsi-1 .setText(str) ; setColor(i,j-1 ,str);textsilm.setText() ;/字符左移/当前方.映字符a-1 )setColor(i, j,川);else if(pareTo(str1) = 0) & 0l=a) & (j!=/如果当前方映 和左1方块文本字fii:相等num =lnteger.parselnt(str);scores+= num;timeS十十;str= String.valueOf(2 num);textsi-1.setText(str); setColor(i,j-1 , str);textsilm.setTe)(t(”) ;/当前方央字符l1=1;Create20; break;/用-一判断游戏是否失败case KeyEvent.VK_RIGHT:case KeyEvent.VK_D:for(int i= 0; i4; i+)a=5;for(int k , 0; k= 0; j-)str= textsilm.getTe)(t0;str1 = textsij +1.getText0;if(pareTo()= 0)textsij+ 1.setText(str);setC0lor(i, j十1, str);textsin.setText() ;setColor(i, j,川);elself(pareTo(str1)= 0& j!=a& j!= a+1)num =lnteger.parselnt(str);scores+= num;timeS+;str= String.valueOf(2 num);textsil +1.setText(str);setC0lor(i, j十1 , str);textsill.setTe)(t() ;setColor(i, j,);a=j;l2=1;Create20;break;case KeyEvent.VK_llP:case KeyEvent.VK_W:for(int j= 0; j4; j十十)a=5;for(int k= 0; k 3; k+)for(int i= 1; i4; i+)str = textsilm.getText0;str1 = textsi- 1m.getTe)(t0;if(pareTo() = 0)textsi- 1m.setText(str);setColor(i-1, j, str);textsijl.setTe)(t() ;setColor(i, j,);else if(pareTo(str1) = 0& i!= a& i!= a-1)num =lnteger.parselnt(str);scores+= num;times十十;str= String.valueO,f(2 num);textsi- 1m.setText(str);setColor(i-1, j, str);textsijl.setTe)(t() ;setColor(i, j,-);a=i;l3 =1;Create20;break;case KeyEvent.VK_DOWN:case KeyEvent.VK_S:for(int j= 0; j:4; j十十)(a= 5;for(int k= 0; k= 0; i-)str= textsilm.getTe)(t0;str1 =textsi+1m.getText0;if(pareTo() = 0)te)(tsi+1m.setText(str);setC0lor(i+1, j, str);te)(tsin.setText(-) ;setColor(i, j,);else if(pareTo(str1)= 0& i!= a& il= a+1)num ,lnteger.parselnt(str);scores+= num;timeS+;str= String.valueOf(2 num);textsi+1m.setText(str);setC0lor(i+1, j, str);textsin.setText(”) ;setColor(i, j,);a=i;l4=1;Create20;break;default:break;textScores.setTe)(t(Stri ng.valueOf (soores) ;在随机位皆产生一个2 ,1,方ji 的方法(fppa1-al1 i,j/public void Create20int i,j;boolean r= false; String str;if(times: 0)while(!r)i= random.ne)(tlnt(4);j= random.ne)(tlnt(4);str= textsilm.getText0;if(pareTo(”) = 0)textsilm.setlcon(icon2) ;textsilm.setText(2”) ;setColor(i, j, 2);times-;r= true;l1=i2=13=l4=0;else if(l1 0& l2 0& l3 0& l4 0) /l1到l4同时被键盘賦值为1说明任何方向键都不能产生新的数字2, 说明游戏失败tips.setText( GAME OVER!);/tt*设置标签颜色param i, j,str */public void setCo1or(int i, int j, String str)if(str=2)te)(tsilm.setBackground(Color.yellow) ;else if(str=4)textsilm.setBackground(Color.red);else if(str=”8)textsilm.setBackground(Color.plnk);else if(str=16”)textsilm.setBackground(Color.orange);else if(str=32)textsilm. setBackg round(Color. magenta) ;else if(str=64)textsilm.setBackground(Color.LIGHT_GRAY); else if(str=128”)textsilm. setBackg round(Color.green) ;else if(str=256”)textsi m. setBackg rou nd(Color.gray) ;else if(str=512”)textsilm. setBackg round(Color. DARK_GRAY) ; else if(str=1024)textsi m. s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论