




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科毕业设计(论文) 题 目: 基于java的连连看游戏的设计与实现 专题题目: 学 院: 软件学院 专 业: 软件工程 班 级: 软件冶金 学 号: 学 生: 指导教师: 职称: 指导教师: 职称: 时间: 年 月 日 江 西 理 工 大 学本 科 毕 业 设 计(论文)任 务 书软件学院 软件工程 题 目: 基于java的连连看游戏的设计与实现专题题目(若无专题则不填):原始依据(包括设计(论文)的工作基础、研究条件、应用环境、工作目的等):l 工作基础已经熟练的掌握java的各种基本技能,能够完成一款简单的基于java的连连看游戏的设计与实现。l 研究条件MyEclipse或者Eclipse和jdk 7的环境下编写整体的代码,用photoshop为游戏提供大量精致的图片素材。l 应用环境java当今最流行的语言,完全能够实现连连看游戏,硬件要求也不高,所以可行性是没有问题。l 工作目的 连连看这款游戏的最基本架构,是如何实现消除相同的图片,并且如何有效的最短的消除路径。主要内容和要求:(包括设计(研究)内容、主要指标与技术参数,并根据课题性质对学生提出具体要求):l 研究内容1.用户登录注册系统(选做)2.游戏的基本逻辑实现(必做)3.游戏排行榜系统(必做)4.游戏的有难度梯度效果(必做)5.游戏的界面设计(必做)l 主要技术指标与技术参数能够完整的完成游戏的体验成为可以娱乐的游戏。l 具体要求独立完成本项目系统研制过程,系统能够顺利运行,并独立完成论文报告。日程安排:1、 1、毕业设计开题2016年3月30日前完成2、第一、二周 需求分析3、第三、四周 概要设计4、第五、六周 详细设计5、第七、八、九周 系统开发6、第十周 系统测试7、第十一、十二周 毕业设计论文整理8、提交毕业论文 2016年5月8日前完成主要参考文献和书目:1 Cay S. Horstmann, Gary Cornell.Java核心技术M.北京:机械工业出版社,2014.2 BruceEckel.Java编程思想(第4版)M.北京:机械工业出版社,2007.3 孙涌.现代软件工程M.北京:北京希望电子出版社,2003.4 赵满来.可视化Java GUI程序设计M.北京:清华大学出版社,2010. 5 David Wallace Croft.java游戏高级编程M.北京:清华大学出版社,2005.6 王鹏.JavaSwing图形界面开发与案例详解M.北京:清华大学出版社,2008.指导教师签字: 年 月 日教研室主任签字: 年 月 日江 西 理 工 大 学本 科 毕 业 设 计(论文)开 题 报 告软件学院 软件工程 专业 软 题 目:基于java的连连看游戏的设计与实现专题题目(若无专题则不填):本课题来源及研究现状:l 课题来源:小游戏制作的目的是满足人们休闲的需要,在紧张工作之余休闲类的游戏可以给人带来最大程度的放松,也可以增进人们之间的交流。现在小游戏,网页游戏,手机游戏的留下,除了玩法简单,而且还是经典游戏,那连连看就是个典型案例。连连看是时下,老少皆宜的网络益智类游戏,游戏规则简单,娱乐性强而具有广泛的娱乐群体。连连看主要测验的是游戏者的反应速度和观察能力。l 研究现状:游戏“连连看”是从台湾的桌面小游戏,进入大陆后风靡一时,也吸引众多程序员开发多种版本的“连连看”。以最早出现的是QQ游戏大厅的连连看游戏,当时也是风靡一时。2013年8月5日腾讯上线的天天爱消除连连看,从游戏形式上看,是普通的连连看游戏,天天爱消除引入社交系统,是大量的QQ用户涌入,使得又一次的大成功。所以连连看还是一款品质很高的游戏,可以说是小游戏中的经典之作,所以连连看的优势还是很明显的课题研究目标、内容、方法和手段:l 研究目标:该游戏主要达到一下几个目标:1.如何设置整个游戏的界面;2.如何判断游戏输赢和是否结束;3.如何确定两个是否能消除;4.怎样求出想通图形间最短路径。l 研究内容:。如何控制连连看游戏的随机生成图片且每种图片是偶数个;游戏开始后,判断鼠标两次图片能否消去,图片是否一样和消除路径是否合法的判断;l 研究方法:用可视化开发的方法来构建游戏的整体界面会比传统的方式构建的整洁美观且高效。设计(论文)提纲及进度安排:l 设计(论文)提纲:第一章 绪论第二章 相关技术与方法第三章 系统分析第四章 系统设计第五章 系统实现第六章 系统测试第七章 总结l 进度安排:1、毕业设计开题2016年3月20日前完成2、 第一、二周 需求分析3、 第三、四周 概要设计4、 第五、六周 详细设计5、 第七、八周 系统测试6、 第九、十周 系统分发7、 第十一、十二周 毕业设计论文整理8、 提交毕业论文 2016年5月8日前完成主要参考文献和书目:1夏先波.JavaJDK实例宝典M.北京:电子工业出版社,2007.2吴其庆.Java程序设计经典教程M.北京:冶金工业出版社,2005.3耿祥义,张跃平. Java2实用教程M.北京:清华大学出版社,2007.4蔡勇,姜磊,马宁,倪文志. Java2程序设计基础教程与上机指导M.北京:清华大学出版社,2005.5林建素,孟康健.Eclipse开发学习笔记M.北京:电子工业出版社.2008.46 Flanagan.Java技术手册M.北京:中国电力出版社,2002.7 黄成.基于BREW平台的手机连连看游戏设计D.北京邮电大学,2010.指导教师审核意指导教师(签字): 年 月 日摘 要游戏行业作为新兴行业,正在以其特有的魅力成为大众的主要娱乐方式。游戏的魅力主要在于,游戏可以让玩家在消遣时间的同时还能带给玩家放松而又不乏味的一种娱乐形式。如今的游戏制作更是大手笔去打造出众多画面精美,玩法众多的游戏。但是在网络游戏和大型单机游戏泛滥的时代,还是有许多经典的游戏依然活跃在游戏市场比如说“连连看”。说起“连连看”大家都会觉得很熟悉,虽然连连看游戏是款小游戏,但是连连看是一款陪伴不少人很长的一款经典单机游戏也是休闲小游戏。连连看游戏规则就是在一块指定的游戏区域内,分布许多不同的图片,当两张相同的图片符合某种规则就是可以消除,当所有的图片全部消除就取得胜利。本游戏使用JAVA语言为开发语言,使用Eclipse作为开发平台,使用PhotoShop制作图片,为游戏提供图片素材。本游戏采用Swing构建游戏画面,通过二维数组来判断游戏消除路径是否合法,也是让算法更加清晰明了。本游戏为了让玩家有更多的体验加入了道具、排行榜等功能。希望通过这次的游戏开发,让大家再一次的体会到经典游戏连连看的乐趣。关键词:连连看;小游戏;JAVA;数组;SwingABSTRACTGame industry as a new industry, is its unique charm to become the main entertainment of the public. The charm of the game mainly lies in, the game allows players to play in the fun time while also bring players to relax and not boring a form of entertainment. Todays game production is more generous to create a more beautiful picture, play a large number of games. But in the network game and large single game era of rampant, there are still many classic games are still active in the game market for example Lianliankan .Speaking of Lianliankan we will feel very familiar with, although the game is a series of games, but again and again is a company with a lot of people is a classic stand-alone game is a casual game.Lianliankan game is in a designated area of the game, the distribution of many different pictures. When two cards of the same picture comply with some rules that can be eliminated, when all the pictures to eliminate all win.This game uses the JAVA language for the development of language, using Eclipse as a development platform, using PhotoShop to produce pictures, video games for the game to provide the material. This game uses Swing to build the game screen, through the two-dimensional array to determine the path of the game to determine whether the legitimate, but also to make the algorithm more clear. This game in order to allow the player to have more experience to join the props, ranking and other functions. Hope that through the development of the game, so that we can once again experience the classic games to see the fun.Key words:Lianliankan; small game; JAVA; Array; Swing目 录第一章 绪论11.1研究背景和意义11.2研究目标11.3论文结构11.4本章小结2第二章 相关技术与方法32.1架构概述32.2关键技术简介32.3开发工具32.4本章小结4第三章 系统分析53.1可行性分析53.1.1技术可行性53.1.2经济可行性53.1.3 操作可行性53.2 系统设计分析53.2.1系统总体需求53.2.2系统体系结构分析63.2.3用例图分析63.4本章小结8第四章 系统设计94.1系统模块设计94.1.1 IconsManage类104.1.2 Music类104.2界面模块设计114.3游戏核心算法模块设计114.3.1概述114.3.2核心算法设计114.3.3提示和重列功能设计124.3.4游戏难度设计124.3.5排行榜设计134.4本章小结13第五章 系统实现145.1游戏界面145.2 算法实现155.3本章小结20第六章 系统测试216.1系统测试综述216.2测试目标216.2.1单元测试216.2.2整个模块测试226.3测试分析226.4本章小结22第七章 总结23参考文献24致 谢25江西理工大学2016届本科生毕业设计(论文)第一章 绪论1.1研究背景和意义“连连看”游戏是来自台湾的桌面小游戏,进入大陆卷起了全网民热潮,同时也吸引众多程序员开发多种版本的“连连看”。当QQ游戏大厅中出现的连连看游戏时,当时也是风靡一时,众多网友以次为娱乐游戏。在2013年8月5日腾讯上线的天天爱消除,虽然从游戏形式上看,就是普通的手机版的连连看游戏,但是天天爱消除引入社交系统,把一款几乎单机的小游戏加入好友排行的功能,吸引了大量的QQ用户涌入,以及一些有趣的玩法,使得连连看又一次获得全民热潮。以上可以看出“连连看”游戏依旧一款品质很高的饱受大众喜爱的小游戏,更是小游戏中的不灭经典之作。不光是广大民众喜爱连连看游戏,它也是广大编程爱好者喜欢模拟的学习案例,所以连连看的优势还是很明显的。1.2研究目标对于本系统,首要构建出游戏的界面出来,尽量有一定的美观效果;其次就是设计游戏的消除算法主要分以下几种情况:相邻、同列或者同行、一个转角或者两个转角,还需要判别是否是相同的图片,才可以实现消除,判断输赢等。1.3论文结构全文共分为七章:第一章 绪论:首先介绍课题研究的背景和意义,接着介绍研究的目标以及论文整体结构。第二章 相关技术与方法:对课题中使用的技术进行简介,以及介绍使用的开发工具的介绍。第三章 系统分析:对本系统先进行需求分析,以及如何设计系统。第四章 系统设计:对本系统的详细设计部分,给出系统模块的设计和核心算法的设计。第五章 系统实现:给出程序的部分界面最终效果,以及核心业务实现代码。第六章 系统测试:介绍并使用的测试方法,并给出相应的测试结果。第七章 总结:是对整个项目的心得体会。1.4本章小结本章为论文的绪论部分,主要分析连连看游戏的研究的意义所在,介绍我对连连看游戏的研究目标和概要介绍论文的各个章节。2江西理工大学2016届本科生毕业设计(论文)第二章 相关技术与方法2.1架构概述由于是简单的单机Java游戏,不涉及网络传输和数据库的设计,所以主要是用界面和图片的形式展现出来。在此次项目中只是使用了Swing技术把游戏框架搭建起来,因为Swing组件是采用了一种MVC的设计范式,即模型-视图-控制(Model-View-Controller),其中模型也就是控件是用来保存内容,视图是用来显示内容,控制器用来处理用户输入操作实现人机交互。模型-视图-控制器模式的一个优点是一个模型可以有多个视图,其中每个视图可以显示全部内容的不同部分或不同形式。当通过某一个视图的控制器对模型进行更新时,模型会将这种改变通知给两个视图,视图得到通知后会自动刷新。控制器负责用户输入事件,然后决定是否把这些事件转化成对模型或者视图的改变。这次连连看项目简单的分成了视图和控制模块,视图模块主要是将视听效果表现出来,控制模块主要是负责控制游戏的玩法和数值的交互。2.2关键技术简介主要使用的JAVA SE的Swing技术和IO流,选择Swing工具包而没有选择AWT工具包主要是因为Swing所提供的功能要比AWT提供的更加广泛,Swing工具包是具有灵活而强大的GUI工具包。同时Swing组件在不同平台展示的效果一致,都是轻量级的组件,不依赖操作系统的支持使本次项目更倾向于选择Swing。JAVA的IO流技术也是做的相当优秀的,可以用嵌套的形式将IO形成各种各样的功能流,也可以将流的职能区分开,例如FileInputStream可以从文件和其他更外部的位置获取字节,而DataInputStream可以将字节组涨到更有用的数据类型中。这也是IO流技术的灵活地方。2.3开发工具开发工具主要使用了Eclipse和PhotoShop进行开发,Eclipse是一个开放源代码,基于JAVA语言的可扩展开发平台,就其自身而言,他仅仅是组服务,是个框架,通过一些插件和一些组件组成的开发平台。Eclipse从编写、查错、编译、帮助等等各方面为Java语言贴身定做。安装eclipse前需先安装JDK及改变环境变量才能正常使用eclipse这个软件。所以事先对机器需要进行相关的配置。PhotoShop可以有效的进行图片的编辑工作,是一款图像处理软件。2.4本章小结本章主要是介绍开发这款连连看游戏所需要的基本技术和开发工具的优点,选择Swing技术进行游戏的界面开发也是基于java语言的特性,Swing也是从各个方面将Java的优点展现出来。选择Eclipse好处主要是因为Eclipse和Java语言配合的天衣无缝,让初学者和老程序员都爱不释手。29第三章 系统分析3.1可行性分析3.1.1技术可行性这次的连连看游戏开发选择的使用Eclipse开发环境下,主要使用Java中的Swing技术,Swing为连连看的界面设计提供了方便,而且Swing也是基于MVC模式编程可以使程序层次分明便于开发者的使用,所以在Windows下使用java开发是完全是可行的。3.1.2经济可行性连连看的开发和设计到实现只需要一台有能运行和测试Java程序的计算机和一个具有相关Java知识的开发者,而且开发成本低,开发周期短,完全可以由个人完成开发,是有经济可行性的。3.1.3 操作可行性本项目完成后,操作简单不需要有任何编程经验的人都可以进行游戏的体验,该游戏只需用户将相同的两个图片选出来,如果这两个图片符合相应的游戏规则就可以消除,该游戏规则也是沿用传统的连连看游戏规则,所以简单容易上手,当用户把所有的图片都消除后,游戏完成。同时游戏中还有时间和分数设计,提示和重置的功能的设计也是为了帮助用户更好的体验游戏的快感。所以,从操作可行性分析开发该游戏是可行的。3.2 系统设计分析3.2.1系统总体需求该游戏主要是让用户体验连连看游戏的魅力所在,所以当运行程序就可以直接开始游戏。这款游戏是会有难度的递增,这可以让游戏有可玩性和挑战性,游戏中有限量道具提供给用户使用,分数和计时器的功能主要为了给用户增加游戏的压力,还有成绩排行榜在玩家游戏结束时可以选择进行上传分数与其他玩家进行比较,整个游戏系统也是为了让玩家有更多的挑战的乐趣和体会连连看游戏的魅力。让这款游戏同时实现整个连连看游戏时也要包括如表3-1的质量要求。表3-1 质量要求主要质量属性详细要求正确性按照需求正确执行游戏,完成各个按钮的相应要求健壮性具有较高的容错能力和恢复能力性能效率软件的输出结果更新周期应该与系统的信息更新周期相同。在网络情况良好的情况下,3秒内响应用户的请求。易用性能让用户方便使用,易于操作安全性防止软件受到意外或蓄意的存取、使用、修改、毁坏或泄密的软件属性其数据应能集中存放于总部的数据库服务器中。可扩展性能方便的进行二次开发,满足对功能的扩展或提高并能提高相应的安全机制兼容性不易和平台和其他软件起冲突3.2.2系统体系结构分析整个系统采用单用户体系结构,没有采用常用的C/S体系结构或者B/S体系结构。采用单用户体系结构主要是因为做成单机的游戏,不需要连接服务器进行数据交互,所以就使用Swing中的MVC的形式来完成游戏的整体搭建。单用户体系结构好处在于,整个系统都在一台计算机上运行,用户大部分游戏数据不共享,只需共用一个排行榜的数据。所以该游戏采用了单用户体系结构来设计游戏。3.2.3用例图分析开始闯关用户过关/继续 闯关失败 图3-1 系统用例图系统整体用例主要是用户进行游戏操作如3-2用户开始闯关用例表、3-3用户用闯关失败用例表和3-4用户继续闯关用例表。 用例编号0001用例名称开始闯关用例概述用户通过此用例进行体验游戏主参与者用户前置条件无基本事件流步骤活动A1选择需要消除的图片A2选择使用提示功能A3选择使用重置功能扩展事件流1a提示或者重置功能的使用次数不够返回提示信息是否继续或者再来一局1b计时器完成计时但用户没有消除全部图片,提示用户闯关失败表3-2 开始闯关用例表用例编号 0002用例名称闯关失败用例概述用户通过此用例和进行的操作主参与者用户前置条件已进行开始闯关用例基本事件流步骤活动A1计时器完成计时但用户不能完成此关A2用户关闭游戏或者选择再来一局,当前关卡闯关失败表3-3 闯关失败用例表用例编号 0003用例名称继续闯关用例概述用户通过此用例可进行下一关的闯关操作主参与者用户前置条件已完成开始闯关用例基本事件流步骤活动A1计时器完成计时前用户能完成此关,并选择下一关A2用户选择操作跳过此关,进入下一关表3-4 继续闯关用例表3.4本章小结本章简略的进行可行性分析,通过可行性分析让读者清楚开发这款游戏各方面的条件,也让读者能够初步的了解连连看游戏涉及的内容。然后进行总体需求分析,主要介绍本系统需要实现的功能。通过介绍用户的用例分析,把用户遇到的常见的情况说明出来。第四章 系统设计作为一个连连看游戏,是需要游戏良好的界面设计和优秀的核心算法的设计才能构造一个比较完美的游戏,好的游戏应该在满足用户在消遣时间的同时不会由于玩法的单一而感到枯燥无味。所以该部分主要介绍系统中核心模块的设计。4.1系统模块设计连连看游戏游戏界面控制模块 游戏算法控制模块图4-1 系统结构图连连看游戏的大概系统结构主要如上图4-1 系统结构图所示。游戏界面控制模块主要包括了:(1)地图设计模块;(2)生产图片模块;(3)游戏音效模块;游戏算法控制模块主要包括了:(1)图片的消除算法;(2)游戏的过关和失败算法;(3)游戏的提示、重列等功能的算法;(4)游戏的计分、计时器功能的算法;(5)游戏的排行榜模块算法;(6)游戏的测试模块的算法;该游戏界面也分为两个模块:(1)菜单模块;(2)游戏区域模块;在菜单模块中主要包含了游戏算法控制模块中的计时器、计分系统、暂停、提示、重列、查看排行榜和跳过当前关卡的算法实现和构建。在游戏区域模块中主要任务是实现游戏的视听效果和提供给玩家操作消除图片的区域并实现游戏消除算法。4.1.1 IconsManage类IconsManage类用于读取用户选择的连连看图片集或者是获取程序默认的图片集合。IconsManage类也有产生随机图片集合的功能如表4-1所示。表4-1 IconsManage类功能表类功能描述读取和产生随机图片集合所在包名称game继承对象无实现对象类属性保护属性类型名称描述备注PublicIconicons图片集合主要是存放读取的图片PublicStringfolder文件夹名用于读取图片所在的文件夹主要实现方法保护属性方法名输入参数输出参数方法功能描述PublicgetIcons无Icon读取folder文件夹的图片publicgetRandomIconint numberMap mapsList产生随机图片并且相同图片是偶数个4.1.2Music类Music类主要控制游戏的背景音乐和声音特效如表4-2所示表4-2 Music类功能表类功能描述音乐播放器所在包名称game继承对象无实现对象类属性保护属性类型名称描述备注PublicFilefile音乐所处位主要是读取音乐文件主要实现方法保护属性方法名输入参数输出参数方法功能描述PublicMusicFile file播放音乐的效果读取音乐文件并且播放4.2界面模块设计界面设计采用JFrame和JPanel等一系列Swing组件中的常用控件来显示游戏界面。界面模块是由两个子模块组成分别是菜单子模块和游戏区域子模块。菜单模块主要是计时器子模块、分数子模块。提示和重置子模块、排行榜子模块还有附加的测试模块。菜单模块选择常用的水平布局,让菜单上的控件可以呈流水式分布在框体上。游戏区域模块选择使用自定义布局画出10*10的网格地图,产生10*10个JButton形成一个由JButton按钮群构成的正方形,然后使用一个int类型的二维数组来存放JButton,该int数组起到标记的作用。数组对应的下标和JBtton在显示位置的下标是不对应的,这里需要将JButton中x和y的坐标互换才是二维数组的下标,比如JButton在(1,2)消除了,则选择标记数组中2,1的值改变,为方便使用选择1代表消除了,0表示还未消除。4.3游戏核心算法模块设计4.3.1概述该模块设计目标主要是完成界面上所有控件的监听事件,也就是当用户操作各种按钮程序能有相应,实现人机交互的功能。4.3.2核心算法设计相邻同行或者同列两个转角的情况一个转角图4-3 游戏核心消除算法游戏中首先要检验选取的两个图片是否相同,当两个图片相同时才能进一步判断图片位置是否符合消除的条件。这些条件有(1)相邻的情况下,这种情况是最简单的,这种情况可以直接消除的;(2)同行或者同列且中间没有其他图片的情况也是相对简单的,控制行或者列之间的没有其他图片即可,在数组中的表示则为两个位置之间行或者列的元素的值都为1就可以消除;(3)一个拐角的情况就稍微复杂一些,要求两个图片有一条横和竖相通的路径,且两条路径相交于一点才可以实现消除;(4)最复杂的是最后一种两个转角的情况,设计的算法是将两个图片分别做横向和纵向的扫描,将能通的点全部分图片保留下来,最后将第一个图片保存的点和第二个保存的图片的点相连,如果能够成功相连则跳出算法做消除操作,如果全部不能相连的话说明两个图片不能满足两个转角的情况,不能完成消除的操作。4.3.3提示和重列功能设计连连看游戏必不可少的功能就是提示道具和重列道具,所以这两个功能的设计也是必须的完善的。提示功能相对也是很简单的,主要先遍历一遍当前游戏区域还有哪些图片存放起来,然后把第一个依次和所有的图片做比较调用判断是否能消除的算法,当能找到第一对能消除的则返回并且把这两个图片的背景颜色设置成红色,提示功能就结束了,为了增加游戏的可玩性,将提示功能设置成有限的次数。重列的功能相对比稍微复杂一些,首先要将没有消除的图片和按钮分别用List集合存放,当把页面上图片取出后将游戏区域的按钮图片去除,之后将收集到游戏区域剩下的图片重新随机设置回给JButton。这样的重列设计是为了保证图片不改变,JButton的位置也不发生改变。同样重列功能也是和提示功能一样设置了有限的次数。4.3.4游戏难度设计一个能吸引玩家的游戏不光在于它有漂亮的界面,而且还要有丰富的内容,所以除了正常的游戏形式以外还需要加入难度系统的设计,本游戏可以设计成多个难度的形式。(1)选择减少时间量,让用户更快的通关。(2)增加图片的移动,比如当用户消除两个图片后,把这两个图片上方的图片掉下来取代空位。相比两种增加游戏难度的方式各有所长,所以前面关卡采用增加图片的移动,后面关卡可以采用两种方式相结合的形式来完成游戏难度的梯度设计。4.3.5排行榜设计排行榜从诞生到现在,对于游戏来说是一个非常重要的一个子系统。它可以从客观的角度上来分析玩家的实力情况,给玩家一个比较好的定位的同时,让玩家为刷新排行榜的记录而奋斗。该排行榜设计中数据来源是由用户完成游戏选择上传分数时,当用户输入用户喜欢的名字后,来完成一个上传分数到排行榜中的操作并且把上传时间写入排行榜中。当用户点击查看排行榜时,以分数由高到低的排列顺序进行排列,如果分数相同,则用载入排行榜的时间由前到后进行排列。4.4本章小结通过本章的介绍让读者能清楚的了解连连看游戏的基本构造,了解这款连连看游戏的所包含的功能模块。本章还对读者简要的介绍了这些功能模块是如何设计的,设计该模块的目的和该模块需要完成的任务。第五章 系统实现5.1游戏界面由于是简单的单机的连连看游戏所以该程序是不需要用户进行注册登录等操作,所以不需要数据库的设计来存储用户数据的。如下图5-1是游戏开始后游戏的界面效果图。经分析,游戏的大致流程如下图5-2所示。图5-1 游戏界面开始游戏是否能消除图图片图片选择两个图片否全部消除否是进入下一关或者结束游戏是图5-2 游戏流程图5.2 算法实现实现图片消除的功能主要方法就是要对游戏界面的网格按钮进行监听,判断用户操作的内容是否符合游戏规则。关键核心代码介绍如下:下面的这段代码主要是介绍如何实现游戏区域地图的算法,同时实现了将随机图片分别放入网格地图按钮上的一个实例:private void forbutt() /map 初始化作用是为了标记按钮的状态ibs=IconsManage.getRandomIcon(10*10, maps);list = new ArrayList(ibs); map=new int1212;for(int i=0;imap.length;i+)for(int j=0;j12;j+)if(i=0|j=0|i=11|j=11)mapij=1;/相通的路径elsemapij=0;/表示路径不可走buts=new JButtonrowcol;for(int i=0;ibuts.length;i+)for(int j=0;jbutsi.length;j+)butsij=new JButton();String x=String.valueOf(i);String y = String.valueOf(j);String id=x+.+y;/给每个按钮起名字if(i=0|j=0|i=11|j=11)butsij.setVisible(false);elsebutsij.setLocation(i)*65, j*65-40);butsij.setSize(65, 65);butsij.setName(id);butsij.setIcon(list.remove(int) (Math.random() * list.size();下面这段代码主要描述的是用户点击的第一个按钮把背景颜色设置为红色,第二个选取的按钮也设置为红色背景,如果相同则消除,不相同则取消背景颜色,成为正常的背景颜色。效果图如下图5-3所示。if(first=null)/如何第一个按钮为空进行如下操作first = (JButton) e.getSource();icon1 = first.getIcon();first.setBackground(Color.RED);p1 = first.getLocation();else if(first!=null)/表示这是第二个按钮进行取值second=(JButton) e.getSource();second.setBackground(Color.RED);icon2 = second.getIcon();p2=second.getLocation();clean();/消除的核心算法first=null;second=null; 图5-3 按钮的效果图游戏中最主要玩法是如何判断用户点击的两个图片符合消除规则的一下部分是介绍游戏消除的核心算法代码clean()如下展示:public void clean() /首要确认图片是相同的,其次判断两个按钮是不同的if(icon1=icon2&first.getName()!=second.getName()/下面四个值是获取按钮数组对应的位置的值int p1x=(int) p1.getX()/65;int p2x=(int) p2.getX()/65;int p1y=(int) p1.getY()+40)/65;int p2y=(int) p2.getY()+40)/65;/同列相邻if(p1x=p2x&(p1y=p2y-1|p2y=p1y-1)remove(p1x, p1y, p2x, p2y);/消除算法/同行相邻else if(p1y=p2y&(p1x=p2x-1|p2x=p1x-1)remove(p1x,p1y,p2x,p2y);else if(p1y=p2y)&horizon(p1x,p1y,p2x,p2y)remove(p1x, p1y, p2x, p2y);else if(p1x=p2x)&vertical(p1x,p1y,p2x,p2y)remove(p1x, p1y, p2x, p2y);else if(oneCorner(p1x,p1y,p2x,p2y)/一个转角的算法remove(p1x, p1y, p2x, p2y);else if(checkMatch(p1x,p1y,p2x,p2y)/两个转角的算法remove(p1x, p1y, p2x, p2y);elsecent-;soce.setText(cent+);first.setBackground(null);second.setBackground(null);repaint();elsecent-;soce.setText(cent+);first.setBackground(null);second.setBackground(null);repaint();以上的的代码还有两个用到比较多的两个算法horizon(p1x,p1y,p2x,p2y)和vertical(p1x,p1y,p2x,p2y)如下:/横向是否能消除 判断横向的是否都是1private boolean vertical(int p1x, int p1y, int p2x, int p2y) / TODO Auto-generated method stubint y_start=p1yp2y?p1y:p2y;int y_end=p1yp2y?p2y:p1y;for(int i=y_start+1;iy_end;i+)if(mapip1x!=1)return false;return true;/纵向是否能消除 判断纵向两点之间是否都是1private boolean horizon(int p1x, int p1y, int p2x, int p2y) int x_start=p1xp2x?p1x:p2x;/System.out.println(x_end+end);for(int I = x_start+1;ix_end;i+)if(mapp1yi!=1)return false;return true;这两个算法用的比较多,在oneCorner(p1x,p1y,p2x,p2y)算法和checkMatch(p1x,p1y,p2x,p2y)算法中这两个算法也起到重要的角色,oneCorner(p1x,p1y,p2x,p2y)算法和checkMatch(p1x,p1y,p2x,p2y)分别控制一个转角的情况和两个转角的情况具体实现如以下代码。private boolean oneCorner(int p1x, int p1y, int p2x, int p2y) /一个转角的情况if(mapp2yp1x = 1)boolean path = horizon(p2x, p2y, p1x, p2y)&vertical(p1x, p2y, p1x, p1y);System.out.println(path+-1);return path;if(mapp1yp2x=1)boolean path2=horizon(p1x, p1y, p2x, p1y)&vertical(p2x, p1y, p2x, p2y);System.out.println(path2+-2);return path2;else return false;/该方法是两个转角的先行方法private ArrayList match(int p1x,int p1y) ArrayList list=new ArrayList();/存放可以消除的路径/扫描按钮(p1x,p1y),map的p1y+1,p1x+1的横坐标,保留可以和mapp1y+1,p1x+1相连的点for(int i=0;i12;i+)if(mapip1x=1&vertical(p1x, i, p1x, p1y)list.add(new Line(p1x, i, p1x, p1y, 0);/扫描按钮(p1x,p1y)纵坐标,并且保留for(int j=0;j12;j+)if(mapp1yj=1&horizon(j, p1y, p1x, p1y)list.add(new Line(j,p1y,p1x,p1y,1);return list;Private boolean checkMatch(int p1x,int p1y, int p2x, int p2y)/两个转角的情况boolean bool = false;/保证每次调用都是默认falseArrayList first = match(p1x,p1y);/获得第一个按钮全部路径ArrayList second = match(p2x, p2y);/第二个for(int i=0;ifirst.size();i+)for(int j=0;jsecond.size();j+)Line f = first.get(i);Line s = second.get(j);/分别将结束坐标相连,能连则返回trueif(f.p1x=s.p1x)&(vertical(f.p1x,f.p1y,s.p1x,s.p1y)|(f.p1y=s.p1y)&(horizon(f.p1x,f.p1y,s.p1x,s.p1y)bool = true;break;/当有可以消除路径立马跳出遍历if(bool = = true)break;return bool;/返回判断的结果计时器的实现主要起到判断输赢的作用,当游戏失败则会弹出提示框询问用户是再来一局还是结束游戏或者上传分数如图5-4所示的游戏失败提示框和5-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届湖北省枣阳五中学英语九年级第一学期期末监测模拟试题含解析
- 颈部矫正专业培训课程
- 2026届江苏省扬州市仪征市新集初级中学九年级化学第一学期期中检测试题含解析
- 帕博利珠单抗深度解析
- 2026届四川省广安邻水县联考九年级化学第一学期期中复习检测模拟试题含解析
- 重庆市西南大附属中学2026届九年级化学第一学期期中综合测试模拟试题含解析
- 云南省泸西县2026届九年级化学第一学期期中联考模拟试题含解析
- 大数据培训宣讲
- 四川省江油市五校2026届九年级化学第一学期期中质量跟踪监视试题含解析
- 2026届德州陵城区五校联考英语九上期末学业质量监测模拟试题含解析
- 2025年检查检验项目分级审核制度
- 2025年新版汉字听写大赛题库(含答案)
- 2025年供应科考试试题及答案
- 无人机装调检修工技术考核试卷及答案
- 《传感器原理及应用》课件-第8章+光电效应及光电器件
- 古诗词诵读教学设计与实施方案
- 2025年山东省政府采购评审专家考试题库附含答案
- 眼镜验光师试题(及答案)
- 第二章 有理数的运算 单元测试(含解析)2025-2026学年人教版(2024)数学七年级上册
- 2025-2026学年岭美版(2024)小学美术一年级上册教学计划及进度表
- 2025年全国保密教育知识竞赛题库附答案
评论
0/150
提交评论