基于java+swing+GUI的连连看游戏设计与实现(毕业论文+程序源码)

大家好,今天给大家介绍基于java+swing+GUI的连连看游戏设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板等的小伙伴,可以进入我的博客主页查看左侧最下面栏目中的自助下载方法哦

文章目录:

  • 基于java+swing+GUI的连连看游戏设计与实现(毕业论文+程序源码)
    • 1、项目简介
    • 2、资源详情
    • 3、关键词:
    • 4、毕设简介:
    • 5、源码下载:

1、项目简介

  1. 连连看是一种消除类益智游戏,核心要求是在规定的时间内,消除游戏界面中选中的两张相同的图案,直至完全消除所有图案。这款游戏操作简单(只需单击鼠标左键操作)、面向人群广泛,在限时操作的游戏要求下,吸引玩家自发地锻炼观察能力、判断能力和反应能力,故从推出至今颇受欢迎。消除类游戏如今也有很多类型,但连连看游戏因其操作简单依旧广受好评,该游戏不仅能调节精神状态,还能在游戏中锻炼我们的眼力视野和集中力,开发思维能力的同时培养面对困难时具备攻克困难的信心。

  2. 此次设计所使用的语言为Java语言,开发环境为JDK Version1.7.0,开发工具为Eclipse。主要应用Swing组件,Java小程序,事件及接口等。本系统主要是运用Swing组件和事件处理技术,进行界面的绘制,鼠标的操作,以及积分的显示和沙漏的计时的显示等功能。

  3. 基于java的连连看游戏设计和实现,基本功能包括:消除模块,重新开始模块,刷新模块,选择难度模块,计时模块。本系统结构如下:
    (1)消除模块:
    完成连连看游戏消除动作的模块。
    (2)重新开始模块:
    完成连连看游戏中重新开始新一局游戏功能的模块。
    (3)刷新模块:
    完成连连看游戏中,将游戏中未消除的图片个数记录并重新随机放置等数量图片的功能模块。
    (4)选择难度模块:
    完成游戏中切换游戏难度并开始新一局游戏的模块。
    (5)计时模块:
    完成游戏中倒计时并显示提示信息的模块。
    (6)状态显示模块:
    完成游戏中对游戏得分、闯关数记录的模块。


2、资源详情

项目难度:中等难度
适用场景:相关题目的毕业设计
配套论文字数:12463个字
包含内容:整套源码+完整毕业论文+答辩PPT+任务书+辅导视频+运行截图


3、关键词:

游戏;连连看;二维游戏;java;Eclipse


4、毕设简介:

提示:以下为毕业设计的简略介绍,项目源码及完整毕业论文下载地址见文末。

绪论
省略

网页游戏、单机游戏、网络游戏形形色色数量庞大,涌现出一批批颇具新意的游戏,为疲惫的生活带来轻松和愉悦,满足玩家的娱乐休闲要求。

1.1.   课题背景
连连看游戏顾名思义就是找出具有关联关系的事物并进行相应处理,经历了从桌面游戏、在线游戏再到社交游戏三个过程,形式多种多样。游戏的核心要求是将两个能用三根以内的直线连接的关联事物(相同事物)消除(或进行其他处理)。
省略

1.2.   Java游戏开发的现状
提到游戏开发,更多地会提到C和C++,这两个语言在游戏开发中有稳定和高效的表现。作为主流开发语言的Java是否也能在游戏开发方面展现良好的一面呢?从理论上讲,Java语言当然能被用来开发游戏,随着Java技术不断的更新发展,Jogl、Java3D等技术的出现,Java程序在显卡愈发强大的硬件加速基础上运行效果显著提升,开发出了许多基于Java的2D、3D游戏和大型的在线游戏。但Java作为开发语言开发游戏仍然被诟病,可以开发游戏不等同于适合开发游戏,因此,要讨论Java开发游戏的优势和意义。
省略

1.2.1.   Java日益趋向成熟
Java语言从面世至今已过20载,它的发展也越来越符合人们对它的要求和需要。企业级应用的实践在某些方面可以看出该语言在大型软件开发方面颇为适用。当Java语言运行效率不再成为诟病时,相信Java语言跨平台、安全性、高抽象的优势在开发的大型游戏软件方面会有很好的表现。
省略

1.2.2.   Java极大的方便了游戏脚本的使用
开发的过程往往是一个需要不断改进的过程,过程中会涉及许多方面的问题,游戏开发也不例外。所以改进的过程是否容易实现对于开发者来说也很重要,而游戏脚本就是为了改进的过程更容易实现。

如果将全部文件和数据写入程序,出现问题后要将整个程序重写编译发布,游戏是会不断地修改的,程序会越变越复杂。如果我们将可重复的数据写入外部文件,游戏引擎开发完毕通过读取外部文件运行的话,这样,当游戏出现问题时,修改外部文件就能解决问题,这样做极大地便利了游戏开发过程。Java本身就可以用来编写游戏脚本,目前也有例如groovy、beanshell等脚本语言可以无缝交互于Java语言,极大的方便了Java游戏编程。

省略

1.2.3.   Java平台无关特性
提起Java语言特性,不得不提它的平台无关性。跨平台一直都是游戏开发面对的一个实际问题,Java在这方面做的相对于其他语言要好一些。当然,跨平台的特性可以使程序员减少工作量,公司减少投资,然而有些时候,“write once run everywhere”也需要付出一定的代价。在现实中,往往会出现这样的情况:对于Java applet来说,即使电脑在硬件上满足程序的要求,可能也无法让程序以同样良好的状态运行在每一台电脑上,除非使用者都是专业人士。利用Java跨平台特性开发软件在实现过程中有利也有弊,但Java在解决跨平台问题上比起其他技术要做的好一些。

省略

1.2.4.   Java在手机游戏开发方面的优势
目前来看,游戏功能在手机功能中占据比重越来越大,手机游戏开发也将占据游戏开发市场更大的份额。手机搭载了各类操作系统也使Java语言因其跨平台的特性在游戏开发中颇受青睐。例如,安卓系统基于Java语言开发,安卓市场在手机市场所占比重很大,所以Java应用还是有一定的需求和不错的前景的。

1.2.5.   Java在网络方面的良好表现
Java在解决网络方面的问题上有不错的优势,体现在两个方面。一方面,基于applet和Java Web Start的游戏很容易更新,不需要用户手动下载新版本。另一方面,Java在网络交互的API相对友好。

在大型网络游戏开发中,分布式系统尤为重要,为了更好的推出硬件产品,Sun公司大力开发了用于网络服务器的Project DarkStar,DarkStar项目系统基础结构的设计方便了大型多玩家在线游戏的开发,并且有健壮的游戏运作能力,能动态的分配可用的服务器资源,还拥有性能改善功能,可以说,Project DarkStar的出现提高了Java在开发网络服务器方面的可能性。

1.2.6.   游戏速度
基于Java的游戏执行效率方面一直颇受争议,在大型游戏应用方面的实例不多,更适用于中小型游戏开发。Java开发的游戏执行速度被很多程序员争议的地方在于Java程序运行时要启动Java虚拟机,具体表现如何,取决于开发项目的大小和软、硬件各方面的表现。与常用来开发游戏的C++语言相比,Java开发出的游戏速度更慢,但Java开发的成本也相对较低。

1.3.   项目开发的目标
实现连连看游戏具体要做到以下几点:游戏界面美观大方:通过有些界面要能对游戏操作过程有一定的理解;游戏具有一定的可玩性和吸引力:有一定内容,不局限于普通功能;游戏运行稳定可靠。
省略

1.4.   项目开发的意义
省略

通过此次毕业设计,能充分的展现项目开发的意义:
a) 进一步巩固、加深本科四年专业所学所感,掌握基本理论知识,结合理论完成实践,提高综合分析问题,解决问题的能力。
b) 开发小型应用系统,掌握运用Java语言编写调试应用程序,训练独立开发应用系统,进行数据处理的综合能力。
c) 掌握面向对象程序设计的方法。
d) 熟练掌握Java语言的基本语法,灵活运用各种数据类型,对面向对象的程序设计语言的学习有更好的理解。
e) 进一步掌握在集成环境下如何调试程序和修改程序。

1.5.   本文章节安排
本文共分七章,具体章节安排如下:
第一章概述了选题背景、项目目标及意义,介绍了Java游戏开发现状,指明连连看游戏设计及实现的基本方向。

第二章概述了开发环境和相关技术,简述了Java和Eclipse,重点介绍了Java在游戏开发中的应用,包括GUI开发、绘图技术、事件处理机制等。

第三章介绍了可行性分析和系统需求分析。首先从技术、经济、社会三方面进行了可行性分析,然后简述了连连看游戏的一般游戏规则。最后,从业务需求、用户需求、功能需求和非功能需求四个方面进行了需求分析。

第四章进行了系统概要设计,主要将系统划分出界面模块和处理模块两大模块,确定了游戏风格和素材。

第五章介绍了详细设计和实现,包括界面、处理模块和游戏连接算法的设计及实现。

第六章进行了系统测试。简述了系统测试相关内容,给出了测试用例和测试结果。

第七章进行了全文总结,一方面总结了在完成过程中学习到的内容,另一方面说明了现存问题,展望了进一步工作。

1.6.   本章小结

本章通过对选题背景、项目目标和意义以及Java游戏开发现状的介绍,阐述了选题原因,指明了连连看设计和实现的基本方向,描述了项目开发意义。
  
2.   开发环境和相关技术简介
Eclipse 是一款优秀的跨平台的自由的集成开发环境(IDE),除了可作为Java的集成开发环境外,还可以作为编写其他语言(如C++和Ruby)。Java是一种可以撰写跨越平台的应用软件的面向对象的程序设计语言,具有优越的通用性、高效性、安全性和平台移植性,广泛应用于PC、科学超级计算机、游戏控制台、数据中心、移动电话和互联网等各个领域。本章将围绕Eclipse和Java介绍项目开发环境和相关技术。

2.1.   开发环境
软件开发环境(Software Development Environment,SDE)指在基本硬件和数字软件的基础上,为支持系统软件和应用软件的工程化开发和维护而使用的一组软件。系统的软件环境主要由开发系统所用的开发工具和环境集成机制等几部分构成。良好的开发环境对于稳定项目组人员以及提高生产效率都有不可忽视的作用。本次开发环境的具体内容如表2-1开发环境表所示。

表 2-1 开发环境表

2.1.1.   Eclipse
Eclipse 是一款优秀的跨平台的自由的集成开发环境(IDE),从其功能上来讲是一个基于Java的、开放源代码的可扩展开发平台,就其本身而论,它是一个用于通过插件组件构建开发环境的框架、服务,并且附带一个标准的插件集,包括Java开发工具(Java Development Kit)。

Eclipse的目标不仅仅为提供一个IDE,它还包括了插件开发环境(Plug-in Development Environment,PDE),该环境使得开发人员可以根据所需添加新插件,使得Eclipse不断扩充越来越强大。整个Eclipse体系结构像一个拼图,可添加插件,还可以在已有插件上再添加插件,所以Eclipse的架构基本上是“内核+核心插件+定制插件”。

如图2-1所示,其中,Platform Runtime(平台运行库)是 Eclipse 平台核心,它是一个微内核,负责管理插件注册表和插件,其他所有的功能如 WorkSpace(工作空间)和 WorkBench(工作台)等都是以插件的形式提供。工作空间是负责管理用户资源的插件。工作台是提供用户界面的插件。SWT(Standard Widget Toolkit,标准小窗口工具箱)是Eclipse 平台自己开发的图形API包,作用和Java的AWT/Swing GUI API 一样,用来构建图形界面。

图 2-1 Eclipse体系结构图

2.1.2.   Java
1 体系
Java根据应用范围可以分为三个体系:Java SE、JavaEE、Java ME。

Java SE(J2SE,Java2 Platform Standard Edition,标准版)主要用于桌面应用软件的编程;JavaEE(J2EE,Java 2 Platform, Enterprise Edition,企业版)主要用于开发分布式的网络程序,例如电子商务网站和ERP系统;Java ME(J2ME,Java 2 Platform Micro Edition,微型版)主要用于嵌入式系统开发,例如手机和PDA的编程。

省略

2 工作原理
Java由四方面组成:Java编程语言,即语法;Java文件格式,即各种文件夹、文件的后缀;Java虚拟机(JVM),即处理*.class文件的解释器和Java应用程序接口(Java API)。当编辑运行一个Java程序时,需要同时涉及这四个组成。

图 2-2 工作原理图

3 特性
第一,Java语言是简单的。
一方面,语法与C语言和C++语言接近,易学习易使用。另一方面,Java丢弃了C++中很少使用的、不易理解的特性。 Java语言中不使用指针使用引用并且提供了自动的垃圾回收机制,这使得程序员不必为内存管理而担忧。

第二,Java是面向对象的语言。
Java提供类、接口和集成等原语,并只支持类之间的单继承,但支持接口之间的多继承,支持类与接口之间的实现机制(关键字 implements)。Java语言还全面支持动态绑定。Java程序使用类(class)来组织的,另外它还包括一个类的扩展集合,分别组成各种程序包(Package),用户可以在自己的程序中使用。例如,Java提供产生图形用户接口部件的类(java.awt包),这里awt是抽象窗口工具集(abstract windowing toolkit)的缩写,处理输入输出的类(java.io包)和支持网络功能的类(java.net包)。

第三,Java语言是分布式的。
Java设计成支持在网络上应用,它是分布式语言。Java既支持各种层次的网络连接,又以Socket类支持可靠的流(stream)网络连接,所以用户可以产生分布式的客户机和服务器。

第四,Java语言具有健壮性和安全性。
Java允许扩展编译时检查潜在类型不匹配问题,不支持隐式声明,不支持指针。它的强类型机制、异常处理以及垃圾回收机制保证了Java程序的健壮性。并且Java还提供了Null指针检测、数组边界检测、异常出口、Byte code校验等功能。Java通常被用在网络环境中,具有许多安全特性。

第五,Java语言具有多线程性。
Java的lang包提供一个Thread类,而线程必须由Thread类或其子(孙)类来创建。通常使用以下俩种方法创建线程:其一,使用Thread(Runnable)的构造将一个实现了Runnable接口的对象包装成一个线程。其二,从Thread类派生出子类并重写run方法。Java语言支持多个线程同时执行,并提供多线程之间的同步机制(关键字synchronized)。

第六,Java语言是可解释的。
C,C++语言都是针对CPU芯片进行编译,生成机器代码。而Java程序在Java平台上被编译为字节码格式的“中间代码”,可以在有Java虚拟机(JVM)的人和系统上被解释执行。

第七,Java语言是动态的。
Java语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。

2.2.   相关技术简介
本次项目开发基于成熟的Java语言,开发环境是Eclipse。Eclipse是一个开放源代码的软件开发项目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台,它使用简单,且占用电脑资源也比较少,便于系统的学习Java。Java语言具有良好的特性,是一种应用广泛的面向对象的程序设计语言。

2.2.1.   Eclipse的图形界面开发
Eclipse拥有漂亮的开发界面,基于标准部件库(Standard Widget Toolkit,SWT)开发。SWT是基于Java环境下的新类库,它提供了Java环境下的图形编程接口,SWT中的图形库和工具包取代了AWT和Swing。SWT直接调用操作系统的图形库,这使得Java程序的运行速度得到了保证,但是SWT的缺点是支持的平台太少。Eclipse也可以开发基于Swing的程序。

2.2.2.   Java技术在游戏开发中的应用
1 图形用户界面(Graphical User Interface,GUI)
图形用户界面(Graphical User Interface,GUI)与早期命令行界面相比,在视觉上对于用户来说更易于接受。但是,通过在显示屏的特定位置,以各种美观而不单调的视觉消息提示用户状态的改变,势必得比简单的消息呈现花上更多的计算能力。

在Java语言中,所有的组件都以类的形式给出,AWT组件放在java.awt包中,Swing组件放在java.swing包中。如图2-3所示,java.awt包中控件类的体系结构。

图 2-3  java.awt包中控件类的体系结构图

Java.awt是Java内置的包,属于Java基本库(JFC)一部分,要使用到该包中的类,必须显式声明import java.awt.*。

Component是所有组件的父类,Component类或之类创建的对象叫组件。Button、Scrollbar、Canvas、List、Checkbox、TextField、TextArea、Label是包java.awt中的类,并且是包中Component的子类。容器也是组件,可以嵌套。上图中,Applet不是java.awt中的类。

Javax.swing包包含了一系列Swing控件,如果要使用该包中的类,则必须显式声明import javax.swing.*。Javax.swing包中类有:Japplet、JFrame、JDialog、Jcomponent。Swing组件类的设计原理建立在MVC(Model-view-Controller)结构基础上。MVC模式由图2-4所示。

图 2-4 MVC模式图

抽象窗口工具包(Abstract Window Toolkit,AWT)是SUN专门针对Java GUI编程提供的最早的也是最初的开发工具包,用来建立和设置Java图形用户界面,这个工具包提供了一套与本地图形界面交互的接口。AWT使用的技术是对等设计模式即(AWT 中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系)。所以它建立图形用户界面时,是利用操作系统所提供的图形库,这使得不同操作系统上显示不同的界面,因此AWT组件集遵循最大公约数原则,即AWT只拥有所有平台上都存在的组件的交集。AWT具有两面性,不被Sun推荐使用,只是为了确保向下兼容和支持Swing。

Swing是在AWT的基础上构建的图形界面系统,它最初是为解决AWT不能满足用户需求的发展。Swing提供了AWT能提供的所有功能,并且用纯粹的Java代码对AWT的功能进行了扩充。Swing遵从组件按照某种布局摆放在容器里的原理。当界面完成之后,必须能进行事件处理,AWT和Swing之间的事件处理基本是一致的。Swing组件是用Java实现的轻量级( light-weight)组件,没有本地代码,不依赖操作系统的支持,这是它与AWT组件的最大区别。Swing采用了一种MVC的设计范式,即“模型-视图-控制”。 Swing构建界面包括以下几个步骤:导入Swing包;选择界面风格;设置顶层容器;设置按钮和标签;将组件放到容器上;为组件增加边框;处理事件;辅助技术支持。Swing组件的层次结构图如图2-5所示。

图 2-5  Swing组件的层次结构图

SWT是Standard Widget Toolkit的缩写,是IBM为尝试解决AWT和Swing带来的诸多问题而构建的一个开源的GUI编程框架,它提供了比AWT更为丰富的组件集。与 AWT 的概念相比,SWT 是一个低级的 GUI 工具包,在构建SWT的过程中,构建者从 AWT 和 Swing 实现中学习了很多经验,他们试图构建一个集二者优点于一体而没有二者的缺点的系统。因此SWT可以说是AWT与swing的融合体。

2 绘图技术
由Sun公司与Adobe系统公司合作推出的Java 2D API,提供了一个功能强大而且非常灵活的二维图形框架。Java 2D API扩展了java.awt包中定义的Graphics类和Image类,提供了高性能的二维图形、图像和文字,同时又维持了对现有AWT应用的兼容。

Java 2D API是JFC(Java Fundation Classes)的一员,加强了传统AWT的描绘功能。在 JDK1.2中已经支援 Java 2D 的使用。透过Java 2D API ,程序员可以轻松地描绘出任意的几何图形、运用不同的填色效果、对图形做旋转( rotate)、缩放( scale)、扭曲( shear)等。

Applet程序中所采用的AWT的绘图机制主要涉及三个方法:paint()方法、update()方法和repaint()方法,update()方法和paint()方法都有一个Graphics类参数。Graphics是画图的关键,它可以支持两种绘图:一种是基本的绘图,如:画线、矩形、圆等;另一种是画图像,主要用于动画制作。处理图形则包括两个步骤:创建Graphics对象和使用Graphics对象绘制线条和形状、呈现文本或显示与操作图像。

Graphics中提供的图形绘制方法有:
paint( ):进行绘图的具体操作,必须有程序员重写,系统自动调用;
update( ):用于更新图形,先清除背景、前景,再调用paint();
因为update()方法和paint()方法所传递的参数是Graphics类的对象,所以通常用于在动画程序中通过重载进行绘画。
repaint( ):用于重绘图形,在组件外形发生变化,即大小改变或位置移动repaint( )方法立即被系统自动调用,而实际上repaint()方法是自动调用update()方法。

3 事件处理机制
除了友好的图形用户界面,流畅的人机交互也是必不可少的要素。在游戏过程中,正确且及时的对用户操作做出响应会给用户带来很好的游戏体验。所以说,游戏开发中的交互与其他技术有着相同的地位,是一个游戏必备的核心。Java的事件处理机制能够提供良好的交互。

Java的事件处理机制中,有以下几个概念:
a) 事件Event:一个状态的改变或者一个活动的发生。Java中的事件主要有两种:组件类事件、动作类事件。

b) 事件源Event Source:产生事件的对象。

c) 事件监听器Event Listener:监听事件源的对象,包含事件处理器,并负责检查事件是否发生,若发生就激活事件处理器进行处理的类叫做事件监听器类。其实例就是事件监听器对象。事件监听器类必须实现事件监听器接口或继承事件监听器适配器类。事件源通过调用相应的方法将某个对象作为自己的监听器。在事件发生时,事件源负责给予通知的一种对象。接收到事件通知的监听器进行处理。事件监听器接口和事件监听器适配器类也都包含在java.awt.event和javax.swing.event包中。

d) 事件处理器Event Handler:事件处理方法,接收事件并处理事件的方法。事件处理器包含在一个类中,这个类的对象负责检查事件是否发生,若发生就激活事件处理器进行处理。

事件处理机制图详见图2-6。当事情发生时,由事件源委托给事件监听器进行处理,继而执行事件处理代码,产生执行效果。

图 2-6 事件机制图

4 多线程的应用
在Java中,线程有两个指代含义:其一是指java.lang.Thread类的一个实例;其二是指线程的执行。如图2-7所示,Java线程有五种基本状态:新建状态(New)、就绪状态(Runnable)、运行状态(Running)、阻塞状态(Blocked)和死亡状态(Dead)。

图 2-7 线程生命周期图

在Java中,线程的创建常见的有以下三种形式。
第一种,继承Thread类,重写该类的run()方法。其中,run()方法的方法体也称之为线程执行体,是线程需要完成的任务。当创建此线程类对象时会创建一个新的线程,并且使得线程进入新建状态。通过调用线程对象引用的start()方法,使得该线程进入到就绪状态,此时此线程并不一定会马上得以执行,这取决于CPU调度时机。

第二种,实现Runnable接口,并重写该接口的run()方法,该run()方法同样是线程执行体,创建Runnable实现类的实例,并以此实例作为Thread类的target来创建Thread对象,该Thread对象才是真正的线程对象。

第三种,使用Callable和Future接口创建线程。具体是创建Callable接口的实现类,并实现clall()方法。并使用FutureTask类来包装Callable实现类的对象,且以此FutureTask对象作为Thread对象的target来创建线程。

对于线程的启动而言,三种方法都是调用线程对象的start()方法,需要特别注意的是:不能对同一线程对象两次调用start()方法。在Java中,一旦创建一个新的线程,就产生一个新的调用栈,每个线程都有一个调用栈,即使不在程序中创建任何新的线程,线程也在后台运行着。一个Java应用总是从main()方法开始运行,mian()方法运行在一个线程内,它被称为主线程。

JDK1.6之后增加了线程池的概念,使用线程池对线程的操作性能更优于传统的线程操作,线程操作更加灵活、安全。

2.3.   本章小结
本章主要介绍了Eclipse和Java的相关内容和本次项目涉及到的相关技术,通过对比GUI三种工作集:AWT、SWT、Swing,加深对图形用户界面开发的理解和对于AWT、Swing组件层次结构的掌握。通过学习总结Java的事件处理机制的概念和过程,为项目的设计和实现打下理论基础。

3.  需求分析
省略

软件需求分析的过程就是对用户或企业意图不断揭示的过程,需要对系统进行可行性研究之后,对系统目标做出分为详细的描述。

3.1.   可行性分析
可行性研究的结果是清楚的回答:该系统是否值得开发。
下面将分别从技术、经济、社会、操作四个方面对基于Java的连连看游戏的设计与实现进行可行性分析和研究。

3.1.1.   技术可行性
技术可行性分析一般可以理解为项目开发涉及到的技术、环境是否符合开发标准,能够达到预期效果;它是项目成功运行的一个必不可少的条件;因此,对技术可行性分析需要进行全面化的评估。

本次连连看游戏采用的开发工具是功能强大的Eclipse,它具有十分强大的可扩展功能,只要下载安装所需要的相关插件,就能支持我们用纯Java实现此次的桌面游戏程序。使用Eclipse开发应用程序可按需下载插件,不过分依赖于硬件,不论是升级产品方面还是扩展功能方面都有很好的发挥空间。

本次项目使用Java的GUI开发技术。Java本身可提供类库,完善的类库和AWT包对桌面游戏开发提供了强大完整的技术支持,完全可以满足我们连连看小游戏的开发,在开发过程中,可以创建满足本次开发项目任务的直接的、简明的图形用户界面。

Eclipse在开发Java项目方面应用多而广,是一个成熟可行的开发平台。Java语言也是成熟的开发语言,能够满足此次要求。在开发方面,无论是开发平台,还是开发语言,对于开发人员来说都是熟悉且能易掌握的。在从硬件方面来看,时下的硬件容量不断扩大,可靠性日益渐涨,性价比越来越高,对于本项目开发而言,足够满足需求。

由以上分析可知,本软件在技术上是可行的。

3.1.2.   经济可行性
省略
  
3.1.3.   社会可行性
省略

3.1.4.   操作可行性
操作可行性主要分析系统操作难度问题。本游戏界面以窗口形式给出,可视化强,整体风格简洁大气,各个功能键布局合理使得游戏功能一目了然。整个游戏过程操作简单易上手,完全依靠鼠标点击操作,在简单说明或培训下,操作上基本没有难度。
综上所述,本游戏具有技术可行性、经济可行性、操作可行性和社会可行性值得开发。

3.2.   连连看游戏需求描述及规则描述
游戏规则是模仿网络上普通的连连看游戏,即解决鼠标两次点击的图片能否消去的问题。当然,前提是点击两张相同的图片,若点击的是同一张图片或者两张不同的图片,则不予以处理。在两张相同图片所能连通的所有路径中,如果存在一条转弯点不多于两个的路径,就可以消去;如果没有,则不予以处理。

开始制作游戏时,主要需要解决的问题有以下几个方面:第一,如何设置整个游戏的界面。第二,如何控制连连看游戏中随机图片的生成且每种图片生成个数必须为偶数。第三,游戏开始后,需要判断鼠标两次点击的图片能否消去,即判断图片是否相同且片之间路径是否满足判断要求等。第四,如何实现游戏计时功能、刷新功能、重新开始新一局游戏功能。第五,相关游戏情况展示。

游戏往往会涉及游戏胜利或失败条件。对于连连看游戏来说,胜利条件是在规定时间内将游戏界面上所有图片全部依照一定规则消除掉。失败条件则相反,指未能或无法在规定时间内将棋盘上面的图片全部消除掉。

3.3.   系统需求分析
软件需求分为四个层次,分别是:业务需求、用户需求、功能需求和非功能需求。

省略

3.3.1.   业务需求
业务需求针对的是项目组或者公司,描述是公司想如何解决用户的问题,如何满足用户的欲望,并将利益最大化。

本项目课题是连连看游戏的设计与实现,在业务需求方面,第一,具备连连看基本游戏功能。选择两个图形,判断是否满足一定条件,条件即两个图形一致且二者之间存在转弯少于3的路径。当判定满足这一条件后,两张图片被消除。第二,具备附加功能:计时功能、重新开始功能、刷新当前界面功能等。

3.3.2.   用户需求
本项目面向的用户是游戏玩家,对于用户而言,需求有两个方面,一方面,要求游戏界面整齐美观,长时间使用也应尽可能的减小对游戏的审美疲劳。另一方面,要求游戏体验良好。在运行游戏的过程中,能保证数据安全,游戏能稳定、高速地运行。对于游戏本身,用户往往要求游戏功能相对完善,游戏具备可娱乐性,并且游戏规则易理解,游戏操作既要简单同时也应有难度,在保证游戏操作顺滑、响应快速的情况下,游戏能具有一定的挑战性。

通过用例图能更清晰的分析用户需求,如图3-1连连看游戏的用例图。用户在连连看游戏中,能开始游戏、重新开始游戏、重排列游戏、结束游戏、退出游戏、消除图片、查看得分和闯关数等。

图 3-1 用例图

以“重排列游戏”用例为例,其活动图如下图3-2所示。

图 3-2 “重排列游戏”活动图

3.3.3.   功能需求
根据上文游戏规则描述以及需求描述,游戏规则是模仿网络上普通的连连看游戏,主要需求是解决鼠标两次点击的图片能否消去的问题。当然,前提是点击两张相同的图片,若点击的是同一张图片或者两张不同的图片,则不予以处理。在两张相同图片所能连通的所有路径中,如果存在一条转弯点不多于两个的路径,就可以消去;如果没有,则不予以处理。这也是游戏的基本功能,给定任意具有相同图形的两个格子,我们需要寻找这两个格子之间在转弯最少的情况下,经过格子数目最少的路径。如果这个最优路径的转弯数目少于3 ,则这两个格子可以消去。

根据难度的不同该游戏由4、8、12、15种不同的图片组成,游戏开始将会出现64张随机组合的图片,在规则下点击两张相同的图片后,图片将会消失。图片全部消完为游戏成功,将进入下一关。游戏还将设置刷新功能,重新开始功能的按钮,并实现该功能,方便用户进行操作。游戏的主要功能将通过程序中的线程、布局功能、事件监听进行有效实现。

本系统将划分为以下几个模块,如图3-3系统功能模块图。将连连看游戏按照功能划分为:

消除模块:完成连连看游戏消除动作的模块。
重新开始模块:完成连连看游戏中重新开始新一局游戏功能的模块。

刷新模块:完成连连看游戏中,将游戏中未消除的图片个数记录并重新随机放置等数量图片的功能模块。
选择难度模块:完成游戏中切换游戏难度并开始新一局游戏的模块。

计时模块:完成游戏中倒计时并显示提示信息的模块。
状态显示模块:完成游戏中对游戏得分、闯关数记录的模块。

图 3-3 系统功能模块图

为更好的实现该游戏,结合系统流程图可进一步将上述功能细化如下:
第一,图片的选择:选中的图片应该区别于其他图片。

第二,图片的排列:在开始新一局的游戏时,图片的排列要清晰,满足随机的同时,要保证成对出现。

第三,记分功能:在游戏界面上要有明确标识,直观的显示当前游戏状态,包括游戏得分情况和闯关关数情况。

第四,沙漏计时功能:沙漏状计时能将时间地流逝直观形象的表达,增加游戏难度的同时很好地刺激了游戏玩家的胜负欲。

第五,游戏的开始和重新开始:在游戏开始前,应对玩家有所提示。重新开始游戏要中断当前游戏,开始一局新的游戏,同样要有所提示。

第六,游戏关闭和结束:游戏关闭和结束是两个概念,游戏关闭相当于关闭程序,游戏结束是指游戏时间到,此处应该对玩家有所提示,游戏结束后游戏依旧在运行,可以开始新一局游戏,也可以结束游戏。

第七,游戏难度:游戏难度不要仅仅局限于一个难度,提升难度有利于激发玩家运行游戏,提高游戏对玩家的吸引力和游戏本身的可玩性。游戏难度应可选。游戏默认开始时游戏难度应该较低。现设置游戏难度为4个等级,每个等级显示总体个数相同但不同种类的图片,难度越高,种类越多,整体界面看起来越复杂。

第八,游戏闯关: 每一个难度下可以有很多关卡,每一个关游戏过关后可以直接进入下一关,最好能实现每一关较上一关略有难度。

第九,游戏提示功能(刷新功能):在游戏过程中可以使用一次刷新功能,重新排列当前游戏未消除的图片个数的图片。

第十,游戏必要的提示:包括前面叙述的关卡数提示、得分提示、游戏开始和结束提示、倒计时提示。

第十一,游戏要最大限度地实现了易维护性和易操作性,游戏运行稳定、安全可靠。

3.3.4.   非功能需求
非功能需求包括产品必须遵从的标准、规范和约束,操作界面的具体细节和构造上的限制。
省略

3.4.   本章小结
  首先,本章对连连看游戏项目从技术、经济、社会三个方面进行可行性研究,研究证明项目可行。其次,从业务需求、用户需求、功能需求和非功能需求四个层次借助用例图和活动图描述了连连看游戏系统的需求。
  
4. 概要设计
省略
  
4.1.   模块设计
由于Swing组件类的设计原理建立在MVC(Model-View-Controller)结构基础上,MVC是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。所以根据此架构模式划分连连看游戏总体结构,设计各模块概要内容,进而划分出此次项目中的类,绘制类图。

4.1.1.   连连看系统总体结构
此次设计连连看的主体构成为连连看图片以及一些功能键。从界面布局来看,面板的右面有重新开始、刷新按钮,难度选择选项卡(4种难度),得分、关卡状态显示栏,以及沙漏状的时间倒计时装置。面板左面是一块主要操作区域,用来显示待消除的图片排列情况。本连连看系统应该包括以下两大结构:游戏界面模块;处理模块。游戏界面模块下分两个模块:功能键模块和操作模块。如图4-1:

图 4-1 连连看游戏模块图

4.1.2.   连连看系统模各模块介绍
  图4-1所示的游戏模块图中,连连看游戏系统主要分成两个部分。第一部分是显示部分即游戏界面模块,该模块根据布局又分为功能键模块和操作间模块。第二部分是处理部分即处理模块,在该模块中,需要完成需求分析中的用户需求和功能需求。
  
4.1.3.   游戏界面模块
游戏界面模块根据布局细分为操作模块和功能键模块。
操作模块:在游戏过程中,需要使用鼠标与游戏系统交互的主要模块。模块主要有排列的JButton构成,每个JButton上显示图片。所有JButton随机出现,且成对出现。借按钮组件及其事件处理机制,模拟游戏中选中图片并消除。当点击按钮组件时,这个外界刺激会触发事件监听器,事件监听器会接收事件并作出处理,就有了对这一操作的响应。

功能键模块:在游戏过程中,需要使用鼠标与游戏系统交互的次要模块。模块主要有JButton组件、下拉列表、JLabel等组件,构成完成游戏功能的控制部分,在此布局内,除了使用这些组件外,还要绘制一个沙漏状的动画,用以实现倒计时功能。同样,在此模块中所有组件除沙漏,均需要用鼠标操作,每个组件都应该有对应的响应事件和事件监听器。

为更好的区分开显示和实现,游戏界面模块将以布局为主要内容,具体的处理和响应将划分到处理模块。

4.1.4.   处理模块
针对游戏的主要功能划分出一个模块:处理模块。这个模块中将实现一些功能,包括操作功能、计时功能、提示功能等。现将设计一下几个模块:

图像处理模块:程序运行后,这个模块将把资源文件中提供的图片进行排列。这个模块在初始化游戏布局和重新开始游戏以及刷新游戏时会用到。

响应模块:响应模块分两大类,一类是对操作模块中JButton的响应(即消除功能),一类是对功能键模块中各个组件的响应(每个响应都实现其对应功能)。

更改提示模块:这个模块主要负责记分、记录关数。

倒计时模块:倒计时模块是对沙漏动画的绘制,并在倒计时五秒处显示提示JLable,在倒计时结束后弹出提示框。

消除模块:判断选中的两个图片是否满足被消除的条件,此模块中,将实现判断。

4.2.   确定类
在图形用户界面GUI设计中,会使用到javax.swing中的JButton、JDialog、JFrame 、JLabel、JPanel等组件。将这些组件放在JFrame容器中,构成LianLianKan类继承于JFrame类。如图4-2所示。在LianLianKan类中声明内部类LianLianKanJPanel类,继承于JPanel类。如图4-3所示,在LianLianKanJPanel类中声明了若干JButton、Choice、ImageIcon类对象。

图 4-2 连连看类图

图 4-3 LianLianKanJPanel类图

在LianLianKanJPanel类中再声明一个内部类loudou类。loudou类同样继承于JPanel类,在该类中创建Thread类、JLabel、JDialog类对象,漏斗形状的绘制通过调用paintComponent(Graphics g)方法完成。loudou类图如图4-4所示。Thread类图如图4-5所示

图 4-4 loudou类图

图 4-5 Thread类图

4.3.   游戏素材
本课题游戏显示将采用图片连连看的模式,界面要满足需求分析中提出的简洁明了、友好大方,保证数据存储安全可靠。游戏素材则包括两类图片,一类是背景图片,一类是游戏操作模块中显示用的游戏图片。

4.3.1.   背景图片
在背景图片的选择中,考虑到游戏界面的简洁性,选定采用纯色背景图片。为了更加清晰的衬托出游戏图片以及功能键模块中的组件,选定纯黑色游戏背景图片,此处选择图片是为了方便以后便利地更换背景图片或者扩充其他游戏设置功能等。背景图片见图4-6。

图 4-6 游戏背景图

4.3.2.   游戏图片
前文提到,根据游戏难度的不同将选择显示不同种类的图片,现将按照难度区分,依次展示简单模式、中等模式、困难模式和变态模式下游戏界面将出现的游戏图片素材。除简单模式,每一难度模式将新增几种图片并包含上一难度模式下的图片种类。
简单模式下将出现四种简单的游戏图片,是四种颜色不同的球体,详见图4-7。

图 4-7 简单模式下的游戏图片

中等模式下将包括八种图片,图4-8将展示新增图片。

图 4-8 中等模式下新增的游戏图片

困难模式将包括十二种图片,图4-9将显示新增四种图片。

图 4-9 困难模式下新增的游戏图片

变态模式将包括十五种图片,图4-10将展示新增的三种图片。

图 4-10 变态模式下新增的游戏图片

4.4.   本章小结
  本章划分了连连看游戏总体结构。游戏界面方面确定了游戏界面中的素材和风格。处理模块下根据其功能,设计并描述了各个小模块的概要内容,进而划分出此次项目中的类,绘制了类图。
  
5.   详细设计和实现
详细设计是在概要设计的基础上进行细化的过程。详细设计的主要任务是设计每个模块的实现算法即实现游戏界面、组件的事件处理等。在详细设计阶段,除了要注意具体模块的功能分解,还要绘制活动图、状态图、顺序图等动态模型,丰富静态结构图。

5.1.   界面设计
游戏主界面以窗口形式给出,用户操作的游戏功能部分由各个组件构成,通过弹出的提示框开始游戏活动,用户通过点击窗口上的各个组件完成操作。游戏界面设计如下图5-1所示。

图 5-1 游戏界面设计图

5.1.1.   界面实现
在游戏运行开始时,将弹出一个提示框以提示用户即将开始游戏,提示框如图5-2。此处弹出提示框一方面是提示作用,一方面是为便利扩展游戏功能,可将游戏扩展成多用户模式,在提示框实现处更改为用户登录模块,并联接数据库。鉴于本次任务时间有限此处未能实现。

图 5-2 游戏开始对话框

部分代码如下:
if (remainTimes == 0) {
JOptionPane.showMessageDialog(null, “游戏开始?”);
单击确定按钮进入游戏主界面,默认进入简单模式下的游戏主界面,如图5-3。

图 5-3 简单模式下的游戏界面图

如上图所示,游戏主界面展示了本次连连看小游戏的主体布局界面。在界面的左侧是游戏主要操作和显示被操作图片的区域,界面的右侧展示了功能模块中几个功能组件。界面的右侧由上至下展示了“重新开始”按钮、“刷新”按钮、难度模式选择列表(默认是简单模式)、两个标签文本、一个沙漏状的倒计时动画(包括一个隐形的标签文本,当时间还剩五秒的时候,会显示倒计时信息)。
不同难度的游戏模式下,主要游戏界面展示略有不同,四种难度模式下的游戏界面图如图5-3、5-4、5-5、5-6。



图 5-6 变态模式下的游戏界面图

如上图所示,对游戏主界面没有任何操作时,四种难度模式下的游戏主界面最大的区别就是操作模块部分的图片排列,可以看出,难度越大图片种类越多,看起来越复杂,实现了前文对于难度变化提到的要求。每一种困难模式下的图片均是成对出现的,满足前文对于图片排列的要求。

整体界面以黑色为主,简洁大方,整体布局合理工整。左侧图片素材清晰、可爱,图片素材之间留有空隙,视觉上更舒服更易于区分,右侧功能键排列整齐,文字描述清晰。

布局部分核心代码如下:

Random random = new Random();int temp = 0;for (int i = 0; i < 32 - Kinds; i++) {temp = random.nextInt(Kinds) + 1;numbers.add(temp);numbers.add(temp);}for (int i = 0; i < 8; i++) {for (int j = 0; j < 8; j++) {BlockButton[i][j] = new JButton();add(BlockButton[i][j]);BlockButton[i][j].addActionListener(this);BlockButton[i][j].setBounds(30 + j * 40, 30 + i * 40, 31,34);}}

5.1.2.   倒计时沙漏的设计
  在游戏的界面上,还有一个特殊的面板,漏斗面板,漏斗面板上绘制了一个沙漏状的倒计时装置,该装置通过线程控制,时间变量每更新一次,漏斗面上重新绘制一次,每次绘制的线条通过判断条件设置摆放位置,随着时间的递增,沙漏状的倒计时装置就动态的开始倒计时,直至最后五秒,显示提示信息,倒计时结束后,弹出游戏失败提示框。沙漏示意图如下图5-7。

图 5-7 沙漏设计图

此处沙漏使用Graphics类的paintComponet()方法,游戏开始自动调用,在线程中,当剩余时间参数改变时调用repaint(),重载paintComponet(),通过判断剩余时间,绘制线条,这样随着每一秒时间的流逝,上方的绿色线条会在视觉上像是流动到下方。当属于时间不足5秒时,JLabel显示提示信息。部分代码如下:

super.paintComponent(g);                         g.setColor(Color.green);for (int i = 0; i < 56; i++) {g.drawLine(x1 + i / 2 + 2, y1 + i, x2 - i / 2 - 2, y1 + i);}if (remainTimes < 55) {for (int i = 0; i < remainTimes; i++) {g.drawLine(x1+i/2+2, y2-i-1,x2-i/2-2, y2-i-1);}g.drawLine((x1 + x2) / 2, (y1 + y2) / 2, (x1 + x2) / 2, y2 - 2);g.drawLine((x1+x2)/2+1, (y1+y2)/2+1, (x1+x2)/2+1, y2-2);g.setColor(getBackground());for (int i = 0; i < remainTimes; i++) {g.drawLine(x1 + i / 2 + 2, y1 + i, x2 - i / 2 - 2, y1 + i);}}if (remainTimes >= 50 && remainTimes <= 55)overJLabel.setText((55-remainTimes) + "second");       if (remainTimes == 56) overJLabel.setText("OVER");remainTimes++;repaint();

倒计时结束时,意味着在规定时间内未完成游戏,判定游戏失败,此时应该有提示框,如图5-8。

图 5-8 游戏结束对话框

部分代码如下:
if (remainTimes == 56) {
JOptionPane.showMessageDialog(null, “时间到!游戏结束!”);
}

5.2.   游戏执行的实现
  因为每一次选择难度模式后、每通过一关游戏后都将开始一局新游戏,故一次游戏活动图如图5-9所示。最终状态有两种,游戏失败和游戏结束。

图 5-9 一次游戏活动图

一次游戏活动的顺序图如图5-10所示,一次游戏过程中,“点击图片”、“点击‘重新开始’按钮”、“点击‘刷新’按钮”操作上可不分时间先后顺序。每一次游戏结束后可以开始新一局游戏直至用户退出游戏。

图 5-10 一次游戏顺序图

5.2.1.   点击图片的实现及其部分代码
前文提到,每选中一个图片应该区别于其他未被选中的图片。具体实现方式:当点击第一图片时,图片会变成激活状态,颜色变暗(用到了JButton的SetEnable方法)。当点击第二张图片时如果符合游戏规则,则两张图片消除,否则第一张图片变回默认状态,第二张图片变为激活状态;按钮状态图如图5-11所示,系统截图如图5-12。

图 5-11 按钮状态图

图 5-12 系统截图

此功能实现代码:BlockButton[j][i].setEnabled(false);

5.2.2.   记分、记关数的实现
在游戏过程中,需要对游戏当前状态进行记录,一次得分记录的过程活动图如图5-13,记录实例系统截图如下图5-14。

图 5-13 记录活动图

图 5-14 系统截图

游戏过程中,每消除一对相同图片,得分10,8×8格式的二维图片集,一共64张图片,共计32对,所以没过一关得分是320分,图5-9显示的是,消除34对后的得分。在每一难度下的每一关通过后,记分不清0,继续记分。但切换到不同难度时,得分会清0。

5.2.3.   刷新功能的实现
游戏中每一关只有一次使用刷新功能的机会,此功能键触发的响应事件,会调用chongzai()方法,按照当前状态未消除的图片个数重新在二维按钮排列的其他位置排放其他图片。点“刷新”按钮的流程图如图5-15所示,前后变化如下图5-16、5-17所示。

图 5-15 “刷新”流程图

图 5-16刷新前系统截图  
    

图 5-17 刷新后系统截图

刷新功能一关游戏只能使用一次,不论是那一个难度下,一关内刷新功能只能使用一次,只有通过这一关,下一关中刷新功能才能使用。使用一次之后,按钮将不能点击,状态图如图5-18,系统截图如下图5-19所示。

图 5-18 刷新按钮状态图

图 5-19 点击一次之后系统截图

刷新功能部分代码如下:

if (e.getSource() == reLoad) {chongzai();reLoad.setEnabled(false);
chongzai()中部分代码如下:
for (int i = 0; i < jishushengyu / 2; i++) {kind = random.nextInt(Kinds) + 1;do {             randomx1 = random.nextInt(8);//0-8随机数randomy1 = random.nextInt(8);} while (map[randomy1][randomx1] > 0);map[randomy1][randomx1] = kind;do {randomx = random.nextInt(8);randomy = random.nextInt(8);} while (map[randomy][randomx] > 0);map[randomy][randomx] = kind;}

5.2.4.   重新开始游戏功能的实现
重新开始游戏功能实际也是开始新游戏功能,重新开始布局的过程。将图片成对的显示在场景中,并打乱调用的是newMap()方法。在该方法中,用了一个数组以数字标记的形式来记录加载的图片是哪种图片,在每次加载图片的时候是一张图片连续加载两次,以保证加载图片成对。然后用数组的随机方法将数组打乱。

5.3.   游戏的连接算法
连连看游戏中对于用户来说最简单的呈现,就是单击两个连在一起的相同的图像时,这两个图像就会消去,但是在Java代码中是如何实现的呢?连连看游戏的联通算法一般包括回溯法和堆栈实现的迷宫算法。
根据游戏规则能知道,即使不是紧邻的两个相同的图像块消去时也不能超过两次转弯。在本次开发的连连看中两个图像块可以消去的情况大致可以分为以下几种情况。

5.3.1.   连连看连接方式的类型
连连看游戏的连接方式就是指两个图片之间连接的方式,一共可以分为以下这几种方法:
两点直线法示例如图5-20。

图 5-20 两点直线法示例图

三点直角折线法示例如图5-21。

图 5-21 三点直线法示例图

四点方形折线法示例如图5-22。

图 5-22 四点方形折线法示例图

四点梯形折线法示例如图5-23。

图 5-23 四点梯形折线法示例图

下面对上面四种类型进行细致划分讲解:
两点直线法的连接类型包括:上下,左右
三点直角折线法包括:上左,上右,下左,下右,左上,右上,左下,右下
四点方形折线法包括:上左下,上右下,下左上,下右上,左上右,右上左,左下右,右下左
四点梯形折线法包括:上左上,下左下,上右上,下左下,左上左,右上右,左下左,右下右

5.3.2.   连连看连接方式的分析
满足上述要求是第一步,即两个图片满足上次相连方式。第二步是满足图片相同。换言之,检验两个方块能否消掉,要让两个方块同时满足两个条件才行,就是两者配对并且连线成功,此处可分三种情况。从下面的这三种情况,我们可以知道,需要三个检测,这三个检测分别检测一条直路径。这样就会有三条路径。若这三条路径上都是空按钮,那么就刚好是三种直线(两个转弯点)把两个按钮连接起来了。

第一种情况:相邻。这种情况最简单。

第二种情况:不相邻。若不相邻,第一步在选中的第一个按钮的同行找到一个空按钮,此时分为两种情况:

情况A:找到空按钮后,再看选中的第二个按钮的横向到这个空按钮所在的列交叉处是否有按钮,若交叉处没有按钮,再从与第一个按钮到与它同行的那个空按钮之间是否有按钮,此时也没有按钮的话,路径通,反之则否。

情况B:第一步在选中的第一个按钮的同行找不到一个空按钮,此时在选中的第一个按钮的同列找一个空按钮。找到空按钮后,查看选中的第二个按钮竖向到这个空按钮所在行的交叉处是否有按钮。没有按钮的话,再查看选中的第一个按钮到与它同列的那个空按钮之间是否有按钮。没按钮的话,再判断与选中的第一个按钮同列的这个空按钮横向到与选中的第二个按钮同列有否有按钮,没有的话,路径通。

若满足以上情况的分析,也即路径通,选中的两个图片可消除。若以上情况分析均不满足,说明这两个按钮不可以消去。
具体判断流程图如图5-24。

图 5-24 判断流程图

代码中定义的方法有:
判断在一列之内两图片之间是否全部是空白或直接相邻
判断在一行之内两图片之间是否全部是空白或直接相邻
是否可以一条直线相连
是否可以两条直线相连
是否可以三条直线相连
是否可以三条直线相连,似U形
是否可以三条直线相连,似之字形N
是否处于游戏区域的四条边的同一边上

5.3.3.   部分核心代码

// 判断在一列之内两图片之间是否全部是空白或直接相邻
// 直接相连,因而不包含空白if (Math.abs(posY1 - posY2) == 0) {return true;}int a = posY1 < posY2 ? posY1 : posY2;int b = posY1 < posY2 ? posY2 : posY1;for (int j = a + 1; j < b; j++) {if (map[posX1][j] != 0) {return false;}}
// 是否可以一直线相连
if (posX1 != posX2 && posY1 != posY2) {return false;}if (posX1 == posX2) {if (containsAllOrNoneZeroInColumn(posX1, posY1, posX2, posY2)) {return true;}}if (posY1 == posY2) {if (containsAllOrNoneZeroInRow(posX1, posY1, posX2, posY2)) {return true;}}
// 是否可以三直线相连,似之字形Nif (isOnZigzagWith1Row2Cols(posX1, posY1, posX2, posY2)) {return true;}if (isOnZigzagWith2Rows1Col(posX1, posY1, posX2, posY2)) {return true;}
// 是否处于游戏区域的4条边的同一边上if ((posY1 == posY2 && posY2 == 0)
|| (posY1 == posY2 && posY2 == 8 - 1)|| (posX1 == posX2 && posX2 == 0)|| (posX1 == posX2 && posX2 == 8 - 1)) {return true;}
// 是否可以三直线相连,似之字形, 两行一列 Zint moreX = posX1 < posX2 ? posX2 : posX1;int lessX = posX1 < posX2 ? posX1 : posX2;for (int i = lessX + 1; i < moreX; i++) {if (containsAllOrNoneZeroInColumn(i, posY1, i, posY2)&& containsAllOrNoneZeroInRow(i, posY1, posX1, posY1)&& containsAllOrNoneZeroInRow(i, posY2, posX2, posY2)&& map[i][posY1] == 0 && map[i][posY2] == 0) {return true;}}

5.4.   本章小结
  本章对连连看游戏进行了详细设计和实现,通过活动图和状态图,详细描述了操作的执行过程和一个特定对象的所有可能状态以及由于各种事件发生而引起的状态转换,为实现功能提供逻辑思路。
  
6.   系统测试
省略

6.1.   软件测试目的及意义
省略

6.1.1.   测试目的
省略

6.1.2.   测试意义
省略

6.2.   测试方法分类
省略

6.3.   测试步骤
此次测试过程按4个步骤来进行,即:单元测试、集成测试、确认测试和系统测试。

省略

在实际工作中这几个阶段却是相互交叉的。如图6-1所示。

图 6-1 测试过程图

省略

6.4.   测试用例
省略

现针对游戏功能,设计如下几个测试用例,见表6-1测试用例表。
表 6-1 测试用例

续表6-1

续表6-1



6.5.   测试结果
本系统在测试和运行过程中,有以下几方面优点:界面友好,操作方便。系统界面简单,功能较完善,易上手,可以激发玩家的乐趣;通用性好,扩展性强。本系统可以适用于各种人群,具有优越的通用性能。但部分系统功能需完善,由于时间和技术因素,交互入口等方面还有待拓展。
省略

6.6.   本章小结
本章主要明确了测试的目的和测试的重要性,通过设计测试用例得出,游戏中的消除功能、计时功能、记录得分和关数功能、重新开始功能、刷新功能基本实现。

结 论
省略

致 谢
省略

参考文献
张红旭. 浅谈Java的发展及特点[J]. 硅谷, 2010(6):50-50.
Burns B. Darkstar: the java game server[J]. 2007.
吴越胜、李新磊.Eclipse 3.0程序开发技术详解[M]:清华大学出版社,2010.1~3
岷江. Java的运行原理[J]. 开放系统世界, 2002(5):85-86.
白亮. Java简介[J]. 厦门科技, 2005(1):27-29.
Piroumian V. Java GUI Development[C]:Sams, 1999.
李钟蔚. Java开发实战宝典[M]. 清华大学出版社, 2010
苏碧霞. 探析JAVA Swing工具包在图形用户界面设计中的应用[J]. 信息与电脑:理论版, 2013(5):143-144.
Hardy V J. Java 2D API Graphics[C]:Prentice Hall PTR, 2000.
明日科技. Java从入门到精通[M]. 清华大学出版社, 2012.
郑淑荣.Java的事件处理机制剖析.《办公自动化:综合月刊》,2011(10):23-24.
胡家芬. Swing可视化组件多线程操作机制研究[J]. 电脑知识与技术,2012(11):7481-7482.
刘煜. 深入了解JAVA中的线程[J]. 中文信息, 2002(8):56-57.
王继成, 高珍. 软件需求分析的研究[J]. 计算机工程与设计, 2002, 23(8):18-21.
冯玲玲, 沈轶. 基于UML的需求分析与建模[J]. 科学技术与工程, 2005, 5(9):605-607.
Reenskaug T. The Model-View-Controller (MVC) Its Past and Present[J]. University of Oslo Draft, 2003.
朱亚玲, 张睿敏. 基于java的连连看游戏设计与实现[J]. 数字技术与应用, 2016(3):161-162.

外文文献
省略

中文翻译
省略


5、源码下载:

本项目源码及论文如下,有需要的朋友可以点击进行下载。如果链接失效可点击下方卡片扫码自助下载。

序号 毕业设计全套资源(点击下载)
本项目源码 基于java+swing+GUL的连连看游戏设计与实现(源码+文档)_JAVA_swing_GUL_连连看游戏.zip

【java毕业设计】基于java+swing+GUI的连连看游戏设计与实现(毕业论文+程序源码)——连连看游戏相关推荐

  1. java毕业设计——基于JSP+mysql的BBS论坛系统设计与实现(毕业论文+程序源码)——论坛系统

    基于JSP+mysql的BBS论坛系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于JSP+mysql的BBS论坛系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦.需要下载开 ...

  2. java毕业设计——基于JSP+access的旅游管理系统设计与实现(毕业论文+程序源码)——旅游管理系统

    基于JSP+access的旅游管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于JSP+access的旅游管理系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦.需要下载开 ...

  3. java毕业设计——基于JSP+sqlserver的网上购物系统设计与实现(毕业论文+程序源码)——网上购物系统

    基于JSP+sqlserver的网上购物系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于JSP+sqlserver的网上购物系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦 ...

  4. java毕业设计——基于JSP+sqlserver的学生信息管理系统设计与实现(毕业论文+程序源码)——学生信息管理系统

    基于JSP+sqlserver的学生信息管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于JSP+sqlserver的学生信息管理系统设计与实现,文章末尾附有本毕业设计的论文和源码下 ...

  5. java毕业设计——基于JSP+sqlserver的房产中介系统设计与实现(毕业论文+程序源码)——房产中介系统

    基于JSP+sqlserver的房产中介系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于JSP+sqlserver的房产中介系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦 ...

  6. java毕业设计——基于JSP+mysql的图书馆借阅系统设计与实现(毕业论文+程序源码)——图书馆借阅系统

    基于JSP+mysql的图书馆借阅系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于JSP+mysql的图书馆借阅系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦.需要下载开 ...

  7. asp毕业设计——基于asp+access的新闻发布系统设计与实现(毕业论文+程序源码)——新闻发布系统

    基于asp+access的新闻发布系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于asp+access的新闻发布系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦.需要下载开 ...

  8. asp毕业设计——基于asp+access的网上选题系统设计与实现(毕业论文+程序源码)——网上选题系统

    基于asp+access的网上选题系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于asp+access的网上选题系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦.需要下载开 ...

  9. asp毕业设计——基于asp+access的web人事管理系统设计与实现(毕业论文+程序源码)——人事管理系统

    基于asp+access的web人事管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于asp+access的web人事管理系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦 ...

  10. asp毕业设计——基于asp+access的毕业生信息管理系统设计与实现(毕业论文+程序源码)——毕业生信息管理系统

    基于asp+access的毕业生信息管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于asp+access的毕业生信息管理系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦 ...

最新文章

  1. SAP Spartacus Theme 设置
  2. HTML学习笔记:设置超链接文本修饰
  3. python计算各对应位乘积之和_Python与线性代数基本概念
  4. 机械原理c语言程序,c语言机械原理编程,连杆运动分析图线.docx
  5. Python 使用Schema 实现接口或方法的JSON格式参数的高效、优雅校验
  6. python csv 格式文件导出 中文乱码问题解决方法
  7. 5个不可多得的黑科技网站,让你在办公中如有神助,请低调收藏
  8. 三维浮雕软件 linux,立体浮雕工具下载 Type3(立体浮雕软件) v4.6.0.0 免费安装版 下载-脚本之家...
  9. android 录制视频模糊,安卓手机录制视频不清晰是什么原因?_科技数码通
  10. java privatekey输出字符串_[Java教程]根据字符串(String)生成公钥(PublicKey)和私钥(PrivateKey)对象_星空网...
  11. 沉稳:天塌地陷,岿然不动;日月星辰,唯吾独尊
  12. 测绘与设计之间的鸿沟:坐标系,教你如何将CAD与测绘数据准确叠加
  13. Excel分组行转列(Power Query透视列,一维表转二维表)
  14. MySQL之Xtrabackup备份与恢复
  15. business,firm, company, corporation, enterprise等区别CentOS(Community Enterprise Operating System)想到
  16. 软件技术功能开发思路
  17. 一张图看懂信息化和数字化的本质区别
  18. 时间戳与日期格式转换
  19. UNITY 围绕一个物体做圆周运动
  20. 高仿掘金App —— 基于 databinding

热门文章

  1. ug计算机环境变量,教你如何添加和删除环境变量(UG软件必用)
  2. 写给新手的DMOZ网站提交注意事项
  3. 考研英语 - word-list-1
  4. Shopify免费产品评价应用 Product Review安装和设置教程
  5. Learning Texture Transformer Network for Image Super-Resolution(全译文+大量名词链接)读论文记录①
  6. 为什么要有SerialVersionUID?
  7. Dropbox免费网盘高级使用技巧
  8. 初学MSP430F5529定时器
  9. java科学计数法转正常的数字
  10. 金蝶K3生产任务单批次号和工单号同步需求实现