java课程设计2048_第1页
java课程设计2048_第2页
java课程设计2048_第3页
java课程设计2048_第4页
java课程设计2048_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

Java 语言程序设计 课程设计 题 目 2048 游戏的设计与实现 学 院 数信学院 专 业 计算机科学与技术 班 级 计科 121 学 号 201259225131 学生姓名 郑帅兵 指导教师 赵利平 编写日期 2014 7 8 目目 录录 1 需求分析 3 2 系统运行环境 3 3 功能需求描述 3 4 总体设计 3 5 程序模块设计 3 6 总结 3 一 需求分析 2048 是比较流行的一款数字游戏 原版 2048 首先在 github 上发布 原作者是 Gabriele Cirulli 它是基于 1024 和 小 3 传奇 的玩法开发而成的新型数字游戏 1 随后 2048 便出现各种版本 走各大平台 由 Ketchapp 公司移植到 IOS 的版本最为火 热 现在约有 1000 万下载 其名字跟原版一模一样 衍生版中最 出名的是 2048 六边形 版本 先后在全球 81 个国家中的 board game 中排进了前 200 安卓版非常火爆的有 挑 战 2048 其 2 0 0 版以后还加入了双人对战 其次比较特别的有 2048 中国朝代版 更 有 2048 自定义版 可以自己定义文字和图片 2048 是 IOS 中流行的一款 本课程设计通过设计与开发 JVM 平台上的 2048 游戏 进一步掌握所学 Java 课程的知 识 体验 Java 的跨平台性 同时将 Java 设计方面的知识拓展应用 二 系统运行环境 1 硬件环境 2 软件环境 操作系统 WindowsXP Windows7 软件 集成开发环境 Eclipse 三 功能需求描述 1 图形用户界面 2048 的最大特点就是玩家对图形界面里的数字进行操作 也就是是玩 家与游戏的互动 2 当前分数 SCORE 与最高分数的显示 在我们设计的 2048 游戏中当前分数取了页面内所 有数字相加的值为分数 对玩家玩游戏的进展有直接性 客观性的展现 同时 最高分数 取了以往玩家退出游戏时所保存分数的最高分 3 数字颜色 游戏中数字的颜色以 2 为首项的等比数列变化 即 2 4 8 16 32 64 128 256 512 1024 2048 对应的数字卡片变色 4 游戏的退出 游戏退出时 我们采用弹出对话框的确认玩家是否真的要退出游戏 当然 这样做更符合游戏人性化设计的观念 功能图如下 四 总体设计 简要设计流程 2048游戏 画图监听器游戏算法 移 动 方 向 随 机 数 是 否 结 束 前 景 色 背 景 色 字 体 键 盘 事 件 鼠 标 事 件 程序结构说明 重新开始 若是初次运行游戏 则从文件中读入最高分 void restart 控制方法 public void keyPressed KeyEvent e 绘图方法 public void paint Graphics g 判断是否已经失败 若失败则返回true 否则返回false public boolean judgeFail 向下滑动 若各列均没有方块相消或移动 则返回false 否则返回true public void moveDown 向左滑动 若各行均没有方块相消或移动 则返回false 否则返回true public void moveLeft 向右滑动 若各行均没有方块相消或移动 则返回false 否则返回true public void moveRight 向上滑动 若各行均没有方块相消或移动 则返回false 否则返回true Public void moveUp 在游戏区空闲处随机生成2或4 public void generateRandom2or4 五 程序模块设计 源码如下 Main类 import javax swing JFrame public class Main public static void main String args JFrame frame new Java2048 frame setTitle Java2048 frame setSize 455 610 frame setLocationRelativeTo null frame setDefaultCloseOperation JFrame EXIT ON CLOSE frame setVisible true Java2048 类 import java awt import java awt event import java io import java util import javax swing public class Java2048 extends JFrame implements KeyListener private static final long serialVersionUID 1L Color background new Color 190 173 160 背景色 Color foreground new Color 204 192 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维数组 逐行或逐列处理数组 第一个参数为实际数字 第二个为判断值 用来判断是否应该消 除相同的数字 int process new int 4 2 int score 分数 初始化为零 int highestScore 游戏中最高分 int highestScore2 0 文件中最高分 int biggestNumber 0 boolean ifGenerate2or4 int rd new int 16 生成随机2或4的位置 private Graphics gBuffer 构造方法 public Java2048 addKeyListener this addWindowListener new WindowAdapter public void windowClosing WindowEvent e if JOptionPane showConfirmDialog null 确定退出 提 示 JOptionPane YES NO OPTION JOptionPane YES NO OPTION if highestScore highestScore2 若在本次游戏中破了纪录 则更新 文件中的最高分 highestScore2 highestScore File file new File Java2048beta1 txt BufferedWriter bw try bw new BufferedWriter new FileWriter file bw write String valueOf highestScore2 0 String valueOf highestSc ore2 length bw close catch Exception e1 JOptionPane showMessageDialog null 找不到同目录下Java2048beta1 txt 文件或文件已损坏 提示 JOptionPane INFORMATION MESSAGE System exit 0 restart void restart 重新开始 若是初次运行游戏 则从文件中读入最高分 if highestScore 0 File file new File Java2048beta1 txt BufferedReader br try br new BufferedReader new FileReader file highestScore2 Integer valueOf br readLine br close catch Exception e JOptionPane showMessageDialog this 找不到同目录下Java2048beta1 txt 文件或文件已损坏 提示 JOptionPane INFORMATION MESSAGE System exit 0 highestScore highestScore2 array new int 4 4 清空游戏用2维数组 score 0 重置分数为零 biggestNumber 0 重置最大数字为零 在游戏区随机生成两个2或4 generateRandom2or4 generateRandom2or4 绘图方法 public void 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 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 画SCORE gBuffer drawString BEST 315 70 画BEST gBuffer setFont numberFont gBuffer setColor Color white if score 10 gBuffer drawString String valueOf score 110 115 画分数数字 else if score 100 gBuffer drawString String valueOf score 100 115 画分数数字 else if score 1000 gBuffer drawString String valueOf score 85 115 画分数数字 else if score 10000 gBuffer drawString String valueOf score 73 115 画分数数字 else if score 100000 gBuffer drawString String valueOf score 60 115 画分数数字 else if score 1000000 gBuffer drawString String valueOf score 50 115 画分数数字 else gBuffer drawString String valueOf score 37 115 画分数数字 if highestScore 10 gBuffer drawString String valueOf highestScore 325 115 画分数数字 else if highestScore 100 gBuffer drawString String valueOf highestScore 315 115 画分数数字 else if highestScore 1000 gBuffer drawString String valueOf highestScore 300 115 画分数数字 else if highestScore 10000 gBuffer drawString String valueOf highestScore 288 115 画分数数字 else if highestScore 100000 gBuffer drawString String valueOf highestScore 275 115 画分数数字 else if highestScore 1000000 gBuffer drawString String valueOf highestScore 265 115 画分数数字 else gBuffer drawString String valueOf highestScore 252 115 画分数数字 gBuffer setColor foreground for int i 0 i 4 i for int j 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 int i 0 i 4 i for int j 0 j1024 switch biggestNumber case 2048 if JOptionPane showConfirmDialog this 挑战2048成功 n 是否继续挑战 提示 JOptionPane YES NO OPTION JOptionPane YES OPTION biggestNumber 防止2048重复判断 else restart repaint break case 4096 if JOptionPane showConfirmDialog this 挑战4096成功 n 是否继续挑战 提示 JOptionPane YES NO OPTION JOptionPane YES OPTION biggestNumber 防止4096重复判断 else restart repaint break case 8192 if JOptionPane showConfirmDialog this 挑战8192成功 n 是否继续挑战 提示 JOptionPane YES NO OPTION JOptionPane YES OPTION biggestNumber 防止8192重复判断 else restart repaint break default if judgeFail JOptionPane showMessageDialog this 挑战失败 提示 JOptionPane INFORMATION MESSAGE restart repaint Override public void keyReleased KeyEvent e Override public void keyTyped KeyEvent e 判断是否已经失败 若失败则返回true 否则返回false public boolean judgeFail for int j 0 j 4 j for int i 0 i 4 i process i 0 array i j process i 1 1 for int i 1 i0 if process k 0 0 return false else if process k 1 0 0 return false else if process k 1 0 process k 0 return false else break for int j 0 j 1 i process 3 i 0 array i j process 3 i 1 1 for int i 1 i0 if process k 0 0 return false else if process k 1 0 0 return false else if process k 1 0 process k 0 return false else break for int i 0 i 4 i for int j 0 j 4 j process j 0 array i j process j 1 1 for int l 1 l0 if process k 0 0 return false else if process k 1 0 0 return false else if process k 1 0 process k 0 return false else break for int i 0 i 1 j process 3 j 0 array i j process 3 j 1 1 for int l 1 l0 if process k 0 0 return false else if process k 1 0 0 return false else if process k 1 0 process k 0 return false else break for int i 0 i 4 i for int j 0 j 4 j if array i j 0 return false return true public void moveUp ifGenerate2or4 false for int j 0 j 4 j for int i 0 i 4 i process i 0 array i j process i 1 1 processProcess for int i 0 i 4 i array i j process i 0 if ifGenerate2or4 generateRandom2or4 repaint 向下滑动 若各列均没有方块相消或移动 则返回false 否则返回true public void moveDown ifGenerate2or4 false for int j 0 j 1 i process 3 i 0 array i j process 3 i 1 1 processProcess for int i 3 i 1 i array i j process 3 i 0 if ifGenerate2or4 generateRandom2or4 repaint 向左滑动 若各行均没有方块相消或移动 则返回false 否则返回true public void moveLeft ifGenerate2or4 false for int i 0 i 4 i for int j 0 j 4 j process j 0 array i j process j 1 1 processProcess for int j 0 j 4 j array i j process j 0 if ifGenerate2or4 generateRandom2or4 repaint 向右滑动 若各行均没有方块相消或移动 则返回false 否则返回true public void moveRight ifGenerate2or4 false for int i 0 i 1 j process 3 j 0 array i j process 3 j 1 1 processProcess for int j 3 j 1 j array i j process 3 j 0 if ifGenerate2or4 generateRandom2or4 repaint 在游戏区空闲处随机生成2或4 public void generateRandom2or4 int rdCount 1 记录需要生成2或4的位置的数量 for int i 0 i 4 i for int j 0 j 4 j if array i j 0 rd rdCount i 10 j int tempI rd random nextInt rdCount 1 if random nextDouble 0 1 随机生成2和4 其比例大致为9 1 array tempI 10 tempI 10 4 else array tempI 10 tempI 10 2 单行或单列处理方法 若该行或列没有方块相消或移动 则返回false 否则返回 true

温馨提示

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

评论

0/150

提交评论