




免费预览已结束,剩余19页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业论文毕业论文 基于 java 的连连看游戏设计 摘要摘要 游戏发展至今已经有 30 多年历史 在这个短暂的时期里 随着硬件水平的提高 游戏 开发新技术层出不穷 经典游戏比比皆是 大部分的人一听到连连看游戏 通常就会想到这 是一个小游戏 连连看游戏 是指在一个区域内 分布着许多不同的图片 通过点击两张相同的图片并 符合一定的规则消除它们的一个游戏 我们最常见的是在 QQ 游戏大厅里的 QQ 连连看 网络 上也有许多各式各样的单机版连连看游戏 在游戏的过程中 可以考虑下如何使用自己掌握 的程序去实现游戏的效果 并尝试去开发属于自己的连连看 这是一件十分惬意的事情 在 本章中 我们将详细的教大家如何使用 Java 去开发一款属于自己的单机连连看 本游戏采用 JAVA 语言开发 以 MyEclipse 为开发平台 游戏主界面是基于 GUI 图形 用户界面 的开发 使得游戏界面简单清晰 并调用了其中的一些函数 完成了事件的触发 功能 希望通过这次开发设计出的连连看小游戏 给大家的生活带来一点乐趣 游戏通过定义动态的二维数组 根据一定的算法实现规定的路径判断 关键词 连连看 小游戏 JAVA GUI 数组 I Abstract Game development has 30 years of history in this short period along with the hardware level game development new technology emerge in an endless stream classic games meet the eye everywhere Most of the people hear Lianliankan game they usually think this is a small game Lianliankan game refers to a region the distribution of many different pictures click through to two cards of the same picture and conform to certain rules to eliminate them in a game It is most common in QQ game hall QQ Lianliankan the network also has a lot of every kind of stand alone edition game In the course of the game can consider how to use their mastery of the program to achieve game effects and try to develop their own look again and again this is a very happy thing In this chapter we will detail the teach you how to use Java to develop a belongs to own stand alone lianliankan The game using JAVA language development take MyEclipse as the development platform The game s interface is based on the GUI graphical user interface development which makes the game interface simple and clear And call some of these functions completed the event trigger function Hope that through this design Lianliankan game for everyone to bring to life a little fun The game through the definition of the dynamic two dimensional array according to certain provisions of the path algorithm to determine Key words Lianliankan game JAVA GUI array II 目录目录 摘要摘要 IV 第一章第一章 绪论绪论 1 一 游戏产业介绍 1 二 游戏的发展概况 1 第二章第二章 连连看游戏描述连连看游戏描述 2 一 游戏规则描述 2 二 游戏设计的目的 2 三 游戏可行性论证 2 第三章第三章 连连看游戏的分析与设计连连看游戏的分析与设计 3 一 游戏的设计 3 1 功能设计 3 2 游戏模块设计 3 3 算法模块 4 4 界面显示模块 4 5 菜单控制模块 4 6 地图设计 5 7 算法设计 5 8 类的设计 7 1 Control java 监听器类 7 7 2 LoadAndSave java 游戏数据部分 7 3 Model java 驱动类 7 4 GamePanel java 绘制类 7 5 ImageLoader java 图片加载器 9 6 MainFrame java 主窗体绘制 9 9 算法设计 9 二 主要问题 11 三 技术要求 11 四 设计要求 11 1 开发环境 11 2 理论基础 11 3 开发目标 11 第四章第四章 游戏运行及测试分析游戏运行及测试分析 12 一 程序运行情况 12 二 测试计划及分析 15 1 检验的先后顺序 15 2 程序异常处理 15 结论结论 16 致谢致谢 17 III 参考文献参考文献 17 0 第一章第一章 绪论绪论 一一 游戏游戏产业介绍产业介绍 游戏产业作为现代电脑电子技术的产物 正在以其独特的魅力在全世界的娱乐领域占据 主流位置 我们在承认广大娱乐网民的选择空间狭小的同时 也必须明确的一点就是游戏本 身所具有的强大的吸引力 游戏的吸引力主要在于 它在让玩家打发时间的同时 可以让人 在紧张工作之余带来最大程度的放松 也可以增进人们之间的交流 沟通 通过游戏还可以 认识更多的朋友 也可以到达跨省 跨市 甚至跨国间人们互相娱乐的目的 从而满足了人 们休闲的需要 而且游戏产业促动高科技技术不断升级 作为经济增长的一大支撑点 已经 成为经济腾飞的 第四产业 现在小游戏 网页游戏越来越受网民欢迎 除了玩的方法简单外 不像其他游戏还需要 注册下载繁琐过程 很多游戏不乏经典 由于手机互联网的不断发展 传统网游已经不能 跟上时代的潮流 而网页游戏无需客户端的特性 决定了将来会是 Web 游戏主宰网游市场 作为最基本的网页游戏之一 连连看 游戏的设计与实现可以积累开发网页游戏的经验 完善开发思路 为以后更高层次上的网页游戏开发 打下坚实的基础 更好的推动网页游戏 的发展 二二 游戏的发展概况游戏的发展概况 游戏 连连看 顾名思义就是找出相关联的东西 这个连连看在网上基本是用在小游戏 中 就是找出相同的两样东西 在一定的规则之内可以做为相关联处理 连连看 的发展 经历了从桌面游戏 在线游戏 社交游戏三个过程 游戏 连连看 是源自台湾的桌面小游戏 自从流入大陆以来风靡一时 也吸引众多程 序员开发出多种版本的 连连看 这其中 顾方编写的 阿达连连看 以其精良的制作广 受好评 这也成为顾方 阿达系列软件 的核心产品 并于 2004 年 取得了国家版权局的 计算机软件著作权登记证书 随着 Flash 应用的流行 网上出现了多种在线 Flash 版本 连连看 如 水晶连连看 果蔬连连看 等 流行的 水晶连连看 以华丽界面吸引了一大批的女性玩家 2008 年 随着社交网络的普及和开放平台的兴起 连连看 被引入了社交网络 连连看 与个 人空间相结合 被快速的传播 成为一款热门的社交游戏 其中以开发者其中以开发者 Jonevey 在 Manyou 开放平台上推出的 宠物连连看 最为流行 1 第二章第二章 连连看游戏描述连连看游戏描述 近年来 Java 作为一种新的编程语言 以其简单性 可移植性和平台无关性等优点 得 到广泛的应用 特别是 Java 与万维网的完美结合 使其成为网络编程和嵌入式编程领域的 首选编程语言 一一 游戏规则描述游戏规则描述 1 概要 玩家可以将 2 个相同图案的牌连接起来 连接不多于 3 根直线 就可以成功 的将两个图片消除 2 操作 第一次使用鼠标点击游戏界面中的牌 该牌此时为 被选中 以特殊方式显 示 再次以鼠标点击其他牌 若该牌与被选中的牌图案相同 且把第一个牌到第二个牌连起 来 中间的直线不超过 3 根 则消掉这一对牌 否则第一个牌变为未被选中状态 而第二张 牌变成选中状态 3 胜利条件 将游戏界面上的牌全部消除掉 4 失败条件 到规定的时间 界面上仍然有未消除的牌 二二 游戏设计的目的游戏设计的目的 通过本次毕业设计 让我们掌握如何制作一个游戏软件 以及制作游戏软件的整个流程 制作游戏软件的步骤 让学生熟悉项目开发的完整过程 为即将到来的就业工作打下基础 另外也通过本次设计将三年来所学的专业知识和其他方面的知识融入到实际应用中 在实际 运用中学习和掌握 Java 程序开发的全过程 进一步熟悉掌握 Java 程序设计语言的基础内容 基本技能和方法 同时培养学生进行分析问题 解决问题的能力 培养学生进行设计分析 设计方法 设计操作与测试 设计过程的观察 理解和归纳能力的提高 1 主要是能通过开发 连连看 这个小游戏 学会 Java 程序开发的环境搭建与配置 并提高自己 Java 程序设计编程的实际能力 通过这次 2 进一步熟悉掌握 Java 程序设计的基础内容 如用户图形界面设计 GUI Java 多线 程编程等 3 大体了解怎样用 Java 来编写小游戏 增强我们实践能力和创新精神的综合培养 三三 游戏可行性论证游戏可行性论证 连连看 游戏是一个经典的游戏 它因操作简单 娱乐性强而广受欢迎 我们通过所 学的 JAVA 利用 MyEclipse 设计一个操作简单 界面美观 功能齐全的 连连看游戏 通 过本游戏的开发 达到学习 Java 技术和熟悉软件开发流程的目的 这个游戏是用图形界面实现的 通过编译解释后 出现一个图形界面 界面上方有一行 菜单栏 点击菜单栏上的按钮 出现下拉菜单 选择开始 进入游戏界面 游戏界面是由若 干个小方格组成的 每个小方格有一个图标 点击其中相同的图标 若它们符合算法要求就 会消失 且游戏期间有一定的时间限制 游戏还设有炸弹 退出 帮助的功能 方便游戏操 作 2 第三章第三章 连连看游戏的分析与设计连连看游戏的分析与设计 一一 游戏的设计游戏的设计 1 1 功能设计功能设计 1 用户可以通过点击菜单中的 开始游戏 选项 开始新游戏程序 程序会载入图 片 并通过特定的算法排列图片 并标记图片 以便判断图片是否相同 记录图片坐标 以 方便计算图片是否可以相连 确定图片大小 以确定用户点击的是那张图片 2 用户选择两张一样的图片 通过鼠标进行选取 如果用户两次点击的图片不相同 那么系统认为用户没有点 鼠标记数归 0 以完成用户以后的选取工作 如果用户选择的 是相同的图片 那么系统会消除这两张图片 并使鼠标记数为 0 并消除这两张图片的标记 使里面的图片被标记在外面 以便用户可以进行以后的选择 3 用户也可使通过使用 刷新 功能进行图片重新排版 4 用户点击提示系统将通过连线 提示用户下一步可消除的图片 5 用户点击演示 系统自动完成游戏 2 2 游戏模块游戏模块设计设计 根据对 连连看 游戏的分析 该游戏可分为三个模块 算法模块 界面显示模块 菜 单控制模块 如下图 3 1 所示 连连看游戏 算法模块菜单 控制 模块界面显示模块 图 3 1 游戏流程模块图 3 3 3 算法模块算法模块 1 图片路径处理设计 2 图片的产生设计 4 4 界面显示模块界面显示模块 1 游戏界面设计 2 游戏过关 失败的设计 5 5 菜单控制模块菜单控制模块 1 开始游戏 2 重新开始 3 刷新 4 提示 5 演示 6 游戏难度选择 如下图 3 5 所示 难度选择 游戏 关于 开始 开 始 演 示 判断 是否 满足 要求 否 是 消除图片 刷新 提示 全部消除 游戏结束 4 6 6 地图设计地图设计 地图的设计是采用 GUI 编程的网格布局 定义一个八行八列的网格布局 使用 16 个 数字然后随机产生四个数字 用二维数组把它们打乱放到八行八列的网格布局中 注意的 是二维数组的下标要和网格布局是的行 列数相同 7 7 算法设计算法设计 在检验两个方块能否消掉的时候 我们要让两个方块同时满足两个条件才行 就是两者 配对并且连线成功 如图 4 3 所示 分 3 种情况 从下面的这三种情况 我们可以知道 需要三个检测 这三个检测分别 检测一条直路经 这样就会有三条路经 若这三条路经上都是空按钮 那么就刚好是三种直 线 两个转弯点 把两个按钮连接起来了 1 相邻 2 若不相邻的先在第一个按钮的同行找一个空按钮 1 找到后看第二个按钮横向到 这个空按钮所在的列是否有按钮 2 没有的话再看第一个按钮到与它同行的那个空按钮之间 是否有按钮 3 没有的话 再从与第一个按钮同行的那个空按钮竖向到与第二个按钮的同行 看是否有按钮 没有的话路经就通了可以消了 3 若 2 失败后 再在第一个按钮的同列找一个空按钮 1 找到后看第二个按钮竖向 到这个空按钮所在的行是否有按钮 2 没有的话 再看第一个按钮到与它同列的那个空按钮 之间是否有按钮 3 没有的话 再从与第一个按钮同列的那个空按钮横向到与第二个按钮同 列看是否有按钮 没有的话路经就通了 可以消了 若以上三步都失败 说明这两个按钮不可以消去 具体判断流程见下图 5 是是否否为为同同一一图图片片 是是否否在在同同一一位位置置 是是否否在在一一条条横横线线 是是否否在在一一条条竖竖线线 返返回回ture 是是否否相相邻邻 是是否否直直线线相相连连 返返回回ture 是是否否直直线线相相连连 是是否否相相邻邻 返返回回ture 返返回回ture 是是 否否 否否 返返回回false 否否 是是 是是 否否 是是 是是 是是 是是 否否 是是 当当两两图图不不在在一一条条直直线线上上 则则以以两两图图在在X Y方方向向的的延延 长长线线上上去去找找两两个个点点 使使p1 到到i i到到j j到到p2都都能能直直线线 相相连连 否否 返返回回false 返返回回ture 是是 否否 否否 否否 6 4 图片成对加载并打乱 将图片成对的显示在场景中 并打乱主要用的是 Map 类 在该类中 用了一个数组以数 字标记的形式来记录加载的图片是哪种图片 在每次加载图片的时候是一张图片连续加载两 次 以保证加载图片成对 然后用数组的随机方法将数组打乱 5 判断两图是否能够相连 两图能相连的所有情况 1 2 3 4 5 6 8 类的设计类的设计 在设计连连看小游戏是 要编写 6 个 Java 源文件 Control java LoadAndSave java Model java GamePanel java ImageLoader java MainFrame java 1 Control java 监听器类 主要用于接收用户操作时发出的指令以及中转发送 2 LoadAndSave java 游戏数据部分 主要用于存储用户得分情况 以及载入时加载图片的算法 3 Model java 驱动类 用于处理接收到的用户动作指令 以及初始化时用到的一切算法 如 设置游 戏难度 图片可消除判断等 4 GamePanel java 绘制类 7 用于游戏是绘制选中时的边框 和连接两个相同图片的连线 public void showPath final Object obj new Thread new Runnable ArrayList points ArrayList obj ArrayList shapes new ArrayList int step 30 public void run 添加起点矩形 shapes add matrixToRect points get 0 添加终点矩形 shapes add matrixToRect points get points size 1 添加直线 for int i 1 i points size i Point p1 getCenter matrixToRect points get i 1 Point p2 getCenter matrixToRect points get i if p1 x p2 x int distance p2 y p1 y for int j 0 j Math abs distance j step shapes add new Line2D Double p1 new Point p1 x p1 y distance Math abs distance j else if p1 y p2 y int distance p2 x p1 x for int j 0 j Math abs distance j step shapes add new Line2D Double p1 new Point p1 x distance Math abs distance j p1 y shapes add new Line2D Double p1 p2 Graphics2D g2 Graphics2D getGraphics float dash 4F g2 setStroke new BasicStroke 2 0F BasicStroke CAP BUTT BasicStroke JOIN MITER 11 0F dash 1 0F for int index 0 index shapes size index try Thread sleep 10 8 catch InterruptedException e e printStackTrace for int pre 0 pre index pre if pre 2 g2 setColor Color BLUE else g2 setColor Color RED g2 draw shapes get pre start 效果如图 5 ImageLoader java 图片加载器 用于加载库中的图片 6 MainFrame java 主窗体绘制 所有游戏中可见窗体的绘制 7 项目层次结构图 9 9 算法设计算法设计 1 图片消除算法 for int i 0 i map length i 9 for int j 0 j map 0 length j Rectangle rect matrixToRect i j if map i j 0 continue g drawImage ImageLoader getImageOf map i j rect x rect y null 2 图片加载算法 public class ImageLoader private static BufferedImage cursorImage private static BufferedImage icon private static final BufferedImage images new BufferedImage Model CARD NUMBERS 1 public static BufferedImage getCursorImage if cursorImage null 获得图片的编号 try URLClassLoader urlLoader URLClassLoader ImageLoader class getClassLoader URL url urlLoader findResource images cursor gif cursorImage ImageIO read url catch Exception e e printStackTrace return cursorImage public static BufferedImage getIconImage if icon null 加载图标 try URLClassLoader urlLoader URLClassLoader ImageLoader class getClassLoader URL url urlLoader findResource images QQ png icon ImageIO read url catch Exception e e printStackTrace return icon public static BufferedImage getImageOf int index if images index null 在已编号处加载图片 try URLClassLoader urlLoader URLClassLoader ImageLoader class getClassLoader URL url urlLoader findResource images index gif images index ImageIO read url catch IOException e e printStackTrace 10 return images index 二二 主要问题主要问题 开始制作游戏时 主要解决的问题有以下几个方面 1 如何设置整个游戏的界面 2 如何控制连连看游戏中随机图片的生成切每种图片必须为偶数个 游戏开始后 判断鼠标两次点击的图片能否消去 即图片是否相同且图片之间路径的判断 3 如何判断游戏是否结束以及输赢的问题 三三 技术要求技术要求 本游戏软件可以在大多数计算机上运行 游戏中能正确判断鼠标两次点击的图片是否 可以消去 能正确判断游戏是否已经结束 四四 设计要求设计要求 1 1 开发环境开发环境 在 windows XP 系统下 JAVA 程序设计语言及相应的集成开发环境 利用 MyEclipse 实现 开发平台 jdk1 6 2 2 理论基础理论基础 1 熟悉JAVA语言基础 2 GUI编程 1 GUI 是 Graphical User Interface 的缩写 图形化用户界面 2 布局管理 FlowLayout 流式布局管理器 从左到右的顺序排列 BorderLayout 边界布局管理器 东 南 西 北 中 GridLayout 网格布局 管理器 事件处理机制 事件 用户对组件的一个操作 事件源 发生事件的组 件 监听器 我们需要处理某个事件 就需要在发生事件的组件上添加监听器 事件处理器 监听器中的方法 监听器被添加在组件上之后 组件上发生了对应 事 件就会执行指定方法 动作事件 ActionEvent 在某一组件上发生了定义好 的动作 例如按钮上鼠标点击 或按空格 菜单上鼠标点击或按回车等 3 MyEclipse 的操作 3 3 开发目标开发目标 系统能够提供友好的用户界面 使操作人员的心情放松 11 系统具有良好的运行效率 能够得到快速发现自我的目的 系统应有良好的可扩充性 可以容易的转入其它系统应用 平台的设计具有一定的灵活性 第四章第四章 游戏运行及测试分析游戏运行及测试分析 一一 程序运行情况程序运行情况 点击菜单中的开始游戏后的界面 连连看游戏规则很简单 就是点中两个互相匹配并且 可以通过不多于两个折点的折线连相同的图片 然后消去 下图是开始游戏后的界面效果 选择游戏难度 图 12 点击开始 开始当前难度游戏 如果不选择难度 则难度 1 到 9 随机 点击刷新则所有图片随机改变位置其总数不变 提示 可以根据算法随机提示一组可以消去的图片 点击演示 电脑将自动完成消除 每一步都有边框以及连线显示 直到所有方块消除完毕 13 图片由用户消除完毕 则如下图显示 14 由于用户每次只能消除一对图形 即只会用到一个最短路径 但由于实现并不知道用户 会选择哪一对图形 所以需要事先计算出所有可能的最短路径并保存起来 此外 采用这种 方法的话似乎每次用户消去一对相同图像之后都需要重新计算出当前所有可能被连接的相同 图形之间最短路径 这是因为当某些图像被消去之后可能会产生很多新路径 而我们又不能 确定这些空出来的格子到底能够影响哪些路径 所以就只好都重新计算一遍 二二 测试计划及分析测试计划及分析 1 1 检验的先后顺序检验的先后顺序 在检验两个方块能否消掉的时候 我们要让两个方块同时满足两个条件才行 就是两者 15 配对并且连线成功 所以 这里应该先检验配对 如果该条件不成立的话 就不要再进行连 线检查了 这样可以避免很多不必要的复杂运算 当然 如果你在做这个游戏的时候 配对 规则不够如此简单的话 那么就看哪个算起来麻烦就把它放在后面 2 2 程序异常处理程序异常处理 本程序没有涉及到程序的异常处理 只有关于 死锁 问题 本质上还是判别两个格子 是否可以消去的问题 最直接的方法就是 对于游戏中尚未消去的格子 两两都计算一下 它们是否可以消去 此外 从上面的广度优先搜索可以看出 我们每次都是扩展出起始格子 A x1 y1 能够到达的格子 也就是说 对于每一个格子 我们可以调用一次上面的扩展过程 得到所有可以到达的格子 如果这些格子中有任意一个跟起始格子的图形一致 则它们可以 消去 目前游戏我还没有发现 死锁 状态 16 结论结论 连连看 游戏的基本功能都已经实现了 其中很多变量之间数据的传递都很复杂 要 搞不明白就没办法再往下做了 路径判断问题中用到数据结构的知识 也很抽象 代码量也 很大 另外这个游戏不会用到数据库 所用功能也很少 只需要判断用户每次鼠标点击的坐 标以及当前坐标位置代表的图片内容就好了 通过这次 连连看 游戏的设计使我懂得了理论与实际相结合
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论