2048游戏的设计实现分析 课程设计报告_第1页
2048游戏的设计实现分析 课程设计报告_第2页
2048游戏的设计实现分析 课程设计报告_第3页
2048游戏的设计实现分析 课程设计报告_第4页
2048游戏的设计实现分析 课程设计报告_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、. Java语言程序设计课程设计题目 2048游戏的设计与实现目录 TOC o 1-3 h z u HYPERLINK file:/C:UserslqDesktopjava课设课程设计模板.doc l _Toc3271753381.需求分析 PAGEREF _Toc327175338 h 3HYPERLINK file:/C:UserslqDesktopjava课设课程设计模板.doc l _Toc3271753392.系统运行环境 PAGEREF _Toc327175339 h 3HYPERLINK file:/C:UserslqDesktopjava课设课程设计模板.doc l _Toc3

2、271753403.功能需求描述 PAGEREF _Toc327175340 h 3HYPERLINK file:/C:UserslqDesktopjava课设课程设计模板.doc l _Toc3271753414.总体设计 PAGEREF _Toc327175341 h 3HYPERLINK file:/C:UserslqDesktopjava课设课程设计模板.doc l _Toc3271753425.程序模块设计 PAGEREF _Toc327175342 h 3HYPERLINK file:/C:UserslqDesktopjava课设课程设计模板.doc l _Toc327175343

3、6.总结 PAGEREF _Toc327175343 h 3需求分析2048是比拟流行的一款数字游戏。原版2048首先在github上发布,原作者是Gabriele Cirulli。它是基于1024和小3传奇的玩法开发而成的新型数字游戏1。随后2048便出现各种版本,走各大平台。由Ketchapp公司移植到IOS的版本最为炽热,现在约有1000万下载,其名字跟原版一模一样。衍生版中最知名的是2048六边形版本,先后在全球81个国家中的board game中排进了前200。安卓版非常火爆的有挑战2048,其版以后还参加了双人对战。其次比拟特别的有2048中国朝代版。更有 2048自定义版,可以自

4、己定义文字和图片。2048是IOS中流行的一款。本课程设计通过设计与开发JVM平台上的2048游戏,进一步掌握所学Java课程的知识,体验Java的跨平台性,同时将Java设计方面的知识拓展应用系统运行环境1、硬件环境:2、软件环境:操作系统:Windows*P/Windows7 软件:集成开发环境Eclipse 功能需求描述1、图形用户界面:2048的最大特点就是玩家对图形界面里的数字进展操作,也就是是玩家与游戏的互动2、当前分数SCORE与最高分数的显示:在我们设计的2048游戏中当前分数取了页面所有数字相加的值为分数,对玩家玩游戏的进展有直接性、客观性的展现;同时,最高分数取了以往玩家退

5、出游戏时所保存分数的最高分3、数字颜色:游戏中数字的颜色以2为首项的等比数列变化,即2、4、8、16、32、64、128、256、512、1024、2048对应的数字卡片变色4、游戏的退出:游戏退出时,我们采用弹出对话框确实认玩家是否真的要退出游戏,当然这样做更符合游戏人性化设计的观念。功能图如下:总体设计简要设计流程:程序构造说明:/重新开场,假设是初次运行游戏,则从文件中读入最高分void restart()/控制方法publicvoidkeyPressed(KeyEvent e)/绘图方法publicvoid paint(Graphics g)/判断是否已经失败,假设失败则返回true,

6、否则返回falsepublicboolean judgeFail()/向下滑动,假设各列均没有方块相消或移动,则返回false,否则返回true;publicvoid moveDown()/向左滑动,假设各行均没有方块相消或移动,则返回false,否则返回true;publicvoid moveLeft()/向右滑动,假设各行均没有方块相消或移动,则返回false,否则返回true;publicvoid moveRight()/向上滑动,假设各行均没有方块相消或移动,则返回false,否则返回true; Public void moveUp()/在游戏区空闲处随机生成2或4publicvoid

7、 generateRandom2or4()程序模块设计源码如下:Main类:import java*.swing.JFrame;publicclass Main publicstaticvoid main(String args)JFrame frame=new Java2048();frame.setTitle(Java2048);frame.setSize(455,610);frame.setLocationRelativeTo(null);frame.setDefaultCloseOperation(JFrame.E*IT_ON_CLOSE );frame.setVisible(true

8、);Java2048类:import java.awt.*;import java.awt.event.*;import java.io.*;import java.util.*;import java*.swing.*;publicclass Java2048 e*tends JFrame implements KeyListenerprivatestaticfinallongserialVersionUID = 1L;Color background = new Color(190, 173, 160);/ 背风光Color foreground = new Color(204, 192,

9、 178);/ 前风光Color wordColor = new Color(232, 216, 203);/ 单词色Font wordFont = new Font(微软雅黑, Font.PLAIN, 20);/ 单词字体Font numberFont = new Font(微软雅黑, Font.BOLD, 40);/ 数字字体Random random=new Random();/随机数发生器int array;/游戏用2维数组/逐行或逐列处理数组,第一个参数为实际数字,第二个为判断值,用来判断是否应该消除一样的数字intprocess=newint 42;intscore;/分数,初始化

10、为零inthighestScore;/游戏中最高分inthighestScore2=0;/文件中最高分intbiggestNumber=0;booleanifGenerate2or4;int rd=newint16;/生成随机2或4的位置private Graphics gBuffer;/构造方法public Java2048()addKeyListener(this);addWindowListener(new WindowAdapter()publicvoid windowClosing(WindowEvent e)if(JOptionPane.showConfirmDialog(null

11、, 确定退出?, 提示, JOptionPane.YES_NO_OPTION)=JOptionPane.YES_NO_OPTION)if(highestScorehighestScore2)/假设在本次游戏中破了纪录,则更新文件中的最高分highestScore2=highestScore;File file=new File(Java2048beta1.t*t);BufferedWriter bw;trybw=new BufferedWriter(new FileWriter(file);bw.write(String.valueOf(highestScore2),0,String.valu

12、eOf(highestScore2).length();bw.close();catch(E*ception e1)JOptionPane.showMessageDialog(null,找不到同目录下Java2048beta1.t*t文件或文件已损坏!, 提示, JOptionPane.INFORMATION_MESSAGE);System.e*it(0); );restart();void restart()/重新开场/假设是初次运行游戏,则从文件中读入最高分if(highestScore=0)File file=new File(Java2048beta1.t*t);BufferedRea

13、der br;trybr=new BufferedReader(new FileReader(file);highestScore2=Integer.valueOf(br.readLine();br.close();catch(E*ception e)JOptionPane.showMessageDialog(this,找不到同目录下Java2048beta1.t*t文件或文件已损坏!, 提示, JOptionPane.INFORMATION_MESSAGE);System.e*it(0);highestScore=highestScore2;array=newint44;/清空游戏用2维数组

14、score=0;/重置分数为零biggestNumber=0;/重置最大数字为零/在游戏区随机生成两个2或4generateRandom2or4();generateRandom2or4();/绘图方法publicvoid paint(Graphics g) gBuffer=g;gBuffer.setColor(background);gBuffer.drawRoundRect(30, 40, 185, 90, 20, 20);/ 画分数显示区gBuffer.fillRoundRect(30, 40, 185, 90, 20, 20);gBuffer.drawRoundRect(245, 40

15、, 185, 90, 20, 20);/ 画最高分显示区gBuffer.fillRoundRect(245, 40, 185, 90, 20, 20);gBuffer.drawRoundRect(0, 150, 454, 460, 10, 10);/ 画主游戏区gBuffer.fillRoundRect(0, 150, 454, 460, 10, 10);gBuffer.setFont(wordFont);gBuffer.setColor(wordColor);gBuffer.drawString(SCORE, 90, 70);/ 画SCOREgBuffer.drawString(BEST,

16、315, 70); / 画BESTgBuffer.setFont(numberFont);gBuffer.setColor(Color.white);if(score10)gBuffer.drawString(String.valueOf(score), 110, 115);/画分数数字elseif(score100)gBuffer.drawString(String.valueOf(score), 100, 115);/画分数数字elseif(score1000)gBuffer.drawString(String.valueOf(score), 85, 115);/画分数数字elseif(s

17、core10000)gBuffer.drawString(String.valueOf(score), 73, 115);/画分数数字elseif(score100000)gBuffer.drawString(String.valueOf(score), 60, 115);/画分数数字elseif(score1000000)gBuffer.drawString(String.valueOf(score), 50, 115);/画分数数字elsegBuffer.drawString(String.valueOf(score), 37, 115);/画分数数字if(highestScore10)g

18、Buffer.drawString(String.valueOf(highestScore), 325, 115);/画分数数字elseif(highestScore100)gBuffer.drawString(String.valueOf(highestScore), 315, 115);/画分数数字elseif(highestScore1000)gBuffer.drawString(String.valueOf(highestScore), 300, 115);/画分数数字elseif(highestScore10000)gBuffer.drawString(String.valueOf(

19、highestScore), 288, 115);/画分数数字elseif(highestScore100000)gBuffer.drawString(String.valueOf(highestScore), 275, 115);/画分数数字elseif(highestScore1000000)gBuffer.drawString(String.valueOf(highestScore), 265, 115);/画分数数字elsegBuffer.drawString(String.valueOf(highestScore), 252, 115);/画分数数字gBuffer.setColor(

20、foreground);for (inti = 0; i 4; i+) for (intj = 0; j 4; j+) gBuffer.drawRoundRect(10 + j * 112, 160 + i * 112, 100, 100, 10, 10); gBuffer.fillRoundRect(10 + j * 112, 160 + i * 112, 100, 100, 10, 10);for(inti=0;i4;i+)for(intj=0;j1024)switch(biggestNumber)case 2048:if(JOptionPane.showConfirmDialog(thi

21、s, 挑战2048成功!n是否继续挑战?, 提示, JOptionPane.YES_NO_OPTION)=JOptionPane.YES_OPTION)biggestNumber+;/防止2048重复判断elserestart();repaint();break;case 4096:if(JOptionPane.showConfirmDialog(this, 挑战4096成功!n是否继续挑战?, 提示, JOptionPane.YES_NO_OPTION)=JOptionPane.YES_OPTION)biggestNumber+;/防止4096重复判断elserestart();repain

22、t();break;case 8192:if(JOptionPane.showConfirmDialog(this, 挑战8192成功!n是否继续挑战?, 提示, JOptionPane.YES_NO_OPTION)=JOptionPane.YES_OPTION)biggestNumber+;/防止8192重复判断elserestart();repaint();break;default:;if(judgeFail()JOptionPane.showMessageDialog(this,挑战失败!, 提示, JOptionPane.INFORMATION_MESSAGE);restart();

23、repaint();Overridepublicvoid keyReleased(KeyEvent e) Overridepublicvoid keyTyped(KeyEvent e) /判断是否已经失败,假设失败则返回true,否则返回falsepublicboolean judgeFail()for(intj=0;j4;j+)for(inti=0;i4;i+)processi0=arrayij;processi1=1;for(inti=1;i0)if(processk0=0)returnfalse;elseif(processk-10=0)returnfalse;elseif(proces

24、sk-10=processk0)returnfalse;elsebreak;for(intj=0;j-1;i-)process3-i0=arrayij;process3-i1=1;for(inti=1;i0)if(processk0=0)returnfalse;elseif(processk-10=0)returnfalse;elseif(processk-10=processk0)returnfalse;elsebreak;for(inti=0;i4;i+)for(intj=0;j4;j+)processj0=arrayij;processj1=1;for(intl=1;l0)if(proc

25、essk0=0)returnfalse;elseif(processk-10=0)returnfalse;elseif(processk-10=processk0)returnfalse;elsebreak;for(inti=0;i-1;j-)process3-j0=arrayij;process3-j1=1;for(intl=1;l0)if(processk0=0)returnfalse;elseif(processk-10=0)returnfalse;elseif(processk-10=processk0)returnfalse;elsebreak;for(inti=0;i4;i+)fo

26、r(intj=0;j4;j+)if(arrayij=0)returnfalse;returntrue;publicvoid moveUp()ifGenerate2or4=false;for(intj=0;j4;j+)for(inti=0;i4;i+)processi0=arrayij;processi1=1;processProcess();for(inti=0;i4;i+)arrayij=processi0;if(ifGenerate2or4)generateRandom2or4();repaint();/向下滑动,假设各列均没有方块相消或移动,则返回false,否则返回true;publi

27、cvoid moveDown()ifGenerate2or4=false;for(intj=0;j-1;i-)process3-i0=arrayij;process3-i1=1;processProcess();for(inti=3;i-1;i-)arrayij=process3-i0;if(ifGenerate2or4)generateRandom2or4();repaint();/向左滑动,假设各行均没有方块相消或移动,则返回false,否则返回true;publicvoid moveLeft()ifGenerate2or4=false;for(inti=0;i4;i+)for(intj=

28、0;j4;j+)processj0=arrayij;processj1=1;processProcess();for(intj=0;j4;j+)arrayij=processj0;if(ifGenerate2or4)generateRandom2or4();repaint();/向右滑动,假设各行均没有方块相消或移动,则返回false,否则返回true;publicvoid moveRight()ifGenerate2or4=false;for(inti=0;i-1;j-)process3-j0=arrayij;process3-j1=1;processProcess();for(intj=3

29、;j-1;j-)arrayij=process3-j0;if(ifGenerate2or4)generateRandom2or4();repaint();/在游戏区空闲处随机生成2或4publicvoid generateRandom2or4()intrdCount=-1;/记录需要生成2或4的位置的数量for(inti=0;i4;i+)for(intj=0;j4;j+)if(arrayij=0)rd+rdCount=i*10+j;inttempI=rdrandom.ne*tInt(rdCount+1);if(random.ne*tDouble()0.1)/随机生成2和4,其比例大致为9:1arraytempI/

温馨提示

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

评论

0/150

提交评论