I
基于JAVA的拼图游戏
基于JAVA的拼图游戏
摘要
JAVA语言是由美国sun公司开发的一种完全面向对象的程序设计语言,它由c++语言发
展而来,但比c++语言简单。JAVA语言具有简单、与平台无关、高效、健壮、安全、多线程等
特点,是当前网络编程中的首选语言。本文主要通过JAVA语言来开发一个小游戏,以实现其相
关功能。
随着社会的发展,计算机已经成为人么日常生活,学习办公中不可缺少的一部分,并
在各个领域发挥着重要的作用。在计算机迅猛发展的影响下,计算机游戏也随之兴盛起来。
拼图游戏就是其中一中,它适用范围广,老少皆宜。该游戏不仅可锻炼动手能力,观察能
力,而且还能培养人与人之间的协作能力。它是一个应用程序,它的游戏规则和win7的
拼图游戏是一样的。将一张图片分割成16张小图,将除去左上角的其余15张图片放入一
个4*4的网格内,通过鼠标的点击图片来切换空白处对换位置,让其复原成原来的顺序,
游戏就完成了。可以选择下一张来切换另一张图片,或者按开局重新开始游戏。
关键词:JAVA2平台标准版,JAVA语言,小应用程序
II
JigsawpuzzlebadonJava
abstract
JAVAlanguageisdevelopedbythesunafullyobject-orientedprogramminglanguage,itis
developedbyc++language,butsimplerthanc++Alanguagehasasimple,
platform-independent,efficient,robustandcurity,multithreading,isthepreferredlanguagein
permainlythroughtheJAVAlanguagetodevelopa
smallgame,inordertorealizeitsrelatedfunctions.
Withthedevelopmentofthesociety,thecomputerhasbecomethepeopledailylife,an
indispensablepartoflearningintheoffice,he
influenceoftherapiddevelopmentofcomputer,
puzzleisamongthemone,eisnotonly
canexerciability,obrvationability,butalsocancultivateinterpersonalcooperation
zzlegameisbadontheJ2SEplatformdevelopment,itisanapplication,itisthe
ewillbedividedinto16images,will
removetheupperleftcorneroftherestofthe15imagesina4*4mesh,theblankspacewith
themouclickontheimagetoswitchswitchposition,makeitsrecoveryastheoriginal
quence,othenexttoswitchtheotherpicture,orpressstartto
startthegame.
Keywords:Java2Platform,StandardEdition,JAVAlanguage,application.
III
目录
摘要.............................................................Ⅰ
ABSTRACT.............................................................Ⅱ
第一章概述...........................................................1
1.1项目开发的背景与国内外研究现状..................................1
1.2项目开发的目的与意义............................................1
1.3系统开发方法介绍................................................2
第二章项目开发语言及开发环境.........................................5
2.1JAVA语言........................................................5
2.2ECLIPSE简介.....................................................6
第三章可行性分析及总体设计原则.......................................8
3.1可行性分析所采用的方法和步骤....................................8
3.2评价尺度........................................................8
3.3可行性分析......................................................8
3.3.1技术可行性..................................................8
3.3.2经济可行性..................................................8
3.3.3社会可行性..................................................8
3.4总体设计原则....................................................9
第四章需求分析......................................................10
4.1OOA方法介绍....................................................10
4.2功能需求.......................................................10
4.3环境需求.......................................................10
4.4可靠性需求.....................................................11
4.5用户界面需求...................................................11
IV
4.6软件成本消耗与开发进度需求.....................................11
4.7条件假定和限制.................................................11
第五章系统分析......................................................12
5.1业务流程分析...................................................12
5.2总体设计方案...................................................12
5.3游戏功能分析...................................................13
第六章系统设计......................................................14
6.1系统功能设计...................................................14
6.2系统重点设计...................................................14
6.2.1开局载入图片...............................................15
6.2.4随机排列图片...............................................16
6.2.3游戏时排列图片.............................................18
6.2.4换下一张图片...............................................18
6.2.5判断拼图是否成功...........................................19
6.3拼图游戏界面的设计与实现.......................................20
第七章设计小结......................................................21
参考文献.............................................................24
致谢.................................................................25
附录.................................................................26
V
太原科技大学华科学院毕业设计(论文)
-1-
第一章概述
1.1项目开发的背景与国内外研究现状
随着信息技术的飞速发展、蓬勃进步,同时随着国际互连网与相关系统的迅速
普及,不同国家、行业被Internet连接在一起,互相通信,共享全世界的计算机
资源和信息。如何保证不同格式的资料或信息能够安全、高速、自由的交流、传输
就成为一个迫切解决的问题。1996年Sun公司Java语言的正式发表可以说是
Internet的一次技术革命,Sun公司的一位营销天才把一门试验性的跨平台语言由
象征踏实的Oak(橡树),改名为香气四溢的Java(咖啡)时,可能他没有想到这
门语言能有后来的辉煌。事实上,如果现在Sun想为这门语言改名,以准确体现其
在计算机行业的地位,似乎Oak更形象。今天,虽然Java语言并非真正意义上的
遍地开花,但它已经出现在众多场合和设备中,而且它享有运行稳定、设计精良的
美名。它实现了程序的运行不受平台的限制,在网络上不仅可以进行无格式的资料
交换,还可以进行程序交换。Java语言具备了其它语言所没有的独特优势,它一出
现就马上受到了各界人士的欢迎。Java的出现无疑给计算机行业带来了一股清风,
它带来了许多新鲜而有趣的思想和观念。
JavaSwing组件在游戏的实现上扮演着不可或缺的重要角色,Swing是一个用
于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础
使跨平台应用程序可以使用任何可插拔的外观风格。Swing提供了本机的外观和手
感,模拟多个平台的外观和感觉,同时还支持一个可插拔的外观和手感,使应用
程序有一个拥有外观和感觉的基础平台。它具有比AWT更强大和灵活的组件。除
了熟悉的部件,如按钮,复选框和标签,Swing提供了一些先进的零部件,如卡式
面板,滚动窗格,树,表,列出,因此Swing深受开发人员青睐。除此之外,他们
只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用
户界面。因此,可以推断JavaSwing组件在未来游戏等各个相关领域依旧会保持
良好的发展势头,发扬其优势,更好的服务于Java游戏产业。[1]
1.2项目开发的目的与意义
现代科学技术的发展,改变了人类的生活,作为新世纪的大学生,应该站在时
代发展的前沿,掌握最先进的现代科学技术知识,以适应社会的发展,应能够独立
-2-
地完成各种应要面临的任务,成为一名有创新意识的新型人才。
目前,很多新的技术领域都涉及到了Java语言。Java语言是面向对象编程,
并涉及到网络、多线程等重要的基础知识,因此Java语言也是学习面向对象编程
和网络编程的首选语言。该课题的主要目的是使Java游戏开发者深入理解所学的
Java语言,并实践于该游戏设计中,深刻体会以前所学的有关Java程序设计方面
的语言基础、异常处理、事件处理、应用程序以及图形用户界面设计等方面的知识,
加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构
等。学会使用Java系统,其中包括对程序的调试、运行、保存等知识的运用,还
包括提高程序开发功能,能运用合理的方法简化Java程序的操作,开发过程中应培
养分析问题、解决问题的能力。
基于Java组件技术的拼图游戏软件是一款具有娱乐性、益智性、便捷性的游
戏软件。此软件可以使用户放松心情,享受于拼图游戏的乐趣之中。该游戏软件可
以让用户选择适合自己的主题与难度,根据用户的不同水平,锻炼其图片记忆能力
以及拼凑还原能力。游戏结束后亦可让用户清晰了解到自己的游戏状态水平,便于
调整自己对这款游戏的新的难度要求。另外要求软件设计精致,画面亲和,人机交
互高效快捷,能够给用户带来人性化的服务。软件面向的主流群体集中在年轻人,
但也适宜儿童或者老人使用,提供了适宜各类用户群体的图片风格与难度设置。不
论是旨在轻松娱乐,还是益智教育的目的,该软件都是一款家庭生活中以及学习生
活的必备软件。
设计并实现基于Java组件技术的拼图游戏软件作为自己的毕业课题设计是对
学校基础课程、专业课程以及实践课程的一次综合性考查。此外,JavaSwing组件
在单机游戏平台上的应用一直处于热门,这次的系统全面的实践可以说是一次很好
的锻炼,会对以后工作生活带来积极的影响。
1.3系统开发方法介绍
目前比较成熟的系统开发方法有:生命周期法、原型法、面向对象法等。
生命周期法:把一个信息系统从其提出、分析、设计和使用,直到停止使用的
整个生存期视为一个生命周期。整个生命周期划分为五个主要工作阶段:可行性分
析阶段、系统分析阶段、系统设计阶段、系统实施阶段和系统运行、维护与评价阶
段。通常采用结构化系统分析和系统设计方法,自上而下分析、设计,强调开发过
程的整体性和全局性;开发过程在时间上基本按阶段进行,任务明确;结合用户需
-3-
求进行开发;开发周期长,维护不方便。适用于开发需求较明确固定的信息系统。
原型法:是系统开发者在初步了解用户需求的基础上,开发出能实现系统最基
本功能的一个原型,再根据用户对原型使用与评价的意见,提出修改方案,修改完
善原型,如此反复多次,直到得到用户满意的最终系统为止。开发过程以用户为中
心,开发周期短。适用于开发需求不够明确或不断变化的软件。
面向对象法:以类,类的继承,聚集等概念描述客观事物以及联系。为系统的
开发提供了全新的思路,面向对象方法以对象为中心。其特征主要有模块性,继承
性和类比性,动态连接性。
面向对象开发方法的开发过程:
1.系统调查和需求分析:对系统将要面临的具体管理问题以及用户对系统开发
的需求进行调查研究,即先弄清要干什么的问题;
2.分析问题的性质和求解问题:在繁杂的问题域中抽象地识别出对象以及其行
为、结构、属性、方法等。一般称之为面向对象的分析,即OOA;
3.整理问题:对分析的结果作进一步的抽象、归类、整理,并最终以范式的形
式将它们确定下来。一般称之为面向对象的设计,即OOD;
4.程序实现:用面向对象的程序设计语言将上一步整理的范式直接映射(即直
接用程序设计语言来取代)为应用软件。一般称之为面向对象的程序,即OOP;
5.识别客观世界中的对象以及行为,分别独立设计出各个对象的实体;分析对
象之间的联系和相互所传递的信息,由此构成信息系统的模型;由信息系统模型转
换成软件系统的模型,对各个对象进行归并和整理,并确定它们之间的联系;由软
件系统模型转换成目标系统。[2]
面向对象开发方法的应用范围:
在大型管理信息系统开发中,若不经自顶向下的整体划分,而是一开始就自底
向上地采用OO方法开发系统,会造成系统结构不合理、各部分关系失调等等问题。
OO方法和结构化方法在系统开发中相互依存、不可替代。
综上所述,由于面向对象开发方法主要针对于各类管理系统的开发,所以该毕
业设计中采用面向对象方法与原型法相结合的方法进行系统开发,主要也因为原型
法是近几年发展起来的一种开发方法。该方法从一个初始信息要求的集合出发,在
发展中逐步完善信息系统,更简单、易学,同时也更适合该系统的开发。
使用原型法开发大体有以下几个步骤:
-4-
1.确定系统需求;
2.设计初始原型,包括确定需求以及开发工作模型,例如屏幕格式、功能菜单
格式以及对关键数据和功能的说明等;
3.对初始原型进行需求迭代,不断进行修正或改进,直至得到一个用户满意的
原型,从而终止原型迭代过程;
4.原型效果考察,考察用户新加入的需求信息和组成成分的严格说明信息,看
其对原型效果的影响,是否影响到原型的有效性,如果导致原型失败,应加以修正
和改进;
原型法的生命周期提供了一种完整的、灵活的、近于动态的需求定义技术。它
综合了所有提出的必要需求,建立原型就近似于预先需求的规格说明。对原型的工
作模型可以进行必要的剪裁和组织,以便更接近目标系统。它可以综合用户、领导
和原型开发人员的各方需求。[3]
-5-
第二章项目开发语言及开发环境
2.1JAVA语言
JAVA是SunMicrosystem公司开发的编程语言,是一个简单,面向对象,分布式,解
释性,强壮,安全,与系统无关,可移植,高性能,多线程和动态的语言。下面简单介绍
一下JAVA的基本特点。[4][5]
(1)简单性
JAVA与C++语言非常相近,但Java比C++简单,它抛弃了C++中的一些不是绝对
必要的功能,如头文件、预处理文件、指针、结构、运算符重载、多重继承以及自动
强迫同型。JAVA实现了自动的垃圾收集,简化了内存管理的工作。
(2)面向对象
JAVA提供了简单的类机制和动态的构架模型。对象中封装了它的状态变量和方法,
很好地实现了模块化和信息隐藏;而类则提供了一类对象的原型,通过继承和重载机
制,子类可以使用或重新定义父类或超类所提供的方法,从而既实现了代码的复用,
又提供了一种动态的解决方案。
(3)多线程
多线程使应用程序可以同时进行不同的操作,处理不同的事件。在多线程机制中,
不同的线程处理不同的任务,他们之间互不干涉,不会由于一处等待影响其他部分,
这样容易实现网络上的实时交互操作。
(4)分布性
Java是面向网络的语言。通过它提供的类库可以处理TCP/IP协议,用户可以通
过URL地址在网络上很方便的访问其他对象。
(5)体系结构中立
Java是一种网络语言,为使Java程序能在网络的任何地方运行,Java解释器生
成与体系结构无关的字节码结构的文件格式。为了使Java的应用程序能不依赖于具体
的系统,Java语言环境还提供了用于访问底层操作系统功能的类组成的包,当程序使
用这些包时,可以确保它能运行在各种支持Java的平台上。
(6)安全性
用于网络、分布环境下的Java必须要防止病毒的入侵,Java不支持指针,一切对
内存的访问都必须通过对象的实例变量来实现,这样就防止了程序员使用欺骗手段访
-6-
问对象的私有成员,同时也避免了指针操作中容易产生的错误。
(7)JAVA中输入/输出流概念
过滤流DataInputStream和DataOutputStream除了分别作为FilterInputStream
和FilterOutputStream的子类外,还分别实现了接口DataInput和DataOutput。接
口DataInput中定义的方法主要包括从流中读取基本类型的数据、读取一行数据、或
者读取指定长度的字节数,如readBoolean()、readInt()、readLine()、readFully()
等。接口DataOutput中定义的方法主要是向流中写入基本类型的数据或者写入一定长
度的字节数组,如writeChar()、writeDouble()。DataInputStream可以从所连接的
输入流中读取与机器无关的基本类型数据,用以实现一种独立于具体平台的输入方式;
DataOutputStream可以向所连接的输出流写入基本类型的数据。
2.2Eclip简介
Eclip是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只
是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclip附带了一
个标准的插件集,包括Java开发工具(JavaDevelopmentTools,JDT)。[6]
Eclip是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语言开发,
但是目前亦有人通过插件使其作为其他计算机语言比如C++和Python的开发工具。Eclip
的本身只是一个框架平台,但是众多插件的支持使得Eclip拥有其他功能相对固定的IDE
软件很难具有的灵活性。
Eclip最初由OTI和IBM两家公司的IDE产品开发组创建,起始于1999年4月。
IBM提供了最初的Eclip代码基础,包括Platform、JDT和PDE。目前由IBM牵头,围
绕着Eclip项目已经发展成为了一个庞大的Eclip联盟,有150多家软件公司参与到
Eclip项目中,其中包括Borland、RationalSoftware、RedHat及Syba等。Eclip
是一个开发源码项目,它其实是VisualAgeforJava的替代品,其界面跟先前的Visual
AgeforJava差不多,但由于其开放源码,任何人都可以免费得到,并可以在此基础上开
发各自的插件,因此越来越受人们关注。近期还有包括Oracle在内的许多大公司也纷纷
加入了该项目,并宣称Eclip将来能成为可进行任何语言开发的IDE集大成者,使用者
只需下载各种语言的插件即可。
Eclip是一个开放源代码的软件开发项目,专注于为高度集成的工具开发提供一个
全功能的、具有商业品质的工业平台。它主要由Eclip项目、Eclip工具项目和Eclip
技术项目三个项目组成,具体包括四个部分组成——EclipPlatform、JDT、CDT和PDE。
-7-
JDT支持Java开发、CDT支持C开发、PDE用来支持插件开发,EclipPlatform则是一
个开放的可扩展IDE,提供了一个通用的开发平台。它提供建造块和构造并运行集成软件
开发工具的基础。EclipPlatform允许工具建造者独立开发与他人工具无缝集成的工具
从而无须分辨一个工具功能在哪里结束,而另一个工具功能在哪里开始。
本次程序中环境为JDK1.6,同时运用了eclip开发工具。
-8-
第三章可行性分析及总体设计原则
3.1可行性分析所采用的方法和步骤
通过研究分析拼图游戏所具备的能力及实现的方法来确定主体结构。利用现阶
段我所能达到的能力,以最简洁、最容易的办法,边开发边测试边修改,实现一个
初级游戏软件。
3.2评价尺度
由于本软件是一个初级产品,对其要求不是太苛刻,所以能够保证达到拼图游
戏的一般功能。
3.3可行性分析
为避免开发失误,保证新系统的成功开发和运行,从技术、经济和社会三方面对本系
统的可行性进行了分析和研究。
3.3.1技术可行性
本系统的开发基于Swing技术的拼图游戏开发。Swing可以轻松开发功能丰富的应用
程序。现有的技术已较为成熟,硬件、软件的性能要求、环境条件等各项条件良好,利用
现有技术条件可以达到该系统的功能目标。本人在学校期间已经掌握Java设计思想和代
码编写。同时,考虑给予的开发期限也较为充裕,预计系统是可以在规定期限内完成开发
的。
因此,java拼图游戏具有技术可行性。
3.3.2经济可行性
具有信息化的处理设施,并且拥有支持本系统的应用平台。因此无需再投入资金购买
其他设施。系统的开发基于本人对程序开发的实践学习而来,无需资金投入,并且软件开
发过程投入的成本不高,因此开发经费完全可以接受。
游戏开发成功后可以提供娱乐、休闲等。
因此,java拼图游戏开发也具有经济可行性。
3.3.3社会可行性
本系统的社会可行性主要从法律因素、用户使用可行性两方面进行研究。
(1)法律因素
系统的软件设计是在独立的环境下完成的,无可供抄袭的软件产品。
-9-
(2)用户使用可行性
本系统对用户的要求,除了需要具备在MicrosoftWindows平台上使用个人电脑的知
识外,并不需要特别的技术能力。在投入使用前,无需对操作系统的人员进行培训。这样
既减少投入成本又简化了操作环节。
因此,java拼图游戏也具有社会可行性。
3.4总体设计原则
本系统为了设计、实现和后期维护的方便,以及系统用户使用的便利,所以必须采取
一定的设计原则。其主要设计原则有:
简单性:在实现系统的功能的同时,尽量让系统操作简单易懂,这对于一个系统来说
是非常重要的。
针对性:本系统设计是针对java拼图游戏的需求定向开发设计,所以具有专业突出
和很强的针对性。
实用性:要求本系统能够满足java拼图游戏的需要,因此具有良好的实用性。
一致性:页面整体设计风格以及命名规则的一致性:整体框架和用图用色风格及变量、
类名和其他元素的命名规则保持一致。功能一致性:完成同样的功能应该尽量使用同样的
元素。元素风格一致性:界面元素的美观风格、摆放位置在同一个界面和不同界面之间
都应该是一致的。变量命名规则的一致性:变量应该用统一的规则进行命名,做到任意变
量均能从上下文推断其义。
先进性:本系统采用eclip做为开发工具,使用swing技术开发,软件具有良好的
兼容性和系统稳定性。因此本设计具有良好的先进性。[7][8]
-10-
第四章需求分析
4.1OOA方法介绍
面向对象的分析方法(OOA),是在一个系统的开发过程中进行了系统业务调查以后,
按照面向对象的思想来分析问题。OOA与结构化分析有较大的区别。OOA所强调的是在系
统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理
业务现状和方法的分析。
在用OOA具体地分析一个事物时,大致上遵循如下五个基本步骤:
第一步,确定对象和类。这里所说的对象是对数据及其处理方式的抽象,它反映了系
统保存和处理现实世界中某些事物的信息的能力。类是多个对象的共同属性和方法集合的
描述,它包括如何在一个类中建立一个新对象的描述。
第二步,确定结构(structure)。结构是指问题域的复杂性和连接关系。类成员结构
反映了泛化-特化关系,整体-部分结构反映整体和局部之间的关系。
第三步,确定主题(subject)。主题是指事物的总体概貌和总体分析模型。
第四步,确定属性(attribute)。属性就是数据元素,可用来描述对象或分类结构的
实例,可在图中给出,并在对象的存储中指定。
第五步,确定方法(method)。方法是在收到消息后必须进行的一些处理方法:方法
要在图中定义,并在对象的存储中指定。对于每个对象和结构来说,那些用来增加、修改、
删除和选择一个方法本身都是隐含的(虽然它们是要在对象的存储中定义的,但并不在图
上给出),而有些则是显示的。[9][10]
4.2功能需求
用户对于该拼图游戏的需求主要体现在以下几个功能:
1.实现程序GUI图形界面;
2.实现游戏开始、重来、退出等功能;
3.实现鼠标或键盘事件响应模块的功能;
4.实现游戏主要算法;
5.实现输赢自动判别功能;
6.实现查看原图功能;
4.3环境需求
-11-
操作系统可以有以下几种:WinXP/WinVista/Win7。
硬件要求:奔腾四处理器,主频2.0GHz,512M以上内存。
4.4可靠性需求
要保证该拼图游戏软件的稳定性,要在完成软件设计后进行软件稳定性测试,
检测出该软件发生故障的概率。
4.5用户界面需求
利用JavaSwing组件对该游戏软件的界面进行设计与实现,实现程序GUI图
形界面,做到界面设计简洁大方,时尚新颖,适合各类用户群体使用。
4.6软件成本消耗与开发进度需求
由于该软件只作为毕业设计,用于考察学生对于JavaSwing组件的理解与应
用能力,并未涉及软件的市场推广等工作,且开发该游戏的软件不需付费,属于零
成本,所以暂不用考虑软件的成本消耗。开发进度严格遵守任务书中的毕业设计(论
文)进度计划。
4.7条件假定和限制
由于本软件目前是基础版本,未做到尽善尽美。如果用户需要提高版本,本软
件需要根据游戏者的要求进行进一步的修改。
-12-
第五章系统分析
5.1业务流程分析
在进行业务流程分析时,需要按照原有信息流动过程,逐个地调查分析所有环节的处
理业务、处理内容、处理顺序和对处理时间的要求,弄清各个环节需要的信息、信息来源、
流经去向、处理方法、计算方法、提供信息的时间和信息形态。
业务流程分析可以帮助开发者了解该业务处理过程,发现和处理系统调查工作中的错
误和疏漏。
java拼图游戏的具体的业务流程图,流程如图5.1所示。
图5.1业务流程图
5.2总体设计方案
游戏非常的简单,当运行程序后,在登录游戏界面后,设计本程序能够载入默认
图片,程序为4*4的16格。在本程序中,对于图片的拼凑、判断图片是否可以移
动等都是设计的关键。总体设计方案中主要说明判断拼图是否成功这点的设计。
把分好的图片存储到一个image数组中,对于可移动的块其实是按钮,每个按
钮上都有一个icon,通过随机把image数组中的图片通过imageIcon的转化后附给
一个按钮,并将按钮数组首先附给一个向量,然后用随机数来确定对应向量的值,
然后再附给对应数组按钮,同时去除该值。也就是说在附值的时候图片顺序不变,
-13-
变的而是数组按钮的顺序。
对于图片的是否拼图成功的提示,主要是在每个按钮中加个String的属性值,
而且对于正确的排序的值与正在排的各个值比较,一旦所有的按钮对应的值与正确
的排序一致,则为成功。
5.3游戏功能分析
程序运行主窗口显示程序界面,点击“开局”按钮后开始游戏,拼图过程中,可以再
次点击“开局”按钮重新随机排列图片重新开始游戏,或者点击“下一张”加载另外一张
图片。
-14-
第六章系统设计
6.1系统功能设计
运行程序直接进入程序界面,点击“开局”按钮后开始游戏,再次点击可以重新开
始游戏,点击“下一张”进入下一张图片。如图6.1所示
图6.1模块流程图
6.2系统重点设计
这是程序运行后显示出来的界面,包括了原图,已经载入排列好的图片,点击“开局”
打乱图片开始游戏,点击“下一张”换图片。一共有5套图片可以选择,如图6.2所示。
图6.2程序运行开始效果
这个程序大致跟win7桌面的拼图小游戏功能相同,在这里重要的介绍一下,图片的
-15-
载入排列,换下一张图片,开始游戏后打乱排列图片的算法和拼图过程中交换图片的算法。
6.2.1开局载入图片
用修图软件一共裁剪了5张图片,裁剪成15张小块的图片和另外一张白色的小图,
每个图片的原图由“”的格式命名,白色的小图用“”的格式命名,裁剪成
的15块小图由“”的格式命名,依次按大小命名图片,x的值的范围为0-4,y和
z的取值范围为0-3。如图6.3所示。
图6.3裁剪图片的编号命名
根据图6.4所示,把网格布局管理器设置为一个4*4的网格,用一个二维数组来摆放
图片的位置,根据上文的命名规则,y代表行数,z代表列数,通过嵌套for循环来把裁
剪好的小图依次放入网格中。最后排列得出图6.2所示的效果。
图6.4网格图示例
部分代码:
privateString[][]order(){
String[][]exactnessOrder=newString[4][4];
for(introw=0;row<4;row++){
-16-
for(intcol=0;col<4;col++){
exactnessOrder[row][col]="image/"+num+row+col+".jpg";
}
}
returnexactnessOrder;
}
classStartButtonActionimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
String[][]stochasticOrder=reorder();
inti=0;
for(introw=0;row<4;row++){
for(intcol=0;col<4;col++){
JButtonbutton=(JButton)ponent(i++);
n(newImageIcon(stochasticOrder[row][col]));
if(stochasticOrder[row][col].equals("image/"+num+""))
emptyButton=button;
}
}
}
}
6.2.2随机排列图片
点击“开局”后,程序用嵌套for循环把裁剪好的图片依次放入一个二维数组中,再
在另外一个嵌套for循环中随机出16个网格中的行数和列数存在一个新的数组中,先确
定这个数组是空的,然后把图片依次放入随机出的数组中,到for循环结束就达到了随机
排列图片的效果,如图6.5所示。
-17-
图6.5随机排列后的效果
部分代码:
privateString[][]reorder(){
String[][]exactnessOrder=newString[4][4];
for(introw=0;row<4;row++){
for(intcol=0;col<4;col++){
exactnessOrder[row][col]="image/"+num+row+col+".jpg";
}
}
String[][]stochasticOrder=newString[4][4];
for(introw=0;row<4;row++){
for(intcol=0;col<4;col++){
while(stochasticOrder[row][col]==null){
intr=(int)(newRandom().nextInt(4));
intc=(int)(newRandom().nextInt(4));
if(exactnessOrder[r][c]!=null){
stochasticOrder[row][col]=exactnessOrder[r][c];
exactnessOrder[r][c]=null;
}
}
}
}
-18-
returnstochasticOrder;
}
6.2.3游戏时排列图片
交换图片的时候,先确定空白图片和要交换位置图片的数组就是行和列,当空白图片
行与图片的行的差的绝对值和空白图片列与图片的列的差的绝对值的和等于1的时候,就
说明两张图片是可以交换位置的。比如两图片的位置为[3.0][3.1]。|(3-3)|+|(0-1)|=1;
这样程序就判断两张图片是可以交换位置的。
部分代码:
classImgButtonActionimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
StringemptyName=e();
charemptyRow=(0);
charemptyCol=(1);
JButtonclickButton=(JButton)rce();
StringclickName=e();
charclickRow=(0);
charclickCol=(1);
if((clickRow-emptyRow)+(clickCol-emptyCol)==1){
n(n());
n(newImageIcon("image/"+""));
emptyButton=clickButton;
}
}
}
6.2.4换下一张图片
当点击“下一张”按钮的时候,如果num==5,因为一共有5张图,所以num=0,否则
num自加,然后按照上文开始游戏的方法再一次添加新的图片。
部分代码:
classNextButtonActionimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
-19-
if(num==5){
num=0;
}el{
++num;
}
n(newImageIcon("image/"+num+".jpg"));
String[][]exactnessOrder=order();
inti=0;
for(introw=0;row<4;row++){
for(intcol=0;col<4;col++){
JButtonbutton=(JButton)ponent(i++);
n(newImageIcon(exactnessOrder[row][col]));
if(exactnessOrder[row][col].equals("image/"+num+""))
emptyButton=button;
}
}
}
}
6.2.5判断拼图是否成功
判断拼图是否成功是拼图游戏的关键环节。算法中,如果stochasticOrder集合中
指定的stochasticOrder的的边界等于exactnessOrder集合中指定位置的边界
(exactnessOrder集合就是按从左到右,从上到下按顺序排列的空间位置),直至tk==9
时,即stochasticOrder数组里的stochasticOrder的边框与exactnessOrder数组中的位置
完全重合时,拼图成功。
部分代码:
publicbooleanisSuccess(){
inttk=0;
for(intr=0;r<4;r++){
for(intc=0;c<4;c++){
if(stochasticOrder[r][c].getBounds().equals(exactnessOrder[r][c])){
-20-
tk++;
}
}
}
if(tk==16){
returntrue;
}
returnfal;
}
6.3拼图游戏界面的设计与实现
如图6.6所示,界面很简单,标题栏是“拼图游戏”,整体分成上下两大块,上半块
分成左右两块,左边是原始图片,右边又分成上下块,上半块是按钮“下一张”,下半块
是按钮“开局”。整体的下半块是拼图界面。
图6.6拼图主界面
部分代码:
tTitle("拼图游戏");
tBounds(100,100,370,525);
tDefaultCloOperation(_ON_CLOSE);
//创建面板对象,并增加边框、布局
finalJPaneltopPanel=newJPanel();
der(newTitledBorder(null,"",
-21-
T_JUSTIFICATION,
T_POSITION,null,null));
out(newBorderLayout());
getContentPane().add(topPanel,);
//创建标签放原图
modelLabel=newJLabel();
n(newImageIcon("image/"+num+".jpg"));
(modelLabel,);
//在右侧加个面板,添加两个按钮
JPaneleastPanel=newJPanel();
(eastPanel,);
out(newBorderLayout());
JButtonnextButton=newJButton();
t("下一张");
ionListener(newNextButtonAction());
(nextButton,);
finalJButtonstartButton=newJButton();
t("开局");
ionListener(newStartButtonAction());
(startButton,);
//初始化中心面板,设置边框,添加按钮
centerPanel=newJPanel();
der(newTitledBorder(null,"",
T_JUSTIFICATION,
T_POSITION,null,null));
out(newGridLayout(4,0));
getContentPane().add(centerPanel,);
-22-
第七章设计小结
相信在大学期间,很多同学都参与过或者是编写过拼图游戏软件的程序,那么
这次作为毕业设计,要想更加出色的完成这个课题,并且具有独特之处,就是我编
写程序之前首先要考虑到的问题。但是,对于拼图游戏而言,寻找游戏的创新突破
口也有一定的难度。除了对于游戏功能方面的创新,还在制作拼图游戏的选材方面
寻求突破,也就是对游戏界面的设计多花心思,多下功夫。尽力去满足更多用户群
体的需求,争取满足不同用户的喜好。
在做毕业设计以前,我对Java游戏开发只是停留在理论知识的水平上,是“纸
上谈兵”,缺乏实际的软件开发经验。这次通过做毕业设计,我完成了拼图游戏的
软件开发任务。在整个开发过程中也遇到了很多问题,如载入图片的处理,随机排
列图片,图片移动等。对其设计体会总结如下:
1.为了熟悉拼图游戏的相关运作和功能设计,我从网上下载了各种拼图游戏,
了解并研究各自的功能设计,总结出哪些是好的功能设计,哪些是不必要的设计。
对尝试过的拼图游戏进行总结,将各自的优点融入我的设计之中。
2.完成了从“小而全”,到“全而精”的转变。设计过程中,经常会遇到困难,
我学会通过反复思考和测试,找出自己的错误并加以改正,再进行下一个步骤。这
个程序就是在这样反复的发现错误、改正错误中完成的。完成游戏雏形之后,再进
行逐步的完善。
3.这是一个不断学习新鲜事物的过程,从设计初的不懂到最后能够顺利完成,
我体会到在实践中学习的重要性,这对于将来我走上工作岗位具有重要意义,相信
这也是布置此项毕业设计的初衷。
经过三个月的不断努力,毕业设计内容已经完成了。回顾这个设计过程,我学到
了许多书本上没有学到的知识。通过这次自己制作软件,丰富了自己的实践技能,扩
展了相关知识,使我受益匪浅。同时,也感受到了软件开发的不易。由于我对软件
开发还只是一个新手,了解的不多,这其中一定还有很多的不足,也许有些模块未
能做得尽如人意。但可以肯定的是,通过此次毕业设计,我确实收获了许多意想不
到的东西,不光是编程语言,也包括对于软件设计的重新认识以及对于软件开发人
员工作的理解。总的来说,我认为此次毕业设计还是比较成功的,这也是我大学四
年来最具成就感的软件开发程序设计。
-23-
对于今后JavaSwing组件开发游戏的前景,相信绝大多数人给出的答案都是
肯定的。的确,JavaSwing组件给单机游戏市场带来了一股力量,在游戏市场所作
出的贡献、对软件开发人员带来的便利,毋庸置疑。相信十年甚至几十年,单机游
戏市场还会随着JavaSwing组件的这股力量继续稳步发展。也许若干年后,基于
JavaSwing组件的开发技术又能创造更辉煌的历史,也许那时候,游戏的界面会变
得更加的生动、更加的逼真,能够给游戏玩家带来更高端的游戏体验。
-24-
参考文献
[1]廖弘智,黄宗仁.Java轻松上手[M],北京:机械工业出版社,2008:52
[2]朱站立.Java程序设计实用教程[M],电子工业出版社,2006.10:58-70
[3]肖旻.JAVA程序设计教程[M],北京:中国电力出版社,2003:75
[4]李斌.Java语言的特点管理[J],科学文摘,2009:03
[5]陈冲,麦中凡.Java语言特点及开发工具JDK[J],微电脑世界,2008:08
[6]陆慧恩.实用软件工程[M],北京:清华大学出版社,2006:105-110
[7]叶核亚.Java2程序设计实用教程[M],北京:电子工业出版社,2007:89-91
[8]郑莉.Java语言程序设计[M],清华大学出版社,2007.01:67-75
[9]朱福喜.Java程序设计技巧与开发实例[M],北京:人民邮电出版社,2004:88-90
[10]唐大仕.Java程序设计[M],北方交通大学出版社,2007.05:56-62
-25-
致谢
首先在这里要忠心地感谢老师对我们的教导和帮助,没有你的教育我们就不会很好地
掌握这方面的知识,更不能很好达到这次设计的目的。在设计的时候老师能够认真分析我
们的出错和不足的地方,然后给我们提出一些修改建议,并对自己的意见详细讲给我们听,
这些对于程序的完善提供了很好的帮助,这也给我们以后的设计提供了很好的设计分析的
注意之处。此外还要谢谢其他同学,在我设计的时候他们也提供了很多宝贵的意见。没有
大家的帮助,我的设计也不能做的令自己满意的。
-26-
附录
Layout;
yout;
Event;
Listener;
;
con;
n;
;
;
;
Border;
publicclassMedleyGameextendsJFrame{
privateJLabelmodelLabel;
privateJPanelcenterPanel;
privateJButtonemptyButton;
intnum=0;
publicstaticvoidmain(String[]args){
try{
MedleyGameframe=newMedleyGame();
ible(true);
}catch(Exceptione){
tackTrace();
}
}
//建立窗口构造方法
publicMedleyGame(){
super();
tResizable(fal);
tTitle("拼图游戏");
tBounds(100,100,370,525);
tDefaultCloOperation(_ON_CLOSE);
//创建面板对象,并增加边框、布局
finalJPaneltopPanel=newJPanel();
der(newTitledBorder(null,"",
T_JUSTIFICATION,
T_POSITION,null,null));
out(newBorderLayout());
getContentPane().add(topPanel,);
//创建标签放原图
modelLabel=newJLabel();
n(newImageIcon("image/"+num+".jpg"));
太原科技大学华科学院毕业设计(论文)
-27-
(modelLabel,);
//在右侧加个面板,添加两个按钮
JPaneleastPanel=newJPanel();
(eastPanel,);
out(newBorderLayout());
JButtonnextButton=newJButton();
t("下一张");
ionListener(newNextButtonAction());
(nextButton,);
//创建按钮开局添加监听
finalJButtonstartButton=newJButton();
t("开局");
ionListener(newStartButtonAction());
(startButton,);
//初始化中心面板,设置边框,添加按钮
centerPanel=newJPanel();
der(newTitledBorder(null,"",
T_JUSTIFICATION,
T_POSITION,null,null));
out(newGridLayout(4,0));
getContentPane().add(centerPanel,);
//初始化图片
String[][]exactnessOrder=order();
//按排列添加按钮,设置图片
for(introw=0;row<4;row++){
for(intcol=0;col<4;col++){
finalJButtonbutton=newJButton();
e(row+""+col);
n(newImageIcon(exactnessOrder[row][col]));
if(exactnessOrder[row][col].equals("image/"+num+""))
emptyButton=button;
ionListener(newImgButtonAction());
(button);
}
}
}
//初始化图片
privateString[][]order(){
String[][]exactnessOrder=newString[4][4];
for(introw=0;row<4;row++){
for(intcol=0;col<4;col++){
exactnessOrder[row][col]="image/"+num+row+col+".jpg";
}
}
returnexactnessOrder;
-28-
}
//随机排列图片
privateString[][]reorder(){
String[][]exactnessOrder=newString[4][4];
for(introw=0;row<4;row++){
for(intcol=0;col<4;col++){
exactnessOrder[row][col]="image/"+num+row+col+".jpg";
}
}
String[][]stochasticOrder=newString[4][4];
for(introw=0;row<4;row++){
for(intcol=0;col<4;col++){
while(stochasticOrder[row][col]==null){
intr=(int)(newRandom().nextInt(4));
intc=(int)(newRandom().nextInt(4));
if(exactnessOrder[r][c]!=null){
stochasticOrder[row][col]=exactnessOrder[r][c];
exactnessOrder[r][c]=null;
}
}
}
}
returnstochasticOrder;
}
//游戏时排列图片
classImgButtonActionimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
StringemptyName=e();
charemptyRow=(0);
charemptyCol=(1);
JButtonclickButton=(JButton)rce();
StringclickName=e();
charclickRow=(0);
charclickCol=(1);
if((clickRow-emptyRow)+(clickCol-emptyCol)==1){
n(n());
n(newImageIcon("image/"+""));
emptyButton=clickButton;
}
}
publicbooleanisSuccess(){
inttk=0;
for(intr=0;r<4;r++){
for(intc=0;c<4;c++){
if(stochasticOrder[r][c].getBounds().equals(exactnessOrder[r][c])){
-29-
tk++;
}
}
}
if(tk==16){
returntrue;
}
returnfal;
}
}
//换下一张图片
classNextButtonActionimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
if(num==5){
num=0;
}el{
++num;
}
n(newImageIcon("image/"+num+".jpg"));
String[][]exactnessOrder=order();
inti=0;
for(introw=0;row<4;row++){
for(intcol=0;col<4;col++){
JButtonbutton=(JButton)ponent(i++);
n(newImageIcon(exactnessOrder[row][col]));
if(exactnessOrder[row][col].equals("image/"+num+""))
emptyButton=button;
}
}
}
}
//开局排列图片
classStartButtonActionimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
String[][]stochasticOrder=reorder();
inti=0;
for(introw=0;row<4;row++){
for(intcol=0;col<4;col++){
JButtonbutton=(JButton)ponent(i++);
n(newImageIcon(stochasticOrder[row][col]));
if(stochasticOrder[row][col].equals("image/"+num+""))
emptyButton=button;
}
}
-30-
}
}
}
本文发布于:2023-03-16 07:33:30,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/cb620b4c4e708d72ee4c862b70fc5c7e.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:开始游戏图片.doc
本文 PDF 下载地址:开始游戏图片.pdf
留言与评论(共有 0 条评论) |