版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 盘锦事业单位招聘2022年考试全真模拟试题4套及答案解析(附后)
- 我最喜欢的诗人
- 2026届云南省迪庆州维西县第二中学高三下学期第一次诊断性考试英语试题含解析
- 广东省高州市大井中学2026届高三联合考试数学试题含解析
- 江苏省盱眙县新马中学2026年高三下学期4月考数学试题含解析
- 福建省宁德宁市-同心顺-六校联盟2026届高三3月月考调研考试物理试题含解析
- 广东佛山顺德区2026届高三下学期第一次摸拟试数学试题含解析
- 甘肃省嘉峪关市一中2025-2026学年高考英语试题全真模拟密押卷(三)含解析
- 文化产业政策解读与执行手册(标准版)
- 生态保护与治理技术指南
- 新版人教版二年级下册数学全册教案(完整版)教学设计含教学反思
- 村书记考公务员试题及答案
- 2026高三数学专项复习 解三角形:最值与范围问题 专项训练(原卷版)
- T∕CCSAS 061-2025 特殊作业监护人员履责管理要求
- GB/T 21508-2025燃煤烟气脱硫设备性能测试方法
- 2025年CFA二级真题集锦
- 财务给销售部门培训
- 2026届吉林省四校高三一模语文试题(含答案)(解析版)
- 2025至2030中国汽车声学材料行业发展趋势分析与未来投资战略咨询研究报告
- 2025年国家自然博物馆面试准备及参考答案
- 煤矿智能监测与智能化运维方案
评论
0/150
提交评论