版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.2048 小游戏( 一) 程序介绍2048 是一款益智小游戏 , 玩家需要在l6 个格子中通过数字叠加的方法将最初的数字 2 凑成数字 2048。有 16 个格子 , 初始时会有两个格子上安放了两个数字 2, 每次可以选择上下左右其中一个方向去滑动 , 每滑动一次 , 所有的数宇方块都会往滑动的方向靠拢外 , 系统也会在空自的地方随即出现一个数字方块 , 相同数字的方块在靠拢、相撞时会相加。 2o48 是比较流行的一款数字游成 a 本课程设计通过设计与开发 jvm 平台上的 2048 游戏 , 进一步掌握所学 java 课程的知识 , 体验 java 的跨平台性 , 同时将 java 设计方
2、面的知识拓展应用( 二)功能需求描述l 、图形用户界面 : 2048 的最大特点就是玩家对图形界面里的数字进行操作 , 也就是是玩家与游戏的互动2、当前分数 score 与最高分数的显示 : 在我们设计的 2048 游戏中当前分数取了页面 i 内所有数字相加的值为分数 , 对玩家玩游戏的进展有直接性、 客观性的展现 , 同时 , 最高分数取了以往玩家退出游戏时所保存分数的最高分3、数字颜色游戏中数宇的颜色以2 为首項的等比数列变化 , 即 2、 4、 8、 l6 、32、 “、 128、 256、 5l2 、l024 、2048_. 对应的数字卡片变色4、游戏的退出 : 游戏退出时 , 我们采
3、用弹出对话框的确认玩家是否真的要退出游戏 , 当然这样做更符合游戏人性化设计的观念 。( 三) 玩法技巧 :1、 最大数尽可能放在角落2、数字按顺序紧邻排列3、 首先満足最大数和次大数在的那一列/ 行是满的4、 时刻注意活动较大数旁边要有相近的数5、 以大数所在的一行为主要移动方向6、不要急于“清理桌面”.( 四) 程序说明一个类 copy2048 继承 jframe, 类中包括 , 一个构造方法 copy2048, 构造方法中设定游戏界面的大小 , 背景颜色 , 边框 , 字体 , 标签 , 布局 , 位置 , 记录剩余空方块数目 , 记录分数 , 用于判断游成是否失败 , 用于判断游戏是否
4、失败 , 设置字体类型和大小 , 为最高分标签添加接键监听器 , 一个 keyevent 按键事件 , 构造方法中创建游戏主面板 , 设置主面板位置尺寸 , 设置空布局 , 创建文本框二维数组 , 创建标签 , 调用时间处理方法 , 一个 create2 方法 , 是在随机位置产生一个 2 号方块的方法 , ll 到 l4 同时被键盘赋値为 1 说明任何方向键都不能产生新的数字 2, 那就说明游戏失败 game over!一个 setcolor 方法 , 是为了产生 2l:)48 小游戏方块的颜色。( 五)程序结构l. 重新开始 , 若是初次运行游戏 , 则从文件中读入最高分void rest
5、art02. 控制方法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. 向右滑动 , 若各行均投有方
6、块相相或移动, 则返回 false, 否则返回 true,.public void moveright08. 向上滑动 , 若各行均投有方块相消或移动 , 则返回 false, 否则返回 true; public void moveup09. 在游戏区空用处随机生成 2public void generaterandom2 0(六) java制作 2048 小游戏详细代码import java.awt.color;import java.awt.eventoueue;import java.awt.borderlayout;impol1 java.awt.flowlayout;import j
7、ava.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
8、)(.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 time
9、s= 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 runna
10、ble0public 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);setdefaultc ? oseoperation(j frame. ex 0n_close) ; settltle(2048pc版 )scoresp
11、ane= 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) ; lab
12、elmaxscores.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(f
13、ont) ;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(ma
14、inpane);mainpane.setlayout(null);/设置空布用texts= newjlabel44;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);/ 设
15、置方块的大小位置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) ;textmaxsc
16、ores.add keyliste:ner( new keyadapte r0高分标签添加接键监所器publicvoid keypressed(keyevente)(do_label_keypressed(e) ;);/调用时同处理方法create20;create20; /t* 接键输入事件的处理方法param e*/protectedvoid do_label_keypressed(fina keyevent e)int code= e.getkeycode0;/ 获取接键代码inta;string str;strirlg str1 ;int num;switch(oode)(case k
17、eyevent.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-一 sal0本示 :整文本字特if(pareto( ) = 0)/如果左 1 方 文本 空字符textsi-1 .s
18、ettext(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(2num);textsi-1.settext(str);setcolor(i,j-1 , str);textsilm.sette)(t
19、(” ) ;/当前方央字符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, 川 );
20、.elself(pareto(str1)= 0& j!=a& j!= a+1)num=lnteger.parselnt(str);scores+= num;times+;str= string.valueof(2num);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(
21、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 十十 ;st
22、r= 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()
23、= 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(2num);textsi+1m.settext(str);setc0lor(i+1, j, str);textsin.settext(” ) ;setcolor(i, j, );a=i;l4=1;cr
24、eate20;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(ic
25、on2) ;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(gameover!);/tt* 设置标签颜色 param i, j,str */public void setco1or(int i, int j, string str)if(str=2)te)(tsilm.setbackground(color.yellow) ;els
26、e 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=102
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二级建造师考试知识点速记手册
- 地暖设计、施工规范
- 企业领导力提升培训案例分享
- 煤气回收利用的经济效益分析
- 小学低段音乐课堂教学案例集锦
- 小学科学活动课程设计案例
- 小学环境保护主题活动教案
- 小学语文课堂教学精彩案例分享
- 七年级数学上册全套教案资料
- 高中生物育种变异原理专项训练题
- 2026年新能源动力电池系统检修题库含答案
- 2026年安全知识竞赛及答案
- 2026四川德阳绵竹市金申投资集团有限公司第一批招聘40人笔试备考试题及答案解析
- 2026江苏中考地理押题必刷卷含答案
- 中信银行社招笔试题目
- GA 990-2025爆破作业单位资质条件和管理要求
- 房屋征收责任制度
- 2025贵州省贵阳市殡仪服务中心公开招聘(编外)工作人员25人考试参考试题及答案解析
- 安全生产管理制度汇编(水利行业)
- 硬笔书法全册教案共20课时
- 脱挂式索道(检测)课件
评论
0/150
提交评论