Java完美实现2048小游戏_第1页
Java完美实现2048小游戏_第2页
Java完美实现2048小游戏_第3页
Java完美实现2048小游戏_第4页
Java完美实现2048小游戏_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

1、java完美实现2048小游戏本文给大家分享的是一则根据网友的代码改编的2048小游戏的源码,个人认为已经非常完 美了,推荐给大家,有需要的小伙伴可以参考下。完美地模仿了 2048游戏,是根据网友的一个2048改的。block.javaimport javax.swing. *;import java.awt.*;public class block exte nds j label private int value; public block() value = 0;/初始化值为 0 setfont(new fontc'font", font.plain, 40);/设定

2、字体 setbackground(color.gray);/设定初始颜色为灰色 public int getvalue()获取值 return value; public void setvalue(int value) this.value =value; string text = string.valueof(value);if (value != 0)settext(text); elsesettext("");/如果值为 0 则不显示setcolor(); public void setcolorf) 根据值的不同设定不同的背景颜色、label字体 switch

3、(value) case 0:setbackground(color.gray);break; case 2:setbackground(new color(238, 228,218);break; case 4:setbackground(new color(238, 224, 198);break;case 8:setbackground(new color(243, 177, 116);break; case 16:setbackground(new color(243, 177, 116);break; case 32:setbackground(newcolor(248, 149,

4、90); break; case 64:setbackground(new color(249, 94, 50);break; case 128:setbackground(new color(239,207, 108); break; case 256:setbackground(new color(239, 207, 99);break; case 512:setbackground(newcolor(239, 203, 82);break; case 1024:setbackground(new color(239, 199, 57);break; case 2048:setbackgr

5、ound(new color(239, 195, 41);break; case4096:setbackground(new color(255, 60, 57);break;my2048.javaimport java.awt.*;import javax.swing*;public class my2048 extends jframe public my204&)/构造函数 settitle(,2048h);/设置标题 setsize(400, 400);/设定窗口大小setlocation(500z 200);/ 设定窗 口起始位置setdefaultcloseoperatio

6、n(j frame.exit_on_close);getcontentpane().setlayout(newgridlayout(4z 4, 5, 5);/ 设定布局方式为 gridlayout 型new operation(this);this.setvisible(true);设为可视 public static void main(string args) 程序入口点 tryulma nager.setlooka ndfeel(”orgjv net.substa nce.ski n.substa ncerave ngraphitelooka ndfeel");/ 设定 ul

7、接受抛出的异常catch (classnotfoundexception |instan tiati on exception | hlegalaccessexceptio n | unsupportedlooka ndfeelexceptio n e) e.printstacktrace(); jframe.setdefaultlookandfeeldecorated(true); 设定frame 的缺省外观 new my2048(); operati on.j avaimport java.awt.eve nt*;import javax.swing.*;public class oper

8、ati on implements keylistener block block;/ 用于储存 16 个数据 jpanel panel; public boolean up,down,left,right; int moveflag;/ 用于累计移动的次数 boolean numflag;/用于判断是否还能加入新的数字 public operation(jframe frame) this.panel = (jpanel)frame.getcontentpane();/构造出 panel block = new block16;/构造出长度为16的数组numflag = true;/初始化m

9、oveflag = 0;up=true;down二true;left=true;right=true;addblock(); for (int i = 0; i < 2; j+)appearblock();frame.addkeyliste ner(this); 0; i < 16; i+) / 往 panel 里加入 block blocki.sethorizontalalignment(jlabel.center);/ blocki.setopaque(true);透panel.add(blocki); while (numflag) 当还能加入随机的一个新的值得时候(math

10、.random() * 16);/取一个0到15的随机整数,这个数作为随机加入盘屮的2或4的位 置 讦(blockindex.getvalue() = 0)/如果这个数所在的block数组中值为0,即在为空的 吋候,加入一个2或4的数字if (math.random) < 0.5)blockindex.setvalue(2);elseblockindex.setvalue(4);break;/跳出 while public void judgeappearf) 统计block数组中是否含有值为0的元素,若没有,则numflag 变为 false int sum = 0;sum+;find

11、(int i,int j,int a,int b) t=o;intfor (int i = 0; i < 16; i+) if (sum = 16) while(i<b&&i>=a) l=l+j;valuej=0;i ntfor(j=i+4;j<16;j+=4)if(valuel=valuej&&valuel !=0&&valuej !=0)blocki ndexsetvalue(valuel+valuej);valuel=0;i ntreturn i;int i=o,j=o;intin dex=i;if(blockind

12、ex.getvalue()=0) blockt.setvalue(0);break;if(blockj.getvalue()=0) blockt.setvalue(0);break;nu mflag = true;in dex=j;int i=o,j=o;int t=o;int valuej=0;intin dex=i;for(j=i-4;j>=0;j-=4)if(blockindex.getvalue()=0) blockt.setvalue(0);break; private void addblock() for (int i = blocki = new block();明 的

13、标 签 public void appearblock() int index = (int)if (blocki.getvalue() != 0)numflag = false; public int 讦(blocki.getvalue()!=0)return public void upblockf)valuel=0;i nt in dex=0;for(i=0;i<4;i+)valuej=0; valuel=0;t=find(index,4,0,16);if(t!=-l)blockindex.setvalue(blockt.getvalue();elsevaluel=blockind

14、ex.getvalue();t=find(j,4,0,16);if(t!=-l)blockj.setvalue(blockt.getvalue();else valuej=blockj.getvalue();blockj.setvalue(0); public void downblock() index=0;for(i=12;i<16;i+)valuej=0; valuel=0; t=find(index,-4,0,16);讦(t!=-l)blockindex.setvalue(blockt.getvalue();elsevaluel=blockindex.getvalue();if(

15、blockj.getvalue()=0)blockt.setvalue(0);break;if(valuel=valuej&&valuel !=0&&valuej !=0)blocki ndex.setvalue(valuel+valuej); valuel=o;intt=find(j,-4,0,16);讦(t!=-l)blockj.setvalue(blockt.getvalue(); else valuej=blockj.getvalue();nu mflag = true;int i=o,j=o;intin dex=i;in dex=j;t=o;jnt v

16、aluej=0;int for(j=i-l;j>i-4;j-)if(blockindex.getvalue()=0) if(t!=-l)blockt.setvalue(0);break;if(blockj.getvalue()=0)blockt.setvalue(0);break;blockj.setvalue(0); public void rightblockf) for(i=3;i<16;i+=4) valuej=0; valuel=0; t二 find(in dexlj-bj ndex+1); blockindex.setvalue(blockt.getvalue(); e

17、lsevaluel=blocki ndexgetvalue();t=find(l-l,i-3j+l);if(t!=-l)blockj.setvalue(blockt.getvalue(); else valuej=blockj.getvalue(); index=o; if(valuel=valuej&&valuel !=0&&valuej !=0)blocki ndexsetvalue(valuel+valuej); valuel=0;i ntnu mflag = true;int i=o,j=o;intindex=i;index=j;t=0;int valu

18、ej=0;int for(j=i+l;j<i+4;j+)if(blockindex.getvalue()=0)blockt.setvalue(0);break;if(blockj.getvalue()=0)blockt.setvalue(0);break;blockj.setvalue(0); public void leftblock() index=0;for(i=0;i<16;i+=4)valuej=0; valuel=0;t=find(index,ljndex?i+4);if(t!=-l)blockindex.setvalue(blockt.getvalue();elsev

19、aluel=blockindex.getvalue();t=find(j/l/j/i+4); blockj.setvalue(blockt.getvalue();elsevaluej=blockj.getvalue();if(valuel=valuej&&valuel !=0&&valuej !=0)blocki ndex.setvalue(valuel+valuej);nu mflag = true;in dex=j;blockj.setvalue(0); public void over() 讦(numflag =false&& up=fal

20、se&&down=false&&left=false&&right=false) 当不能添 加元素,并且不可移动的步数超过36就输了,输了的时候在盘中央显示gameoverblock4.settext(hgm);block settexta“);block6.settext(,mu);block7.settext("e");block .settext(*'o");block9.settext("v");block10.settext(ne");blockll.settext(&

21、quot;r");blockll.addmouselistener(newmouseadapterf) public void mousepressed(mouseevent e)restart(););publicvoid win() / 同 over block0.settext("y");blockl.settext("oh);block2.settext("u");block13.settext("w");block14.settext("l");block15.settext(,lnh

22、); block15.addmouselistener(new mouseadapterf) publicvoid mousepressed(mouseevent e) restart();); public voidrestartf)/重启游戏,和构造函数类似,不在累述numfla沪true;moveflag=0;up=true;down=true;left=true;right=true;for(int i=0;i<16;i+)blocki.setvalue(0);for (int i = 0; i < 2; i+)appearblockf); public void keypressed(keyevent e) 判断按的上下左右键,并依次调用移动函数、判断函数、添加函数、判断是否输掉的函数 switchcase keyevent.vk_up: app

温馨提示

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

评论

0/150

提交评论