1、java课程设计 Java语言程序设计课程设计题 目 2048游戏的设计与实现 学 院 数信学院 专 业 计算机科学与技术 班 级 计科121 学 号 5131 学生姓名 郑帅兵 指导教师 赵利平 编写日期 2014-7-8 一、需求分析2048是比较流行的一款数字游戏。原版2048首先在github上发布,原作者是Gabriele Cirulli。它是基于1024和小3传奇的玩法开发而成的新型数字游戏1。随后2048便出现各种版本,走各大平台。由Ketchapp公司移植到IOS的版本最为火热,现在约有1000万下载,其名字跟原版一模一样。衍生版中最 出名的是2048六边形版本,先后在全球81
2、个国家中的board game中排进了前200。安卓版非常火爆的有挑战2048,其版以后还加入了双人对战。其次比较特别的有2048中国朝代版。更有 2048自定义版,可以自己定义文字和图片。2048是IOS中流行的一款。本课程设计通过设计与开发JVM平台上的2048游戏,进一步掌握所学Java课程的知识,体验Java的跨平台性,同时将Java设计方面的知识拓展应用二、系统运行环境1、硬件环境:2、软件环境:操作系统:WindowsXP/Windows7 软件:集成开发环境Eclipse 三、功能需求描述1、图形用户界面:2048的最大特点就是玩家对图形界面里的数字进行操作,也就是是玩家与游戏的
3、互动2、当前分数SCORE与最高分数的显示:在我们设计的2048游戏中当前分数取了页面内所有数字相加的值为分数,对玩家玩游戏的进展有直接性、客观性的展现;同时,最高分数取了以往玩家退出游戏时所保存分数的最高分3、数字颜色:游戏中数字的颜色以2为首项的等比数列变化,即2、4、8、16、32、64、128、256、512、1024、2048.对应的数字卡片变色4、游戏的退出:游戏退出时,我们采用弹出对话框的确认玩家是否真的要退出游戏,当然这样做更符合游戏人性化设计的观念。功能图如下:四、总体设计简要设计流程:程序结构说明:;import .*;import .*;import .*;public
4、class Java2048 extends JFrame implements KeyListener private static final long serialVersionUID = 1L; Color background = new Color(190, 173, 160);ength(); (); catch(Exception e1) (null,找不到同目录下文件或文件已损坏!, 提示, ; ; (0); ); restart(); void restart()/重新开始 /若是初次运行游戏,则从文件中读入最高分 if(highestScore=0) File file=
5、new File(); BufferedReader br; try br=new BufferedReader(new FileReader(file); highestScore2=(); (); catch(Exception e) (this,找不到同目录下文件或文件已损坏!, 提示, ; (0); ; highestScore=highestScore2; array=new int44;/清空游戏用2维数组 score=0;/重置分数为零 biggestNumber=0;/重置最大数字为零 /在游戏区随机生成两个2或4 generateRandom2or4(); generateR
6、andom2or4(); /绘图方法public void paint(Graphics g) gBuffer=g;(background);(30, 40, 185, 90, 20, 20);/ 画分数显示区(30, 40, 185, 90, 20, 20);(245, 40, 185, 90, 20, 20);/ 画最高分显示区 (245, 40, 185, 90, 20, 20); (0, 150, 454, 460, 10, 10);/ 画主游戏区 (0, 150, 454, 460, 10, 10); (wordFont); (wordColor); (SCORE, 90, 70);
7、/ 画SCORE (BEST, 315, 70); / 画BEST (numberFont); ;if(score10) (score), 110, 115);/画分数数字 else if(score100) (score), 100, 115);/画分数数字 else if(score1000) (score), 85, 115);/画分数数字 else if(score10000) (score), 73, 115);/画分数数字 else if(score100000) (score), 60, 115);/画分数数字 else if(score1000000) (score), 50,
8、 115);/画分数数字 else (score), 37, 115);/画分数数字 if(highestScore10) (highestScore), 325, 115);/画分数数字 else if(highestScore100) (highestScore), 315, 115);/画分数数字 else if(highestScore1000) (highestScore), 300, 115);/画分数数字 else if(highestScore10000) (highestScore), 288, 115);/画分数数字 else if(highestScore100000)
9、(highestScore), 275, 115);/画分数数字 else if(highestScore1000000) (highestScore), 265, 115);/画分数数字 else (highestScore), 252, 115);/画分数数字 (foreground); for (int i = 0; i 4; i+) for (int j = 0; j 4; j+) (10 + j * 112, 160 + i * 112, 100, 100, 10, 10); (10 + j * 112, 160 + i * 112, 100, 100, 10, 10); for(i
10、nt i=0;i4;i+) for(int j=0;j1024) switch(biggestNumber) case 2048: if(this, 挑战2048成功!n是否继续挑战, 提示, = biggestNumber+;/防止2048重复判断 else restart(); repaint(); break; case 4096: if(this, 挑战4096成功!n是否继续挑战, 提示, = biggestNumber+;/防止4096重复判断 else restart(); repaint(); break; case 8192: if(this, 挑战8192成功!n是否继续挑
11、战, 提示, = biggestNumber+;/防止8192重复判断 else restart(); repaint(); break; default:; if(judgeFail() (this,挑战失败!, 提示, ; restart(); repaint(); Override public void keyReleased(KeyEvent e) Override public void keyTyped(KeyEvent e) /判断是否已经失败,若失败则返回true,否则返回false public boolean judgeFail() for(int j=0;j4;j+)
12、for(int i=0;i4;i+) processi0=arrayij; processi1=1; for(int i=1;i0) if(processk0=0) return false; else if(processk-10=0) return false; else if(processk-10=processk0) return false; else break; for(int j=0;j-1;i-) process3-i0=arrayij; process3-i1=1; for(int i=1;i0) if(processk0=0) return false; else if
13、(processk-10=0) return false; else if(processk-10=processk0) return false; else break; for(int i=0;i4;i+) for(int j=0;j4;j+) processj0=arrayij; processj1=1; for(int l=1;l0) if(processk0=0) return false; else if(processk-10=0) return false; else if(processk-10=processk0) return false; else break; for
14、(int i=0;i-1;j-) process3-j0=arrayij; process3-j1=1; for(int l=1;l0) if(processk0=0) return false; else if(processk-10=0) return false; else if(processk-10=processk0) return false; else break; for(int i=0;i4;i+) for(int j=0;j4;j+) if(arrayij=0) return false; return true; public void moveUp() ifGenerate2or4=false; for(int j=0;j4;j+) for(int i=0;i4;i+) processi0=arrayij; processi1=1; processProcess(); for(int i=0;i4;i+) arrayij=processi0; if(ifGenerate2or4) generateRandom2or4(); repaint(); /向下滑动,若各列均没有方块相消或移动,则返回false,否则返回true; public
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1