毕业论文设计模板(可直接套用)_第1页
毕业论文设计模板(可直接套用)_第2页
毕业论文设计模板(可直接套用)_第3页
毕业论文设计模板(可直接套用)_第4页
毕业论文设计模板(可直接套用)_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

毕业论文设计模板毕业论文设计模板 可直接套用可直接套用 兰州商学院陇桥学院本科生毕业论文 设计 论文 设计 题目JAV A游戏程序设计系别信息管理系专业业 方向 计算机科学与技术 网络工程 年级 班808级网络工程班学生姓名蒋蒋晓晓霞指导教师 李兵xx年5月2日声明本人郑重声明所呈交的毕业论文 设计 是本 人在导师的指导下取得的成果 因本毕业论文 设计 引起的法律后果完全由本人承担 本毕业论文 设计 成果归兰州商学院陇桥学院所有 特此声明毕业论文 设计 作者签名年月日1连连看游戏设计摘摘要 本文用Java来设计与实现简单的连连看游戏的基本功能 玩家可以 在游戏区域中通过鼠标来选取相同的两个图片 采用特定的消除规 则对它们进行消除的操作 当游戏区域中的所有图片对都被消除后 玩家即可胜利 文章对该游戏的算法以及游戏图片的绘制 画线等进行详细的介绍 实现比较简单 文章重点内容是如何设置整个游戏的界面 如何控制连连看游戏中 随机图片的生成且每种图片必须为偶数个 游戏开始后 判断鼠标两次点击的图片能否消去 如何画出一条线连接这两个相同的图片 最后能够实现简单的不同的玩法和闯关的功能 增强游戏的趣味兴 关键词 连连看Java游戏重点内容AbstractUse javafor thisdesign andimplementation of the simplestlianliankangames players canthe basicfunctions inthe regionthrough themouse tochoosetwo identicalimages in particularthe rulesfor themto beeliminated when theareain allthe picturesto allthe playerscan beeliminated on the game of thealgorithm anda drawngame drawing aline waitingfor detailedinformation the relativelysimple The articleis focusedon theissues for placingthe entiregameinterface how tocontrol wasa seriesof viewgame generatedand randomphotoin everykind ofphoto musteven numbered After thestart ofthegame can judgethe photoofthemouse twohits How todraw aline linkingthese twoidenticalphoto Final simpledifferent canbe achievedand breakthrough thebarrierof functional enhance thetaste xingofthegame Key words Linking up Java game Keycontents2目录1引言 1 1游戏介绍 1 2设计目的 1 3主要问题 1 4开发环 境 2需求 分析 3可行性研究 4功能模块设计 4 1总体模块 4 2基本类的UML图 5详细设计 5 1界面设计 5 11开始按钮 5 12暂定按钮 5 13求助按钮 5 14结束按钮 5 15重排按钮 5 16标签 5 17记分器 5 2画图分析 5 3偶数个图片 重排分析与设计 5 4消去算法的分析与设计 5 41初始化工作 5 42水平判断 5 43垂直判断 5 5画线的分析与设计 5 6鼠标单击事件分析与设计 5 7帮助算法分析与设计 5 8不同玩法的分析分析 和设计 6编码 7测试 7 1限时功能的测试 7 2画线测试 7 3图形的移动测试 7 4消除测试 8总结 参考文献 附录 31 引言1 1游戏介绍连连看街机游戏 四川麻将 和 中国龙 是给一堆图案中的相同图案进行配对的简单游戏 在x x年 一个叫做朱俊的网友将这种形式搬到了PC上 立刻成为办公一 族的新宠 并迅速传遍了世界各地 饱受工作压力的人们没有太多的时间进行复杂的游戏 而对于这种 动动鼠标就能过关的游戏情有独钟 之后村子的连连看风靡版 阿达的连连看奥运版 连连看反恐版 还有敏敏连连看 水晶连连看等遍地开花 造就了一个连连看的新 世界 连连看游戏有多种地图样式和道具系统 大大加强了游戏的可玩性 是一款老少皆宜的休闲佳品 1 2设计目的游戏旨在学习和巩固面向对象的程序设计方法 充分体 会JAVA在程序设计方面的强大功能和独特之处 了解用JAVA开发项目的一般过程 培养运用JAVA解决实际问题的工 作能力 功能简单 趣味较大 另外也通过本程序将我四年来所学到专业知识和其他方面的知识融 入到实际应用中 1 3主要问题开始制作游戏时 主要要解决的问题有以下几个方面如 何设置整个游戏的界面 如何控制连连看游戏中随机图片的生成且 每种图片必须为偶数个 游戏开始后 判断鼠标两次点击的图片能 否消去 即图片是否相同且图片之间路径的判断 1 3开发环境4开发 语言 JAVA开发的集成环境MyEclipse 2 需求分析随着信息化产业的不断发展 人们水平不断的提高 游戏成为当今时代不可缺少的一部分 它既能减轻人们的压力也能 锻炼人们的判断能力和反应能力 不管在那个小游戏网站连连看总是排在玩家欢迎的前几位 因为它 适合于大众的集体休闲 趣味益志和娱乐 它看似简单但却变化无穷 令人上瘾 连连看游戏作为一种益智类游戏 由于规则简单 容易学会 再加 上界面上丰富的图像显示动画效果在上班族的办公电脑上风靡多时 而它的主要功能是使得人们在紧张的工作之余能够调节人们的心 情 连连看游戏有很多的好处 游戏不在是静态的 而是动态的了 而且在此基础上游戏变得更加的华丽 无形中增强了游戏的可玩性 3 可行性研究在技术方面Java是当今最为流行的语言 能够实现连 连看游戏 随着计算机硬件的不断的提升 连连看要求的配置已不再是问题 因为是本人设计的论文 因此不考虑经济问题 4 功能模块4 1总体模块图1 1为游戏所有要实现的功能5画出图形 相连接的线 按照规则寻找连线相消算法 连连看系统图1 14 2基本类的UML图 Gameboolean is playing boolean is pausing int time count void init void start void stop void pause void timer void help void re order 图4 11tacticString nameint time limitint flower countint score游戏界面的设计 不同的玩法设计 6Tactic String name inttime limit int flower count void start void stop void move void mouse int x int y void randomize int a void timer boolean connect int x int y void re order void help 图4 22简述两个UML图图4 21为Game的基本类建模图 Game 类游戏是游戏界面中使用的基本功能 游戏中开始 暂停 帮助 结束 重排 得分记分器等基本功能 图4 22为tactic的基本建模图 作为一个连连看游戏基本的属性当然的有 有花的个数 花的名字 每次出现在屏幕上面的花的个数 玩家消去的花的个数 玩家的 成绩 点击鼠标事件的做的事件 这些都是tactic类的基本的属性 5详细设计5 1界面设计游戏界面有很多种 因为时间的有限 本人 采用java 中JFrame类实现的窗体 比较简单 5 1窗体的基本布置窗体利用JFrame调出窗体 设置成满屏 背景设 置为灰色 窗体上应该有开始 暂停 求助 结束 重排等按钮 并且应该还 有一个标签 标签的内容就是得分或者成绩后面紧跟的是记分器 这些控件在使用之前必须先进行事情的监听 在实现的过程中 通 过接口现实监听 将每个控件都添加到面板panel中采用borderlayout布局 控件放在 相对于窗体南面7的方向居中 因为Java中panel默认的布局是flowlayout布局因次无需在将控件进 行调正 每个控件的简单功能如下5 11开始按钮开始即是游戏的开始 游戏刚开始 暂定 求助 结束 重排按钮都是不可用的 当点击 开始后其他的按钮才会出现可用的情况 并且为了能够使程序结构清晰 所以采用start 方法进行调用 start 方法包含time 方法的调用 drawImage 方法等 start 方法的具体实现如下void start is playing true tactic factory String boBox getSe lectedItem time count tactic time limit progressBar set Maximum tactic time limit progressBar setValue tactic time limit timer start startButton setEnabled false stopBut ton setEnabled true pauseButton setEnabled true helpButto n setEnabled true reOrderButton setEnabled true panel sta rt panel drawImage 5 12暂停按钮暂停按钮能够实现暂停的 功能 使的进行游戏的时间不在变动 同时弹出消息框 为了能够 使得程序结构清晰 将暂停的方法设计在pause 方法中 当点击暂停按钮时调用pause 方法 具体的pause 方法如下void pause is pausing true MessageBox 继续游戏 is pausing f alse 5 13求助按钮求助找出规则下的相同的花色 点击求助能够 实现简8单的求助功能 同理这儿使用help 方法 使得结构简单明了 help 方法是static类中方法相同所以调用static类中的help 方法即可 这个我们将在帮助算法中讲述 5 14结束按钮结束此次游戏 应该分为三种一种是点击结束按钮结 束 一种是游戏获胜结束 还有一种是记分器时间到 游戏结束 当点击结束按钮时 其他的按钮变为不可用 只有开始的按钮可用 并且在结束后 记分器停止 重画界面 调用repaint 方法 停止的具体方法如下void stop is playing false MessageBox 游戏结束 消息对话 框progressBar setValue 0 startButton setEnabled true stopButton setEnabled fals e pauseButton setEnabled false helpButton setEnabled fals e reOrderButton setEnabled false timer stop panel repai nt 5 15重排按钮就是在此次游戏的基础上 将画面进行随机的 重新排序 调用方法re order 方法 tatic类中的方法与这个方法相同 所以我们同样也在算法的设计中 讲述 5 16标签标签在这儿是所有控件中是功能最为简单的控件 它的功能很简单 就是标记记分器的作用 给标签初始化值为积分 或者得分即可 为了能够美观些 可以设置字体的颜色为黄色或者红色 标签只需添加在记分器的前面即可 5 17记分器由ProgressBar控件构成 有time类进行控制 应当注意 的time9使用采用毫秒值 在编程时通过测试 确定具体的值 该值为1000每次减去1 游戏开始的时候 矩形框全填满 由time 方法对填充进行控制 通过创建另一个线程在游戏进行的时候实现计时功能 并且调用了thread sleep 方法来控制计时器的进度 按时间进行减少 或者按照成绩进行增加 如果时间到了 计分没有设定的时间快 则游戏失败 游戏结束 必须将计分的功能和记分器减少设计在一起 记分器随着时间到减 少 但是当成绩增加记分器增加 都显示在ProgressBar控件上面看 见 这样游戏才能具有可玩性 开始按钮中只需调用此方法即可 具体的方法实现如下 开始游戏自动调用 记时开始 void timer if is pausing return if is playing 时间每次减少d elay 1000time count delay 1000 if time count 0 progressBar setValue time cou nt tactic timer elsestop 具体的界面图形如图110图15 2画图分析与设计在Java中Graphics类是所有图形上下文的抽象基类 允许应用程序在组件以及闭屏图像上进行绘制 利用Graphics类调动的连连看图片 应当注意的是四周留出画线的 效果见下图 利用Java中的画笔 paint方法画出图形 应该注意得是在图像画完之后利用dispose 方法释放掉系统资源 首现调用panel的start 方法将每行 每列的数组的值初始化为 1 计算图片的长度 宽度 通过测试划定区域 确定坐标 画出图形 11方法简单称述start 方法是控制四周空出一周用于画线 初始化 方面板 每次开始程序自动调用paint方法 paint方法调用drawImage g i j 方法描述图片的坐标和大小以及位置 drawImage 方法画出图形 drawImage 申请两个数组分别存ground和grd存放行数和列数 对grd数组初始化值为 1 代表的是没有图片 通过比较两个数组的值不同来画出图形 grd i j 数组中的值不等于ground i j 的值 为了节省资源 每 次都只画出 被消掉的部分 这个用于不同的玩法中 最后调用dispose 方法释放资源 Paint 方法负责画出图形 drawImage Graphics g int r int c 方法是对图形的范围进行具体的描述 具体的相互调用的四个方法如下 初始化面板12void start for int i 1 i 将这个数组变为一个一维数组随机的打乱调换 这样就能控制出现偶数个图片 并且为了使得图片能够重13排 每 次只需将这个数组每次的图片将随机的调换即可 但是该注意的是要保证图片的坐标不变 这样的算法应该注意的问题是必须是偶数列不然有可能多出一列没 法消除 要达到的效果如下get flower 方法随机的取出图片 init array int a 方法存放图片的二维数组 并且通过a i j 1 a i j 复制使得出现偶数个图片 randomize int a 方法变换数组将存放图片的二维数组变换为一维并且使得出 现的这些图片随机的进行调换位置 同时利用这个方法将图片的坐 标记下随机的打乱数组中的图片 从而实现重排的功能 具体的实现方法如下 取花int get flower return int Math random flower count void init array int a int i j 初始化整个数组复值全为 1表示没有图片for i 0 i for i 1 i 联通就是能够消去 不连通则是不能够消去 不联通则分为同一块 空白块 花色不同 这三种情况我们都统统的视为不联通 排除上述的三种情况 只要求消去的算法中 着重谈论联通的情况 15可以将该方法设计为boolean类型的方法 因为它只有两个返回值 真或者假 参数列表我们可以设计成为鼠标点击两个图片的坐标 分别是 x1 y1 x2 y2 x1和x2代表的是行号 y1和y2代表的是列号 申请数组volatile int ground newint rows cols 存放同种花色的图片 这样可以很简单的排除同一块 空白块 花色不同的三种情况 同 一块图片排除if x1 x2 空白区域排除else if ground x1 y1 1 ground x2 y2 1 return false 不是同种花色else if ground x1 y1 ground x2 y2 return false 联通的方法分析对于选中的两个方块的消去 他们必须符合 下面3个条件 1 选中的两个方块图案相同 2 选中的两个方块之间没有障碍物阻碍的情况下 可以用若干个 垂直的直线线段连接起来 3 这些将它们连接起来的直线线段的折点不超过两个可以将图形 描述为下面所示的坐标两个相同的花色用数组6代替165 42水平判断 玩家点击的图片的顺序可能不同 为了简化代码我们可以先对玩家 点击的两个图片的顺序进行判断 保证 x1 y1 在 x2 y2 的上面这 样可以减少判断代码 最后在交换图片的坐标 先对 x1 y1 上面的图形进行判断 如有图片则停止判断 将判断的值存如top中 然后对 x2 y2 上面的图片判断 如有图片 则停止判断 将判断的值存如x中 取 top x 的最大的值 用同样的方法对 x1 y1 和 x2 y2 下面进行判断 将判断的结构存入 bottom x 中取最小的值 然后对水平方向的图片进行判断 如果有图片能够构成联通 并且查找最优的路径 将每个判断的节点存入到对象数组LineNode line中 给对象数组赋值用于后续的画线 这种情况如下图 它分为两种17上述的特殊的情况在查找水平联通 的情况的时 如果bottom和top的值为0 并且查找水平的结果时 中间的没有图片 则是水平联通 代码描述 保证 x1 y1 在 x2 y2 的上面if x1 x2 x1 x2 x2 x y y1 y1 y2 y2 y 向上判断 取最大的横坐标x x1 x1向上查找f or i x1 1 i 0 i 没有图片if ground i y1 1 x i elsebreak top x x x2 x2向上查找for i x2 1 i 0 i 没有图片if ground i y2 1 x i elsebreak top Math max top x 向下判断 取最小的值x x1 18 x1向下查找for i x1 1 i rows 1 i 没有图片if ground i y1 1 x i elsebreak bottom x x x2 x2向下查找for i x2 1 i row s 1 i 没有图片if ground i y2 1 x i elsebreak bottom Math min bottom x 查找水平连通线i f top bottom for i Math max x1 top i Math min x2 bottom i flag true for j Math min y1 y2 1 j i k line l row k line l col y1 l 向右存入节点 19if y1y 2 for k y1 k y2 k line l row i line l col k l x2 y2 向下存入节点 if ix2 for k i k x2 k line l row k line l col y2 l 节点附值 表示没有图 片line l row 1 return true 查找最短路径for i x1 1 i top i flag true 不判断x1和x2之间的纵列if i x1 水平判断for j Math min y1 y2 1 j i k line l row k line l col y1 l 取y1联通向右的节点if y1y2 for k y1 k y2 k line l row i line l col k l 取x2联通向下的节点if ix2 for k i k x2 k line l row k line l col y2 l 节点赋值 表示没有图 片line l row 1 return true 和上面相同从六个方向判断 存放节点 查找最短路径 最后节点赋值 用于后续使用for i x2 1 i x1 横向行判断f or j Math min y1 y2 1 j i k line l row k line l col y1 l y1到y2的节点存放if y 1y2 for k y1 k y2 k line l row i line l col k l x2上面节点的存放if ix 2 for k i k x2 k line l row k line l col y2 l 节点赋值line l row 1 22return true 5 43垂直判断水平判断排除了三种情况 垂直的判断就要 判断6种情况 用上述同样的思想 先是取的两个图片左边的最大的值 取的左边的最小的值 然后判断纵向判断 然后从六个方向判断 判断是通路的节点存入到数组中 给节点赋 值 并且返回真 可能出现的情况会有如下的三种 交换位置23if y1 y2 x x1 x1 x2 x2 x y y1 y1 y2 y2 y 与 上面同样的思想 向左取最大的y y1 for j y1 1 j 0 j 没有图片if ground x1 j 1 y j elsebreak left y y y2 for j y2 1 j 0 j 没有图片if ground x2 j 1 y j elsebreak left Math max left y 与上面同样的思想 向右取最大的y y1 for j y1 1 j cols 1 j 没有图片if ground x1 j 1 y j elsebreak right y y y2 for j y2 1 j cols 1 j 没有图片if ground x2 j 1 y j elsebreak right Math min right y 沿着横向 查找垂直 连通线for j Math max y1 left j Math min y2 right j fl ag true 24 纵向查看是否联通for i Math min x1 x2 1 i j k line l row x1 line l col k l if x1x2 for k x1 k x 2 k line l row k line l col j l if jy2 for k j k y2 k line l row x2 line l col k l line l row 1 return true 查找最短路联通方式for j y1 1 j left j if j y1flag true for i Math min x1 x2 1 i j k line l row x1 line l col k l if x1x2 for k x1 k x 2 k line l row k line l col j l if jy2 for k j k y2 k line l row x2 line l col k l line l row 1 return true 查找最短里联通方式for j y2 1 j y 1flag true for i Math min x1 x2 1 i j k line l row x1 line l col k l if x1x2 for k x1 k x 2 k line l row k line l col j l if jy2 for k j k y2 k line l row x2 line l col k l line l row 1 return true return false 5 5画线分析和设计27Graphics2D类扩展Graphics类 以提供 对几何形状 坐标转换 颜色管理和文本布局更为复杂的控制 它是用于在平台上呈现二维形状 文本和图像的基础类 利用这个类可以将图片的几何形状 坐标转换 利用Graphics类的方法drawLine int x1 int y1 int x2 int y2 它的意思是 x1 y1 和 x2 y2 之间画线 首现应该将图片的坐标进行转换 然后控制朝着四个方向那个方向 画 画的方向分别是从左向右 从右向左 从上向下 从下向上 因此只需从四个方向画线 drawLine LineNode line 这个数组中保存着我们在算法中判断的 节点 它从每个节点数组中画线 并且选取drawLine int x1 int y1 int x2 int y2 方法中的不同类型的线进行画线 drawLine2 int row int col int type 调用画线方法 并且设置线的颜色宽度等属性 控制线的格式void drawLine Graphics g int row int col int type Graphics2D g2 Graphics2D g g2 setColor LINE COLOR g2 setStroke new BasicStroke lineWidth int X col 1 dImageWidth dXInterval dLeftMargin int Y row 1 dImageHeight dYInterval dTopMargin switch type case1 从左向右画线g2 drawLine X 38 Y 34 X 76 Y 34 break case2 从下向上画线g2 drawLine X 38 Y 34 X 38 Y 0 break case3 从右向左画线g2 drawLine X 38 Y 34 X 0 Y 34 break case4 从上向下画线g2 drawLine X 38 Y 34 X 38 Y 68 break void drawLine2 int row int col int type Graphics2D g Graphics2D getGraphics 28g setStroke new BasicStroke lineWidth g setColor LINE COLOR drawLine g r ow col type g dispose 从那个数组中画线 选用那种线 public voiddrawLine LineNode line int i for i 0 ix2 drawLine2 x1 y1 2 drawLine2 x2 y2 4 else if y1y2 drawLine2 x1 y1 3 drawLine2 x2 y2 1 使用线程 让线停止会sleep 10 重画界面repaint 画线实现的具体截图如下295 6鼠标单 击事件分析和设计当鼠标点击图片时没有现象 或者出现两个图片消失的情况 首现游戏中没有单击同种花色的花的区域 则不做任何的事情 如果游戏如果没有开始 单击不做任何的事情 如果单击的区域不是是按照游戏规则的区域 则做出不做任何的操作 排除以上的情况留下的是同种游戏规定的同种花色 则加时奖励 mouse int X int Y 是设计在panel中的 它限定区域 并且调用tactic类中的mouse方法 tactic类中的mouse方法包含计时嘉奖的条件 调用drawImage 方 法重画界面 和画线的功能 具体设计的方法如下void mouse int X int Y if game is playing return if rect cont

温馨提示

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

评论

0/150

提交评论