JAVA开发连连看游戏.docx

上传人:b****8 文档编号:9365036 上传时间:2023-02-04 格式:DOCX 页数:29 大小:2.16MB
下载 相关 举报
JAVA开发连连看游戏.docx_第1页
第1页 / 共29页
JAVA开发连连看游戏.docx_第2页
第2页 / 共29页
JAVA开发连连看游戏.docx_第3页
第3页 / 共29页
JAVA开发连连看游戏.docx_第4页
第4页 / 共29页
JAVA开发连连看游戏.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

JAVA开发连连看游戏.docx

《JAVA开发连连看游戏.docx》由会员分享,可在线阅读,更多相关《JAVA开发连连看游戏.docx(29页珍藏版)》请在冰豆网上搜索。

JAVA开发连连看游戏.docx

JAVA开发连连看游戏

1引言

1.1连连看游戏发展[1]

游戏“连连看”顾名思义就是找出相关联的东西,连连看游戏在网上基本是用于小游戏中,就是找出相同的两样东西,在一定的规则之内可以做为相关联处理。

“连连看”的发展经历了从桌面游戏、在线游戏、社交游戏三个过程。

在电脑普及发展的今天,网络小游戏、网页游戏越来越受网民欢迎,除了玩的方法简单外(不像其他游戏还需要注册下载繁琐过程),很多游戏不乏经典。

连连看游戏就是典型,因此不管走到哪个网页游戏网站,连连看游戏总是排在受玩家欢迎排名的前3位,休闲、趣味、益智是连连看玩不厌的精华,且不分男女老少、工薪白领,是一款适合大众的经典网络、单机休闲小游戏。

1.1.1桌面连连看游戏发展

游戏“连连看”是源自台湾的桌面小游戏,自从流入大陆以来风靡一时,也吸引众多程序员开发出多种版本的“连连看”。

这其中,顾方编写的“阿达连连看”以其精良的制作广受好评,这也成为顾方“阿达系列软件”的核心产品。

并于2004年,取得了国家版权局的计算机软件著作权登记证书。

1.1.2在线连连看游戏发展

随着Flash应用的流行,网上出现了多种在线Flash版本“连连看”。

如“水晶连连看”、“果蔬连连看”、“石头连连看”等。

1.1.3社交连连看游戏发展

2008年,随着社交网络的普及和开放平台的兴起,“连连看”被引入了社交网络。

“连连看”与个人空间相结合,被快速的传播,成为一款热门的社交游戏,其中以开发者Jonevey在Manyou开放平台上推出的“宠物连连看”最为流行。

1.2连连看游戏介绍

当今社会休闲型游戏越来越得到人们的喜爱,连连看游戏是近几年来网络上非常流行的一种二维休闲游戏,它对电脑配置要求不高,娱乐性强,易于上手,因此吸引了一大批玩家,且不分男女老少、工薪白领,是一款适合大众的经典网络、单机休闲小游戏。

1.2.1连连看游戏基本规则

如果两个相同的图案之间如果能画出一条不多于2折的连线,则消除这两个图案,直到所有的图案全部消除为止,这就是连连看。

简单,却不缺乏挑战,道具、关卡、多样的地图,会不断增加游戏的难度。

而且连连看需要的不仅仅是眼力,更需要细心。

1.2.2连连看游戏关卡设置

为增加连连看游戏的难度,关卡的设置尤为重要,在本次连连看游戏设计中,有2种设置关卡的方式,其一是通过限制时间来增加游戏难度,最终我选择的是时间固定不变,增加图片的个数来增加游戏的难度的方式,从而使游戏更富有挑战性和娱乐性。

1.3连连看游戏设计目的

随着社会节奏的加快,平常工作的竞争强度也加大,生活的压力也跟着加重,所以休息时或下班后大家都需要个休闲的娱乐工具,来放松自己,缓解自己的压力,消除紧张的疲劳状态。

连连看游戏是一种有趣休闲的小游戏,不仅能调节精神压力,还能在游戏中锻炼我们的眼力视野,注意力的专心的程度,开发我们的思维能力,同时可以充实自己。

本次毕业设计连连看游戏主要使用的Java语言编写,Java语言之所以这样长盛不衰,一是因为其众多的技术特点与现今的应用十分合拍,可以覆盖大部分的需求;二是因为SUN公司不断推出新的版本,完善Java自身的功能,且Java语言具有面向对象、跨平台、分布应用等特点。

面向对象的开发方法是当今世界最流行的开发方法,结合面向对象分析、面向对象设计,允许将问题域中的对象直接映射到程序中,减少软件开发过程中中间环节的转换过程,通过继承大幅减少冗余的代码,并可以方便地扩展现有代码,提高编码效率,也减低了出错概率,因此它不仅具有更贴近自然的语义,而且有利于软件的维护和继承[2]。

1.4连连看游戏解决的主要问题

在游戏设计编码过程中,主要需要解决的问题有以下几个:

一是如何设置整个游戏的界面并且使界面友好;

二是如何控制连连看游戏中随机图片的生成且保证每种图片必须为偶数个;

三是图片是否相同且图片之间路径是否畅通的判断;

四是点击炸弹和提示怎么消去和提示两个相同的图片,以及炸弹和提示可以使用的次数;

五是倒计时和关卡问题。

1.5连连看游戏技术的简要说明

Java是一种可以撰写跨平台应用软件的面相对象的程序设计语言,Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景[3]。

Java技术是一门编程语言,也是一个平台,Java是基于Java虚拟机技术,借助这个东西建立了跨平台的优势。

Java技术的重要性就不讲了,从最近流行的一个统计数据上来讲,目前世界上编程语言Java、C、VB、C++依次排名前4位,这排名本身不能说明什么,至少也是工业界对编程语言使用上一个的侧面反映[4]。

Java编程语言与众不同之处在于:

Java语言既是编译型的(转换为一种称为Java字节码的中间语言),又是解释型的(JVM对字节码进行解析和运行)[5]。

编译只进行一次,但解释在每次运行程序时都会进行。

编译后的字节码采用了一种针对JVM优化过的机器码形式,解释器是JVM的实现。

Java平台是一种纯软件的平台,它有三个版本JavaSE、JavaEE、JavaME[6]。

JavaSE(Java Platform,Standard Edition)这个版本以前叫做J2SE,后来的版本号从1.4直接跳到5.0,其实也就是1.5,所以就叫成JavaSE5.0。

目前,Java开发人员使用较多的版本就是5.0,当然还有JavaSE 6.0这个更新的版本。

它允许开发以及部署在桌面、服务器、嵌入式环境以及实时环境中使用的Java应用程序。

JavaSE还包含了支持Java Web服务开发的类,并且为JavaEE这个版本提供了基础。

 

相对桌面应用程序,Java一直不被看好,但负责桌面GUI开发的类库有:

JDK自带的主要是AWT/SWING这个Java原生的类库;也可以使用IBM的SWT/JFace这个第三方的类库。

开发工具有:

NetBeans(最近已经是6.0final版了,做GUI有使用VB的感觉)和Eclipse(SWT/JFace这个项目其实就是做Eclipse项目时扩展出来的,所以对SWT/JFace支持的也不错)。

 

JavaEE(Java Platform,Enterprise Edition)这个版本以前叫做J2EE,也是Java比较流行的领域,Java企业级的版本。

JavaEE下有很多流行的开发框架,像Struts、Spring和Hibernate这种流行的SSH组合等。

 

根据项目大小、应用领域,技术平台选择的面还是很多的,除了JavaEE,还有.Net,LAMP组合(Linux、Apatch、MySql、PHP组合),相对来说比较新Ruby在Ruby on Rails的框架应用,后两者可能在相对来说比较轻量级的Web领域运用成功的案例比较多,更重量的企业级潜力还有待挖掘。

 

JavaME(Java Platform,Micro Edition)这个版本以前叫做J2ME。

应用领域就像各种移动设备和嵌入式设备,比如:

手机、PDA、电视机顶盒和打印机。

目前较为主流的是Android,Android包括:

1、高度定制的Linux操作系统内核及智能手机的硬件驱动支持;2、经过Google修改过的Java虚拟机Dalvik,这里的性能比SUN的Hotspot要高,支持大部分的Java核心类库;3、大量智能手机的开发核心类库;4、大量现成的智能手机的应用软件;5、基于Eclipse的开发环境。

也是按照网上的说法,JavaEE提供了统一的编程平台,但是不能调用操作系统的资源;而Android下直达操作系统,上直达应用软件,比如:

浏览器、日历、地图等。

Java的开发工具很多,Eclispe比较流行,各种插件也比较多,当然用起来也很不错;NetBeans现在也是越做越好,介绍这两个IDE主要是因为他们是开源的,当然还有其它工具如JBuilder、IntelliJ、JCreator等。

这些IDE各有各的优势劣势,根据不同的开发项目来进行选择[7]。

这次毕业设计我使用的开发工具是MyEclipse,MyEclipse是一个十分优秀的用于开发Java[8],J2EE的Eclipse插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持十分不错。

MyEclipse目前支持JavaServlet,AJAX,JSP,JSF,Struts,Spring,Hibernate,EJB3,JDBC数据库链接工具等多项功能[9]。

可以说MyEclipse是几乎囊括了目前所有主流开源产品的专属eclipse开发工具。

[而且,MyEclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentKit,JDK)[10]。

1.6Java语言的主要特性

Java语言是一种适用于网络编程的语言,它的基本结构与C++极为相似,但却简单得多。

它集成了其它一些语言的特点和优势,又避开了它们的不足之处。

1.6.1简单性

Java与C++相比,不再支持运算符重载、多级继承及广泛的自动强制等易混淆和较少使用的特性,而增加了内存空间自动垃圾收集的功能,复杂特性的省略和实用功能的增加使得开发变得简单而可靠。

1.6.2跨平台

由于它采用先编译成中间码(字节码),然后装载与校验,再解释成不同的机器码来执行,即“Java虚拟机”的思想,“屏蔽”了具体的“平台环境”特性要求,使得只要能支持Java虚拟机,就可运行各种Java程序。

1.6.3面向对象

面向对象[11](O-O)的技术是近年来软件开发中用得最为普遍的程序设计方法,,它通过把客观事物进行分类组合、参数封装、用成员变量来描述对象的性质、状态,而用方法(成员函数)来实现其行为和功能。

面向对象技术具有继承性、封装性、多态性等众多特点,Java在保留这些优点的基础上,又具有动态联编的特性,更能发挥出面向对象的优势。

1.6.4多线程

多线程机制使应用程序能并行执行,Java有一套成熟的同步原语,保证了对共享数据的正确操作.通过使用多线程,程序设计者可以分别用不同的线程完成特定的行为,而不需要采用全局的事件循环机制,这样就很容易实现网络上实时的交互行为。

1.6.5动态性

多线程机制使应用程序能并行执行,Java有一套成熟的同步原语,保证了对共享数据的正确操作.通过使用多线程,程序设计者可以分别用不同的线程完成特定的行为,而不需要采用全局的事件循环机制,这样就很容易实现网络上实时的交互行为。

1.6.6健壮性

Java的强类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证。

Java致力于检查程序在编译和运行时的错误,类型检查帮助检查出许多开发早期出现的错误,Java自已操纵内存减少了内存出错的可能性。

这些功能特征大大缩短了开发Java应用程序的周期。

1.7连连看游戏的关键技术[12]

GUI,图形用户界面(GraphicalUserInterface,简称GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。

与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。

应用程序为使用数据而在图形用户界面中设置的基本单元,应用程序和数据在窗口内实现一体化,在窗口中,用户可以在窗口中操作应用程序,进行数据的管理、生成和编辑。

通常在窗口四周设有菜单、图标,数据放在中央。

在窗口中,根据各种数据/应用程序的内容设有标题栏,一般放在窗口的最上方,并在其中设有最大化、最小化(隐藏窗口,并非消除数据)、最前面、缩进(仅显示标题栏)等动作按钮,可以简单地对窗口进行操作。

GUI的广泛应用是当今计算机发展的重大成就之一,他极大地方便了非专业用户的使用。

人们从此不再需要死记硬背大量的命令,取而代之的是可以通过窗口、菜单、按键等方式来方便地进行操作。

而嵌入式GUI具有下面几个方面的基本要求:

轻型、占用资源少、高性能、高可靠性、便于移植、可配置等特点[13]。

 

2连连看游戏需求分析

2.1需求分析

整个连连看游戏程序主要有三个阶段,包括了游戏开始,游戏运行和游戏结果三个阶段。

游戏程序编译通过开始调试运行,使连连看游戏能够功能实现。

这次的毕业设计我负责的主要是根据前台根据前台GUI界面实现对应后台逻辑代码,相对而言是功能的主要实现,使程序正常运行。

对于玩家来说,希望游戏简单容易上手,界面美观,富有挑战性,玩家的要求能及时得到满足的情况下,游戏才能得到广大玩家的喜爱,所以在进行游戏设计的过程中要尽量站在玩家的角度思考问题,尽量满足玩家的需求。

2.2可行性分析

整个连连看游戏的主要技术是用图形界面GUI实现的,通过编译解释之后,出现一个图形界面。

界面右边有游戏开始、刷新、提示、炸弹、倒计时功能等功能。

界面的左边是有一个空白的大方块,里面主要用来部署图片,其中最多可以容纳225张小方格,每个小方格容纳一个小图标,通过点击其中的小图标来触发事件,后台的算法主要是对触发事件的相关处理,如果符合一定的游戏规则就会进行相对应的逻辑处理,直到界面上所有的小图片消完为止或者通关成功,或者游戏的时间到游戏被迫结束。

2.3功能需求分析

整个连连看游戏的功能描述如下:

游戏刚开始运行时,就会初始化游戏进入第一关,将整个游戏区域的主面板看做是一个数组,并划分坐标分为纵向和横向扩展的若干个小方块,而且这些小方块是由53种图案成对的分布在游戏区域的不同位置。

玩家需要通过点击相同的两个小图片来进行消除的操作,或者玩家在玩的过程中可以通过刷新功能降低游戏的难度,通过提示、炸弹功能消除相同的2张小图片。

直到界面上所有的小图片消完为止或者通关成功,或者游戏的时间到游戏被迫结束[14]。

此外在游戏中有时间的限制,每通过一关,时间会自动清空并且初始化进入到下一关。

为了增加游戏的娱乐性,特别增加了声音的功能[15],在游戏的每个关卡初始化过程有开始游戏的音效,模仿的是连连看QQ游戏的音效,当鼠标选中图片,图片相消的过程中也都有音效的设置,通过不同的音效加以区分吸引更多的玩家。

2.4性能需求分析

2.4.1硬件环境

处理器:

AMD1.6GHz或是更高

内存:

128MB以上

硬盘空间:

20MB

2.4.2软件环境

操作系统:

Windows7旗舰版

开发环境:

Myeclipse

2.4.3环境变量

设置环境变量:

右击 我的电脑->属性->高级->环境变量  

Path:

C:

\ProgramFiles\Java\jdk1.6.0_43\bin(Path:

系统在任何路径下都可以识别Java命令需要设置的变量)

classpath:

.(当前路径,也可以不配置)

JAVA_HOME:

C:

\ProgramFiles\Java\jdk1.6.0_43(JAVA_HOME:

java的安装路径,必须配置)

 

3连连看游戏概要设计

3.1功能设计分析

1、通过点击界面右下角的“重新开始”图标,重新开始新游戏。

此时程序会通过关卡数据来初始化游戏模型,并通过随机函数排列每张图片并标记其id号和保证图片个数为偶数个,以便通过id号判断图片是否相同。

记录每张图片的坐标,用来判断图片之间的路径是否畅通,如果条件满足则可以相互消除[16]。

2、通过点击面板触发事件,如果玩家选择两张一样的图片,再判断是否可以找到在2折内连通的线,如果存在连通则开始消除格子,如果玩家两次点击的图片不相同,在通知视图重绘一个方框时,会根据是否为已选中的点显示不同的图案,不同的图片是不会被选中的。

3、通过使用“炸弹”道具功能可进行图片消除。

通过点击界面右边的“炸弹”选项触发事件,点击后如果界面上存在两张路径连通的相同图片则随机消除。

但是炸弹数目是有限的,默认数目为三,每使用一次“炸弹”功能,炸弹的数目就会自动减一,当炸弹数目为零的时候,玩家不可以使用炸弹功能。

如果玩家再次点击炸弹时,则会出现相应的提示,没有可用的炸弹道具。

通过使用“提示”功能消除图片。

如果玩家无法找到可以消除的图片,则可以点击提示按钮,点击后如果界面上有两张相同的图片则通知视图重绘一个方框来提示玩家,玩家可以点击连接的两张图片,消除相同的图片。

但是提示数目是有限的,默认数目为三,每使用一次“提示”功能,提示的数目就会自动减一,当提示数目为零的时候,玩家不可以使用提示功能。

如果玩家再次点击提示按钮时,则会出现相应的提示,没有可用的提示道具。

通过使用“刷新”功能消除图片。

如果玩家无法找到相同的图片,则可以点击刷新按钮,点击后界面上剩余的图片会进行重新排列,玩家继续游戏。

但是刷新数目是有限的,默认数目为五,每使用一次“刷新”功能,刷新的数目就会自动减一,当刷新数目为零的时候,玩家不可以使用刷新功能。

如果玩家再次点击刷新按钮时,则会出现相应的提示,没有可用的重列道具。

6、当系统开始游戏后,系统会在后台记录时间,如果在玩家还没有消除所有图片时,系统倒计时结束,那么系统会弹出对话框,提示用户:

“时间到!

请重新开始!

7、如果时间还没有结束,玩家消除掉关卡里所设置的所有图片,系统会提示玩家“通关,欢迎进入下一关”。

8、游戏通过设置关卡可增加游戏的难度,即通过设置时间不变,图片的个数改变来增加游戏难度。

voidinitGameMap(intgateNum){

boxQuantity=50+gateNum*10;

if(boxQuantity>220){

boxQuantity=220;

}

typeNumber=30+4*gateNum;

if(typeNumber>PublicVar.MAX_TYPE_NUMBER){

typeNumber=PublicVar.MAX_TYPE_NUMBER;

}

ArrayListforRandom=newArrayList();

for(inti=0;i

for(intj=0;j

forRandom.add(newPoint(i,j));

}

}

}

3.2功能设计方法

1、Audio.java

实现音效的功能。

2、GameController.java

实现游戏功能的控制。

3、GameModel.java

游戏每个小功能的实现。

4、GameStateMessage.java

设置游戏状态信息。

5、IProp.java

设置游戏道具的接口。

6、Main.java

主函数,游戏的入口。

7、RoadSearcher.java

通过算法确定两张小图片之间的路径是否连通。

8、TollGate.java

实现关卡的设置。

3.3连连看游戏流程图

N

Y

N

Y

Y

N

图3.1连连看游戏流程图

4连连看游戏详细设计

4.1游戏中地图布局

对于整个游戏区域来说,可以将它看作是一个由若干个小方块构成的地图,并且每一个小方块上放置着不同的图案,可以把它称之为图案小方块。

这些图案小方块零散的分布在地图上的不同位置区域,而且每一个图案小方块都有与其相对应的完全相同的另外一个小方块,如图4.1所示。

图4.1游戏地图设计图

如图4.1所示,整个游戏区域被抽象为一个有坐标位置属性的平面,平面上零散的分布了许多个小方块,而且这些小方块的是保证成对出现的。

经过前面的描述和分析之后,可以把游戏区域地图用一个整型二维数组map来表示。

对地图中的行列数的表达,用一个转换法则就可以实现。

地图的数据结构已经设计好之后,需要对游戏进行初始化。

由于方块需要成对的出现,所以在做地图的初始化的时候,不仅仅是对图片种类做简单的随机取数,然后把随机选取出来的图片放到地图区域中去就可以的。

而是需要成对的对动物图片进行成对选取,就是说地图中的小方块必须是偶数个,每一个出现的小图片也必须是偶数个才可以。

前面有提到过,把地图数组设置成动态分配的方式,目的就是可以让数据空间可以根据行列数的需求动态的获取,而对于实际不同的大小比例的地图可以预先定义几组关于行列数的宏来实现。

当需要创建的时候,再根据宏值的不同分配不同大小的地图空间就可以实现。

4.2游戏中地图算法设计[17]

首先根据关卡数生成连连看方块的类,之后构造地图map。

voidinitGameMap(intgateNum){

boxQuantity=50+gateNum*10;

if(boxQuantity>220){

boxQuantity=220;

}

typeNumber=30+4*gateNum;

if(typeNumber>PublicVar.MAX_TYPE_NUMBER){

typeNumber=PublicVar.MAX_TYPE_NUMBER;

}

ArrayListforRandom=newArrayList();

for(inti=0;i

for(intj=0;j

forRandom.add(newPoint(i,j));

}

}

RandomrandomGenertor=newRandom();

intstep=0;

while(step

inttemp=randomGenertor.nextInt(forRandom.size());

PointtempPoint=forRandom.get(temp);

gameMap[tempPoint.x][tempPoint.y]=true;

forRandom.remove(temp);

step++;

}

}

在检验两个方块是否能消除的时候,我们要让两个方块同时满足两个条件才行,就是两者配对并且能连线成功。

分为3种情况:

从以下的这三种情况,我们就可以知道,需要进行三个检测,这三个检测分别检测一条直路经。

这样就会出现三条路经。

如果这三条路经上都是空按钮,那么就刚好会是三种直线(两个转弯点)把两个按钮连接起来了。

1)判断两张图片在水平方向上是否可以连通,可以用以下算法实现:

voidnewSearchMethod(){//先水平方向

ArrayListstartPlane=newArrayList();

ArrayListendPlane=newArrayList();

intstep=0;

do{

startPlane.add(newPoint(start.x-step,start.y));

step++;

}while(start.x-step>=0&&map[start.x-st

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1