admin 管理员组

文章数量: 887031


2024年2月28日发(作者:黑客反汇编揭秘)

学号:

常 州 大 学

毕业设计(论文)

(2012届)

题 目

学 生

学 院 专业班级

校内指导教师 专业技术职务

校外指导老师 专业技术职务

二○一二年六月

基于java的吃豆子小游戏开发

摘 要:在现今电子信息高速发展的时代,电子游戏已经深入人们的日常生活,成为老少皆宜的娱乐方式。吃豆子游戏是一款具有活动元素的经典游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。自1980年 Namco(南梦宫)发布吃豆子这款游戏后,20余年一直被众玩家传玩着,经久不衰。它看似简单但却变化无穷,令人上瘾。现在联众又将重新掀起这股让人沉迷的吃豆子游戏的风潮。对一般用户来说,它的规则简单,容易上手,且游戏过程变化无穷。

本论文主要介绍如何利用图片工具Photoshop7.0,Java语言编程环境JDK,游戏开发平台Eclipse和音乐转换工具Winamp以及如何使用这些工具实现吃豆子游戏的游戏总体及构成模块。吃豆子游戏总体是有界面、控制和音乐三个主要部分组成。

吃豆子游戏的界面分为图片制作和位图载入两方面。图片采用了整体界面图片制作和区块图片制作两种方法。位图的载入是使用游戏库中的画图精灵实现的。画图精灵除了可以载入位图,还可以让界面产生图层效果;吃豆子游戏中的控制方法分为键盘控制和定时器控制两种。键盘控制是由玩家从键盘输入控制命令对游戏进行控制,而定时器控制是使用定时器对游戏进行时间控制。键盘控制包括游戏的开始与退出控制、游戏菜单的选择与确定控制和吃豆者的行动方向控制。定时器控制包括吃豆者的持续移动控制、道具的出现时间控制和道具有效时间的控制。在游戏音乐方面,分为背景音乐和特殊音效两种。背景音乐使用了循环播发模式,特殊音效使用了触发播放模式。

关键词:Java 游戏开发 画图精灵

- I -

Based on the Java Pac-Man development

Abstract:In the current of rapid development of electronic information, electronic games have

become an important part of people's daily life. It has been a popular form of entertainment for all

ages. Pac-man game is a classic game with elements of activity. It has caused the economic value,

which can be said to be a great thing in the history of games. Since 1980, Namco had released

Pac-man game, more than 20 years the game has been always playing by all players. It seems

easy but changeable and addictive. Now many people turn too re-set off this addictive Pac-man

game wave. For the average user, its rules are simple, easy to use, and the game process is

changing.

Main of this thesis is introduction how to install the picture manufacture tool Photoshop7.0,

Java language be written program environment JDK, game development environment Eclipse

and music conversion tool WINAMP. And how use theses tools to realize PAC-MAN game’s

total and it’s constitute parts. The game is divided into three parts: interface part, control part and

music part.

Interface part is divided into picture manufacture and picture loaded in. Picture manufacture

adopted the whole interface picture manufacture method and square piece picture manufacture

method. Picture loaded in is using allegro’s

DRAW_SPRITE complete. Control part is divided into

keyboard control and timer control. Keyboard control is player use keyboard control the game.

Timer control is the game was controlled by timer. Keyboard control included include the game’s

start .The game’s withdraw, the menu’s control of the game and the direction’s control of

Pac-man. Timer controls include Pac-man’s Keep on move. At the music pare, It is divided into

the background music and special sound effect. The background music used to circularly sowed

the hair mode, special sound effect to use to trigger to broadcast the mode.

Key words: Java the game development

DRAW_SPRITE

- II -

II

目录

摘 要 .............................................................................................................................................. I

目 录 ............................................................................................................................................ III

1

引言 ..................................................................................................................................................................... 1

1.1

课题研究的背景 .......................................................................................................................................... 1

1.2

国内外研究现状与发展趋势 .................................................................................................................. 2

1.3课题的意义及目的 ................................................................................................................ 3

2可行性研究 ................................................................................................................................... 4

2.1设计的目的 .................................................................................................................................................... 4

2.2

本设计的问题定义 ..................................................................................................................................... 4

2.3可行性分析 .................................................................................................................................................... 4

2.3.1技术可行性 ...................................................................................................................... 4

2.3.2操作可行性 ...................................................................................................................... 5

3.设计所用软件及环境 ................................................................................................................... 5

3.1

JAVA语言简介 ............................................................................................................................................... 5

3.2

ECLIPSE基础 .................................................................................................................................................. 7

3.3

JDK环境 ......................................................................................................................................................... 9

3.4

APPLET基础 ................................................................................................................................................. 10

4需求分析 ..................................................................................................................................... 15

4.1游戏需求 ....................................................................................................................................................... 15

4.2编程环境需求 ............................................................................................................................................. 15

4.3

接口控制 ...................................................................................................................................................... 16

5.概要设计 ..................................................................................................................................... 17

5.1游戏模块划分 ............................................................................................................................................. 17

5.2游戏流程图 .................................................................................................................................................. 18

5.3游戏地图算法流程图 ............................................................................................................................... 19

5.4

游戏音乐算法流程图 .............................................................................................................................. 20

6详细设计 ..................................................................................................................................... 21

6.1主界面设计 .................................................................................................................................................. 21

6.2本游戏的模块设计 .................................................................................................................................... 24

6.2.1墙体绘制模块设计 ........................................................................................................ 24

6.2.2豆子绘制模块设计 ........................................................................................................ 25

6.2.3吃豆者的绘制模块设计 ................................................................................................ 26

6.2.4敌人绘制模块设计 ........................................................................................................ 27

6.2.5 移动控制模块设计 ....................................................................................................... 30

6.2.6水果模块设计 ................................................................................................................ 31

- III -

6.2.7 HTML文件引用模块设计 ......................................................................................... 33

6.3音乐播放和墙体图片设计 ...................................................................................................................... 33

6.3.1音乐播放设计 ................................................................................................................ 33

6.3.2游戏地图设计 ................................................................................................................ 34

6.4游戏界面截图 ............................................................................................................................................. 34

7软件测试 ..................................................................................................................................... 36

7.1

吃豆子游戏的测试内容 .......................................................................................................................... 36

7.2吃豆子游戏的测试步骤 .......................................................................................................................... 36

7.3吃豆子游戏的测试项目 .......................................................................................................................... 38

7.3.1游戏界面菜单选项的功能测试 .................................................................................... 39

7.3.2按键事件的功能测试 .................................................................................................... 39

7.3.3无敌状态测试 ................................................................................................................ 40

7.4测试结果分析 ............................................................................................................................................. 41

8总结 ......................................................................................................................... 41

致谢 ................................................................................................................................................ 41

参 考 文 献 .................................................................................................................................. 42

- IV -

常州大学本科生毕业设计(论文)

1 引言

1.1 课题研究的背景

电脑已经深入到日常工作和生活的方方面面,比如文字处理、信息管理、辅助设计、图形图像处理、教育培训以及游戏娱乐等。Windows系统的推出使电脑从高雅的学术殿堂走入了寻常百姓家,各行各业的人们无须经过特别的训练就能够使用电脑完成许许多多复杂的工作。然而,虽然现在世界上已经充满了花样繁多的各种软件,但它们依然不能满足用户的各种特殊需要,人们还不得不开发适合自己特殊需求的软件。Java语言的出现迎合了人们对于应用程序跨平台运行的需要,已成为软件开发者应该掌握的一门基础语言,很多新的技术领域都涉及到了Java语言。目前无论是高校的计算机专业还是IT培训学校都将Java[1]作为主要的教学内容之一。

随着计算机技术的不断发展,网络技术的普及范围越来越广,网络能够提供的服务多样、便捷,已经成为人们生产生活中不可缺少的重要组成部分。如今网络休闲游戏发展迅速,它凭借健康、方便、互动性强、益智等诸多优点,成为大部分现代人休闲娱乐的首选。由此游戏是人们活动中一项非常重要的内容,可见电脑对游戏就有了非常大的贡献。现在摸过电脑的人很少有没玩过电脑游戏的,喜欢游戏的人也很少有不玩电脑的。

吃豆子有是一款风靡全球的电脑游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。它看似简单但却变化无穷,令人上瘾。相信大多数用户都还记得为它痴迷得茶不思饭不想的那个吃豆子游戏时代。究其历史,吃豆子游戏最早还是出现在PC机上,而我国的用户都是通过红白机了解、喜欢上它的。现在联众又将重新掀起这股让人沉迷的吃豆子游戏风潮。对一般用户来说,它的规则简单,容易上手,且游戏过程变化无穷,而现在的网络模式还增加了积分制,使用户既能感受到游戏中的乐趣,也给用户提供了一个展现自己高超技艺的场所。

吃豆子游戏可以说是随计算机的发展而发展,并不断推陈出新演变出各种类似游戏,

深受广大玩家喜爱。这个游戏有的简单, 有的复杂, 但其根本原理是一样的都是由运动的吃豆者和敌人互相追赶组成的, 这款游戏可以训练玩家的反应能力。谈到游戏软件, 大多数人都认为其神妙莫测, 高不可及。而一般游戏软件也确实具有很高的技术难度, 随着开发工具及软件开发方法学的不断发展, 动手开发游戏也不是十分困难的。而本设计中的吃豆子游戏是使用Java语言开发的一款游戏。它使用SOCKET[2]建立连接,多线程处理数据,以及可嵌入网络浏览器的ALET作为客户端,这些特点使这款游戏无论是服务器还是客户端的实现都相对容易。通过对该软件的编写,还可以巩固我们对以上各种知识的掌握和理解。

第 1 页 共41页

1

常州大学本科生毕业设计(论文)

1.2 国内外研究现状与发展趋势

2012年,小游戏绝对是一个热门的话题,因为小游戏具备太多的特点:它单机硬盘小游戏、文件体积小、内容简单、游戏关口少、易玩、好玩、易智[15];它的网站设计和制作针对不同人有不同的设计。针对青少年来说,它设计的界面颜色清晰和谐、文字简单明了、线条分割有序、图片短小精悍、导航明晰简便、内容充实丰富;针对上班族来说,它设计趋向于颜色舒适、易智、休闲等;针对手机一族,它会设计成针对不同手机型号有不同的版本。现在对于编程爱好者还会有网站免费为他们提供一些游戏编程的素材(语音、文字、图片、视频文件等),必要时可提供一些源代码。并且还会开设论坛,对他们进行必要的培训,同时可以从中吸收一些优秀人员。因此小游戏容易得到推广。

在中国,网页小游戏是有很大市场的。它最大的优势在于消磨时间,不需要下载客户端,有空上去看一下就成,非常方便,在收费方面也采用典型的道具收费,购买后可能是游戏加速,也可能是配备非常强大的装备或者更换更强劲的职业,应有尽有。但网页小游戏也有其局限,由于它的功能模块是交给服务器来实现的,版本更新交给服务器来做,多数缺点是表现力差,很多小游戏模式在实际中都无法实现(主要是服务器负荷问题)等。

在国外网页游戏游戏的黏人程度是远远超过一般网站。媒体报道,据美国市场研究机构Parks Associates近日公布的一份报告称,尽管网络视频和社交网站非常流行,但网页游戏仍然是美国网民最喜爱的娱乐方式。据数据显示,34%的美国成年网民每周都会玩网页游戏,而观看YouTube等视频网站的比例为29%,访问MySpace和Facebook等社交网站的比例为19%。所以网页小游戏在国外也占有一席之地。

近年来,网页游戏越来越有着这样一个趋势,就是由FLASH技术向Java技术的转变。

如国外的《RunesCape》刚开始它是将 Java程序下载到用户硬盘中,再从本地中进行打开,但是随着Java语言被web[3]广泛接受后,现在的浏览器均支持Java Applet,因此用户也可以在网页上运行《RunesCape》。

至此,不得不感叹Java程序在网页游戏中应用的强大而广泛,也看到网页游戏在向着Java技术的方向大步迈进,并且已经收到了比较明显的成效。

相关资料显示,2011年中国网页游戏的用户规模为250万人,艾瑞咨询预计未来用户规模将达到900万人,同比增长260%。保守估计,随后的三年中网页游戏的用户以每年500万人左右的速度增长,预计到2012年将突破2000万人,达到2020万人。网页游戏新产品不断面世,目前业内人士普遍看好网页游戏的发展前景。与11年相比,12年国内的网页游戏用户翻了2-3番。网页游戏进入门槛较低,吸引许多中小型团队加入研究和运营的行列。运营商与产品数量的急剧增加充分调动了整个网游市场,从而形成成倍增长的良好态势。

因此中国网游市场之大,潜力之足,用户群之广,只有研发适合中国用户的产品才能第 2 页 共41页

2

常州大学本科生毕业设计(论文)

扩大目标用户群,才能在这块市场里占据一席之地。在此有理由相信,在中国乃至全球网游的未来发展中,网页游戏从其重返网游市场之始,就已经注定了它在网游市场中必定占有一席位置,而以Java为核心技术的必定是网页游戏未来发展的重头戏。

1.3课题的意义及目的

随着人们生活质量的不断提高以及个人电脑和网络的普及,人们的业余生活质量要求也在不断提高,选择一款好玩,精美,画面和音质,品质优良的休闲游戏已经成为一种流行的休闲方式。可以说在人们的日常生活中,除了工作、学习,玩一款自己喜欢的游戏正在成为一种时尚。所以,开发出一款大家都比较喜欢的,高品质的休闲互动游戏,将会受到人们的普遍欢迎。让人们在工作学习之余,享受游戏的快乐,也是一款游戏真正成功的意义。

目前,各种各样的游戏层出不穷,利用各种语言编写的游戏也数不胜数,那么选择一个好的语言来编写游戏则显得尤为重要。那么,作为休闲互动游戏的先导语言——Java当然成为首选。Java语言能在企业中应用这么多年,事实证明了它非常适合于开发大型软件。当Java的运行效率不再是问题的时候,Java[4]语言严谨、高抽象、可读性强的优势就体现出来了。使用Java作为平台,极大的方便了游戏脚本的使用。对于游戏开发来说,由于涉及到比较复杂的情况,开发过程很多时候是一个不断修改的过程,可以方便的修改游戏内容是十分关键的。对于很多游戏引擎来说,都有自己编写的脚本解释器,用来解释一些自定义的游戏脚本语言。由于其虚拟机特性,Java本身就可以用来编写游戏脚本,这极大的方便了Java游戏编程。通过Java语言来开发的游戏具有可以在一个本地桌面系统下运行,也可以在玩野下运行的功能。

吃豆子游戏是一种古老而又有趣的游戏, 游戏软件不计其数, 网上就有好多关于实现的复杂算法和设计, 其难度让一般初学者望而却步。本课题就是利用数组作为地图的数据结构,提出一种用Java[5]语言实现的简易方法, 对初学者可仿此开发类似游戏, 并了解游戏软件的设计与开发过程。而通过这些开发的出来的吃豆子游戏是一种内容丰富,画面优美,益智类游的戏,并且不受网络的限制,让人们能够在任何时刻通过体验游戏,达到身心愉悦、放松心情。

本课题的目标是通过对本游戏的设计,综合自己在校期间所学的理论知识,设计开发吃豆子游戏,并使自己熟悉应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,初步掌握软件工程的系统理论,进一步巩固和加强自身对java基础知识的理解,提高自己的编程水平,从而达到理论与实践相结合的目的。

吃豆子游戏是基于以上目标而开发的。该游戏的最重要的目的是供用户休闲娱乐、益智有趣。本游戏的主要特点是:使用范围广,操作简单,无网络限制等。

第 3 页 共41页

3

常州大学本科生毕业设计(论文)

2可行性研究

2.1设计的目的

通过本游戏的设计,综合自己在校期间所学的理论知识,设计开发吃豆子游戏,使自己熟悉应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,初步掌握软件工程的系统理论,进一步巩固和加强自身对java基础知识的理解,提高自己的编程水平,从而达到理论与实践相结合的目的。

2.2 本设计的问题定义

基本要求:本游戏开发的总体任务是实现游戏的可操作性,以及界面的美观性。整个开发过程遵循软件工程规范,采用Java Apple[6]t编程来实现界面以及事件的控制,用户根据键盘的四个方向键控制翻转、向左、向右和向下操作,通过菜单栏中的相应菜单选项实现游戏的开始、结束、变换方向、积分等功能。

目标:通过本游戏的开发,主要实现游戏的可操作性以及美观性,同时使自己对Java语言的了解更进一层,为将来的实际工作打下坚实的基础。

条件、假定和限制:由于知识以及能力的限制,本游戏所实现的功能不够强大,可对本游戏进行改善,从而增强游戏的功能。

评价尺度:由于本软件是一个初级产品,对其要求不是太苛刻,所以能够达到吃豆子游戏的一般功能即可。

2.3可行性分析

2.3.1技术可行性

面向对象是一种认识世界的方法,是一种程序设计方法。面向对象的观点认为,客观世界是由各种各样的实体,即对象组成的。每种对象都有自己的内部状态和运动规律,不同对象间的相互联系和相互作用就构成了各种不同的系统,并进而构成整个客观世界。按照这样的思想设计程序,就是面向对象的程序设计。

面向对象的程序设计吸取了结构化程序设计的先进思想,并把它们同几个支持用户用新方法进行程序设计的有力概念结合在一起。

所有面向对象的程序设计语言一般都包含三个概念:封装、多态性和继承性。

这种方法要求语言必须具备抽象、封装、继承和多态性这几个关键要素。

面向对象的程序设计,是通过数据和代码建立分块的内存区域,以便提供对程序进行模块化的一种程序设计方法,这些模块可以被用作样板,在需要时再建立其副本。

C++[7]和Java在面向对象这方面比VB要强,所以我排除了用VB做的可能性。但是C++主观上在校期间学校并没有这方面的授课内容,虽然自学了一些内容,对C++也有一定了第 4 页 共41页

4

常州大学本科生毕业设计(论文)

解,但是若用C++实现,必定是基于windows[8]应用程序的Visual C++设计,对于windows编程,我还有待提高,而根据课题要求Java Applet能够满足网页小应用游戏的设计要求的掌握,因此综合考虑,决定采用Java语言编写吃豆子游戏。

2.3.2操作可行性

本课题设计的游戏需要在页面上打开,由此我们选择使用Java Applet来编写吃豆子游戏的代码。同时,选择Eclipse为本课题的开发工具是因为它含有大量的开发爱好者为其开发新的插件。前几种主流IDE的功能差别并不算大,针对不同的应用需求,开发者会选择最适合当前应用需求的开发工具来进行开发,实际上大多数的需求并没有对IDE提出太多的要求,既然Eclipse功能并不比别的IDE差,而且它是免费的。Eclipse集成了不同的软件开发工具产品,用户可以通过相同的接口使用不同的开发工具,这样以针对开发者自身的具体情形定制自身开发需要的工具,将更有利于本课题的开发。

3.设计所用软件及环境

3.1 Java语言简介

a) Java语言的历史

Java的诞生主要得益于对家用电器的芯片的研制。开始时,开发者想用C++语言来开发电器的芯片,但是,由于芯片的种类各不相同,因此,程序要进行多次编译。尤其是C++中的指针操作,稍有不慎,就会引起问题。程序可以出错误,但是家用电器不能出错误。为此,开发者将 C++[9]语言进行简化,去掉指针操作,去掉运算符重载,去掉C++中的多重继承,得掉了Java语言,将它变为一种解释执行的语言,并在每个芯片上装上一个Java语言虚拟机。刚开始时Java语言被称之为Oak[10]语言(橡树语言)。

WWW(万维网)的发展则进一步促进了Java的应用。刚开始时,WWW的发展比较缓慢,每个网页上面都是静态的画面,不能与用户进行动态交互操作。即使是后来的CGI(通用网关接口)也只有在服务器端运行,速度太慢,人们迫切需要能够在浏览器端与用户进行交互,并且使画面能够动起来,但是,WWW上的计算机各种各样,操作系统也是千差万别,后来人们想到了Oak语言,他是解释型执行语言,只要每台计算机的浏览器能够有他的虚拟机,Oak语言语言就可以运行,因此Oak语言发展起来,后来改名为Java语言,成为当前网络的流行的开发语言。

Java语言现在逐渐成熟起来,它的类已接近千个,无所不包,而且还可以通过第三方购买中间件,为Java语言的发展提供了良好的发展前景。同时它也是跨平台的语言,因此许多软件开发商及硬件开发商业争先恐后地想搭上Java语言的开车,都声称支持Java语言。

b) Java语言的优点

第 5 页 共41页

5

常州大学本科生毕业设计(论文)

①简单易学:Java语言虽然起源于C++,但是去掉了C++语言中难于掌握的指针操作,内存管理非常简单,如果要释放内存资料,你仅需要让其对象的引用等于null,这样就是操作变得异常简单。

②面向对象:Java是面向对象的编码语言。面向对象技术较好地解决了当今软件开发过程中新出现的种种传统面向过程语言所不能处理的问题,包括软件开发的规模扩大,升级加快,维护量增大以及开发分工日趋细化、专业化和标准化等。面向对象技术的核心是以更接近于人类思维的方式建立计算机模型,它利用类和对象的机制将数据与其上的操作封装在一起,并通过统一的接口与外界交互,是翻译现实世界实体的各个类在程序中能够独立、自治和继承。

③分布式:Java包括一个支持HTTP(超文本传输协议)和FTP(文件传输协议)等基于TCP/IP协议的子库。因此,Java应用程序可凭借URL[11](统一资源定位符)打开并访问网络上的对象,其访问本地文件系统几乎完全相同。为分布环境尤其是Internet提供动态内容无疑是一项非常宏大的工程,但Java的语法特性可很容易地实现这项目标。

④健壮性:Java致力于检查程序在编译和运行时的错误。类型检查可以检查出许多开发早起出现的错误。Java自行操纵内存,减少了内存出错的可能性。Java还实现了真数组。避免了覆盖数据的可能。这些功能特征大大缩短了开发Java应用程序的周期。Java提供Null指针检测数组便捷,进行异常出口字节代码校验。

⑤安全稳定:对网络上应用程序的里一个要求是较高的安全可靠性。用户通过网络获取并在本地运行的应用程序必须是可信赖的,不会充当病毒或者其他恶意操作的传播者而攻击本地的资源,同时它应该是稳定的,轻易不会产生死机等错误,使得用户乐于使用。

⑥平台无效性:Java[2]语言独特的运行机制使得它具有良好的二进制级的可移植性,利用Java,开发人员可以编写出与具体平台无关,普通适用的应用程序,大大降低了开发、维护和管理的开销,也就是一次编译,随处运行。

⑦支持多线程:多线程是当今软件开发技术的又一重要成果,已成功应用在操作系统和应用开发等多个领域。多线程技术允许同一个程序有两个或两个以上的执行线索,即同时做两件或多件事情,满足了一些复杂软件的需要。Java不但内置多线程功能,而且定义了一些用于建立、管理多线程的类和方法,使得开发具有多线程功能的程序变得简单、容易和有效。

⑧高性能:如果解释器速度不慢,Java可以在运行时直接将目标代码翻译成机器指令。Sun用直接解释器一秒钟内可调用300000个过程。翻译目标代码的速度与C/C++的性能没审美区别。

⑨动态性:Java的动态特性是其面向对象设计方法的扩展,它允许程序动态地装入运第 6 页 共41页

6

常州大学本科生毕业设计(论文)

行过程中需要的类。Java编译器将付好引用信息转换为数值偏移量。这样,一个存储器生成的对象不在编译过程中决定,而是延迟到运行时由解释器确定,这样对类中的变量和方法进行更新时就不至于印象现存的代码。解释执行字节码时,这种付好信息的查找和转换过程仅在一个新的名字出现时才进行一次,随后代码便可以全速这型。在运行时确定引用好处是可以使用已被更新的类,而不必担心会影响原有的代码。

c) Java虚拟机(JVM)[12]

Java程序要想运行,必须有Java虚拟机(JVM)。Java虚拟机是编译后的Java程序和硬件系统之间的接口,我们可以把Java虚拟机看成是一个虚拟的处理器,它可以执行编译后的Java指令,还可进行安全检查。Java虚拟机是在一台真正的计算机上用软件方式实现的一台假想机,其使用的代码存储在.class文件中。这样一来,利用Java虚拟机也便实现了与平台无关的特点,Java语言在不同平台上一年行驶不需要重新编译。Java虚拟机在执行字节码时,将其解释为具体平台上的机器指令执行。

因为Java的实用性强,优点多,所以针对现在多种多样的开发语言,利用Java语言来开发我们的游戏是个比较好的选择。

3.2 Eclipse基础

a) Eclipse简介

Eclipse是目前最流行的Java继承开发环境(IDE)[14],其集成的JDT Java编写、编译、调试环境在易用性、便捷性及效率方面已经远远超过了Borland的JBuilder,而且Eclipse由于其开源,免费获取及高扩展性的支持,使得从事Java开发的程序员和企业可以轻易获得Eclipse,而不像JBuilder一样需要支付使用费用,使用Eclipse来做日常开发支持。

作为Java集成开发环境(IDE),Eclipse作为Java的主流开发工具的地位在2005年就已经确立。除此之外,Eclipse平台是一个成熟的、精心设计的及可扩展的体系结构。Eclipse的价值还在于它为创建可扩展的集成开发环境提供了一个开放源代码的平台。Eclipse目前主要由4个项目组成,分别是Eclipse项目、Eclipse工具项目、Eclipse技术项目以及Eclipse Wwb工具平台项目,每个项目有一个项目管理委员会监督,使用GPL 1.0协议。Eclipse工具项目的主要任务是为Eclipse平台生产最好的构建工具;Eclipse技术项目的主要任务是考虑到Eclipse今后的发展,为平台培养后续的接班人;Eclipse Web工具平台项目的主要任务是提供更好的Web开发的平台以及工具。

b) Eclipse的体系结构

Eclipse体系结构的核心是动态发现插件。Eclipse由一个很小的核心和大量建立在核心之上的插件组成,核心本身仅仅负责基本环境的后台处理工作和提供标准的用户导航模型,而插件则专注于自身任务的处理。基于如此优良的设计及体系结构,就可以用插件在Eclipse第 7 页 共41页

7

常州大学本科生毕业设计(论文)

中实现任何想要实现的功能。

通过安装插件扩展已有软件功能的现象在日常生活中并不陌生。例如Web浏览器IE、Firefox任意一个都可以,其插件和Eclipse插件非常相似,都是要解决扩展性问题的。如果想既能浏览Flash[15]动画,又能浏览PDF文件,还可以播放音乐,就需要不同的插件保证不同内容能在Web浏览器中正确显示。而在Eclipse中,可能需要编译HTML问价、设计数据库、开发Java程序或者编写C++文件,因此就需要为实现这些功能安装不同的插件,即自定义需要的插件。

插件的运行方式是动态的,即在真正使用到这个插件的时候,这个插件才会被调入内存;而当插件不在被使用时,它就会在恰当的时候被清理出内存。因此不必担心随着插件安装数量的增加Eclipse运行时占用的内存也会增加。

①运行时内核:运行时内核负责所有已安装插件的发现和启动,并且常见关于插件的注册信息。内核在实际需要某种插件是才加载该插件。除了内核外,其他每样东西都是作为插件来实现的。内核使用扩展点来支持开发者添加其他文件类型,并且提供对定制安装的支持,插件使用描述清单向系统描述自身。

②工作空间:工作空间是负责管理用户资源的插件。这些资源包括用户创建的项目和其中的文件,以及文件变更和其他资源。工作空间还负责同志其他插件关于资源变更的信息,比如文件创建、删除或更改。

③工作台:工作台为Eclipse提供用户操作各种工具的界面,其目标是通过为创建、管理和导航“工作台”资源提供公共范例来获得无缝的工具集成。它是使用标准窗口工具包(SWT)和一个更高级的API(JFace)来构建的;SWT[16]是Java的Swing/AWT GUI API的非标准替代者,JFace则建立在SWT移植版本已经可用。

Eclipse对SWT的使用只会影响Eclipse自身的可移植性——使用Eclipse构建的任何Java应用程序都不会受到影响,除非它们使用SWT而不是Swing/AWT。

④团队支持:团队支持组件负责踢狗版本控制盒配置管理支持。它根据需要添加视图,使用户可以与其所使用的任何版本控制系统(如果有的话)交互。大多数插件都不需要与团队支持组件交互,除非插件提供版本控制服务。

小组开发的支持与工作台之间实现了无缝集成,Eclipse中提供了支持小组开发的透视图以及各种版本和配置管理的透视图。

⑤帮助:帮助组件具有与Eclipse平台本身相当的可扩展能力。与插件像Eclipse添加功能相同,帮助提供一个附加的导航结构,允许工具以HTML文件的形式添加文档。

Eclipse良好的体系结构非常值得借鉴,尤其是在开发高扩展性、通用性好的应用程序、软件以及系统的过程中。

第 8 页 共41页

8

常州大学本科生毕业设计(论文)

c) Eclipse 是开放源代码的软件

开放源代码软件是这样一种软件,它们在发布时附带了旨在确保将某些权利授予用户的许可证。当然,最明显的权利就是源代码必须可用,以便用户能自由地修改和再分发该软件。这种用户权利的保护是通过一种称为 copyleft 的策略来完成的:软件许可证主张版权保护,除非明确授予用户这样的权利,否则用户不得分发该软件。copyleft 还要求同一许可证涵盖任何被再分发的软件。这实际上倒置了版权的目的;使用版权来授予用户权利,而不是为软件的开发者保留版权;copyleft 经常被描述为;保留所有版权”。

曾经四处蔓延的对开放源代码软件的许多恐惧、担忧和疑虑,都与某些 copyleft 许可证的所谓的病毒、性质有关,如果使用开放源代码软件作为您开发的程序的一部分,您将失去自己的知识产权,因为该许可证将传染给开发的专有部分。换句话说,该许可证可能要求与开放源代码软件一起打包的所有软件,都必须在相同的许可证之下发布。虽然这对最著名的 copyleft 许可证来说可能是事实,当时还有其他许可证在商业化和社区考虑之间提供了较好的平衡。

开放源代码计划(Open Software Initiative)是一家非营利机构,它明确定义了开放源代码的含义及满足其标准的认证许可证。Eclipse 是在 OSI 认可的通用公共许可证(CPL)1.0 版之下被授予许可证的,CPL“旨在促进程序的商业化使用。

为 Eclipse 创建插件或将 Eclipse 用作软件开发应用程序基础的开发人员,需要发布他们在 CPL 下使用或修改的任何 Eclipse 代码,但是他们可以自由决定自己添加的代码的许可证授予方式。与出自 Eclipse 的软件一起打包的专有代码不需要作为开放源代码来授予许可证,该源代码也不需要提供给用户。

3.3 JDK环境

JDK(Java Development Kit) java开发工具包 其实学习java 除了学习面向对象的思维

就是学习这些工具包了 ,这里面的类接口等等 都给你准备好了,写程序的时候拿来用!简单的说:jdk为我们所编写的Java程序提供编译和运行的核心环境。

JDK[17]包含的基本组件包括:

javac – 编译器,将源程序转成字节码

jar – 打包工具,将相关的类文件打包成一个文件

javadoc – 文档生成器,从源码注释中提取文档

jdb – debugger,查错工具

java – 运行编译后的java程序(.class后缀的)

appletviewer:小程序浏览器,一种执行HTML文件上的Java小程序的Java浏览器。

Javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件。

第 9 页 共41页

9

常州大学本科生毕业设计(论文)

Javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。

Jconsole: Java进行系统调试和监控的工具

3.4 Applet基础

Java Applet是一类特殊的Java程序,通常称为Java小应用程序,它被嵌入在HTML语言中,一般具有解释Java能力的浏览器都可以运行,如:Internet Explorer和Netscape。含有Applet的网页被称为Java支持的网页,它提供了一种一旦用户需要客户端软件时,就可以自动地从服务器分发客户端软件给用户的方法。当用户获取了最新版本的客户端软件时,并不会有错误产生,而且也不需要很麻烦的重新安装过程。

a)Applet的工作原理:在浏览包含Java Applet的特点主要在于其执行方式的不同,Java应用程序的入口是main()方法,而Java Applet则不需要包含标准的main()方法。如图3-1所示:

图3-1Applet的工作原理图

b)Java Applet类的继承关系:Applet继承自AWT重的Panel类。因此,我们可以通过Applet程序实现图形的绘制、字体和颜色的变化以及动画和声音等效果的实现等。

Applet类为小应用程序的执行提供了所有必要的支持。它还提供了装载和显示图像的方法,以及装载和播放语音片段的方法。如图3-2所示:

ent

ner

第 10 页 共41页

10

常州大学本科生毕业设计(论文)

图3-2 Applet类的继承关系

表3-1Applet定义的方法

方法

AccessibleContext getAccessibleContext()

AppletContext getAppletContext

String getAppletInfo

AudioClip getAudioClip(URL url)

描述

为调用对象返回可访问的上下文

返回与此小应用程序相关的上下文关系

返回一个描述该小应用程序的字符串

返回一个AudioClip对象,它封装了在由url所指定的地方找到的音频片段

AudioClip get AudioClip(URL url,Sting 返回一个AudioClip对象,它封装了在由urlclipName) 所指定的地方找到的名为clipName的音频片段

URL getCodeBase()

URL getDocumentBase()

返回与调用小应用程序相关的URL

返回调用此小应用程序的HTML文档的URL

返回一个Image对象,它封装了在由url、所指定的位置找到的图像

Image getImage(URL url)

Image getImage(URL url,String imageName) 返回一个Image对象,它封装了在由url所指定的地方找到的名为imageName的图像

Local getLocal() 返回一个Local对象,它被许多对位置敏感第 11 页 共41页

11

常州大学本科生毕业设计(论文)

的类和方向使用

String getParameter(String paramName) 返回与paramName相关的参数。如果所指定的参数未能找到的话,则返回null

返回一个描述由该小应用程序所识别的参数的String二位数组。数组中的每一条必须包含三个字符串,分别包含了参数名,类型或范围描述以及用途说明

如果小应用程序已经启动则返回true。如果小应用程序被终止则返回false

返回一个AudioClip对象,它封装了在url所指定的位置找到的音频片段。此方法类似于get AudioClip(),除了它是静态的且无需Applet对象就可执行

如果在url指定的位置能找到一个音频片段的话,则此片段被播放

如果在url设定的位置能找到一个音频片段,且音频片段名为clipName的话,则此片段被播放

根据dim指定的尺寸调整小应用程序的大小。dimension是一个存储在中的类。它包含了两个整数域:width和height

根据width和height设定的尺寸调整小应用程序大小

Final void setStub(AppletStud stubObj) 使stubObj成为小应用程序的存根。此方法由实时运行系统使用并且通常不被小应用程序和浏览器之间的连接的小段化码

在浏览器或小应用程序阅读器的状态窗口显示str。如果浏览器不支持状态窗口,则无任String[][] getParameterInfo()

Boolean isActive()

static finalAudioClip

new AudioClip(URL url)

void play(URL url)

void play(URL url,StringclipName)

void resize(Dimension dim)

void resize(int width,int height)

viod showStatus(String str)

第 12 页 共41页

12

常州大学本科生毕业设计(论文)

务动作发生

c)Applet的生命周期

Java Applet的生命周期中,共有四种状态以及4个方法,它们分别是:int()、start()、stop()和destroy()。

①init()方法[14]:在小应用程序开始执行时被调用,它是任何小应用程序被调用的第一种方法,是初始化变量的地方。在Java Applet生命周期中,该方法只执行一次。该方法与构造方法有些类似,可以被重载。

②start()方法:多次执行,当浏览器从图标恢复成窗口,或者是返回该主页时执行,该方法是Applet的主体。其中可以执行一些任务或者启动相关的线程来执行任务。

③stop()方法:当Web浏览器刘凯包含小应用程序的HTML文件时,系统都会调用stop()方法,由此可见,和start ()方法相同,该方法也是可能被多次调用的。当用户不在关注Applet时,调用stop()方法可以停止部分小号系统资源的工作,以提高系统的运行速度。

④destroy()方法:当用户关闭浏览器时,小应用程序需要从内存中完全移除,系统就会调用destroy()方法,释放小应用程序用到的资源。读者应该已经注意到stop()方法和destroy()方法的关系,正如start()方法与init()方法的关系,在Applet整个生命周期中,destroy()方法仅仅被调用一次。

图3-3是Applet的生命周期图和继承关系图:

图3-3 Applet的生命周期图

d)Applet的安全问题

Applet是指在Web[2]浏览器中运行的小程序。Applet是作为网页的一部分被自动下载的。第 13 页 共41页

13

常州大学本科生毕业设计(论文)

当Applet被激活时,它便开始执行程序。

Java设计者在设计小应用程序时,考虑到它是从一个远程站点下载、在本地执行的,因此,安全成为人们不可忽视的问题。

①Applet沙盒:Applet的限制执行环境常常称作“沙盒”。Applet在沙盒中运行,也就是在计算机中预先划定的区域执行,不能更改或探查用户的系统,不能够从银盘中读写文件。当Applet在沙盒中运行时:Applet不能读写所在主机的文件系统;Applet不能运行任何本地可执行程序;Applet只能获得所在主机的一下信息:当前使用的Java版本,操作系统的名字和版本,用来分离文件、路径以及行的字符;Applet不能修改系统的属性;Applet弹出的所有窗口与标准窗口不同,都会带有一个警告消息,告诉用户这是一个Applet;因为Java解释器会检查所有的危险指令和程序区域,安全管理器会对其进行监督,所以一个带有敌意的Applet不能覆盖系统内存、改变操作系统赋予的特权或者使计算机崩溃。

②为Applet签名:由于Applet沙盒的存在,很多Applet程序在客户端被禁止直行某些操作,比如读写文件或者链接局域网等,由此看来,在某些情况下,这些限制显得过于严格。为允许在不同情况下使用不同的安全级别,Java引入了签名Applet:Java Plugin的发布,使Applet签名的过程变得更加简单和标准化。使用标准的Java工具,为Applet签名已经成为了相当简单的工作。Plugin不仅为Applet的签名和部署提供了标准方法,而且还通过自动安装证书使得最终用户使用起来更

第 14 页 共41页

14

常州大学本科生毕业设计(论文)

4需求分析

对软件需求分析就是通过调查研究,建立系统的数据模型、功能模型、行为模型,用户和开发人员在“系统必须做什么”这个问题上实现相互理解,达到共识,从而形成双方认可的软件产品的需求规格说明书。这样有益于提高软件开发过程中的能见度,便于对软件开发过程中的控制与管理,便于采用工程方法开发软件,提高软件的质量,便于开发人员、维护人员、管理人员之间的交流、协作,并作为工作成果的原始依据,并且在向潜在用户传递软件功能、性能需求,使其能够判断该软件是否与自己的需求相关。

4.1游戏需求

游戏设计中需要有个良好的用户界面。因此本游戏设计了三个界面,一是用于主游戏区的游戏画布,用来显示游戏时吃豆者和敌人的移动;二是用于控制游戏的各种控件以及显现游戏信息的一些组件,这是一个面板;三是进行网络对战时用以显示游戏的得分和生命值信息的面板。

根据游戏运行时的控制要求,本设计选择通过键盘方向键(上、下、左、右键)对吃豆者进行向上,向下、向左、向右的移动方式。而对于在运行时需要显示其得分,我们根据吃豆者吃豆子的个数和消灭敌人的个数对其进行分数统计,其次还需要有关于吃豆者生命值的显示,当敌人在攻击到吃豆者是必须降低吃豆者的生命值。

由于当声音进入画面可以加强画面内容,使画面上的视觉形象更加生动。声音可以交代故事情节,还可以通过声音表现动作,刻画人物的心态,这样更有利于烘托环境气氛,使静止的画面活动起来。因此为了加强游戏的动态性,需要给游戏配备音音乐效果,所以需要播放背景音乐和发生相应操作时的音效的功能。

为了增加游戏的趣味性,可以具备几种道具的使用功能,比如,这些道具可以是某些特殊的形态,比如,可定义一种大豆子让吃豆者吃了之后可以反击敌人;定义一些水果让吃豆者吃了之后提升生命值或者移动速度延长游戏时间。

4.2编程环境需求

一个游戏的开发应有一个调试可集成的系统开发平台。根据时代的发展,计算机的飞速发展,我们考虑了用户投资技术支持等诸多因素,故而选择java是一个相对较好的选择。它方便、简捷并且易学易懂。对此提出一个最低编程环境要求:

1) 硬件需求

 内存:512M以上

 CPU:p4 2.0处理器以上

 硬盘:320GB以上

第 15 页 共41页

15

常州大学本科生毕业设计(论文)

 显存:256M以上

交互工具:鼠标/键盘

2) 软件需求

 操作系统:windows XP

 编程语言:Java

 软件运行环境:jdk1.5、eclipse-SDK-3.7-win32

 浏览器软件:IE 6.0

4.4 接口控制

本游戏通过键盘进行操作,在Windows的操作系统下,利用键盘的上、下、左、右键对方块进行移动变形,要使用键盘的接口事件。

第 16 页 共41页

16

常州大学本科生毕业设计(论文)

5.概要设计

5.1游戏模块划分

吃豆子游戏的程序由文件、、、、、和六个文件组成。

(1)

包含名为Wall[3]的public类,其主要功能为根据墙的位置,绘制其图形。并通过其中的方法。返回墙壁的位置等属性。

(2)

包含名为Gold的public类,其主要功能为根据豆子的位置,绘制其图形,包括体积大和体积小的两种类型。并通过其中的方法,返回豆子的位置等属性。

(3)

包含名为Player的public类,其主要功能为初始化吃豆者的位置,张合角度以及前进速度。通过draw方法根据吃豆者在运动过程中的角度变化,以及移动后的位置坐标绘制吃豆者;通过move方法计算吃豆者的位置;通过ChangeDirection方法改变吃豆者的运动方向;通过stop方法令吃豆者停止运动;通过dead方法令游戏结束。

(4)

包含名为Enemy的public类,其主要功能为根据位置,状态初始化敌人。通过move方法确定敌人的移动方式,包括正常状态和失去放抗能力两种情况;通过draw方法绘制敌人。

(5)

包含名为Ticker的线程类,控制游戏的起始。

(6)

包含名为Packman的public类,其主要功能为初始化图形界面的布局,声音的播放,确定游戏规则。

如图5-1所示为本课题划分的六个模块:

第 17 页 共41页

17

常州大学本科生毕业设计(论文)

图5-1系统模块图

5.2游戏流程图

根据游戏运行顺序绘制流程图,见图5-2:

图5-2 游戏流程图

第 18 页 共41页

18

常州大学本科生毕业设计(论文)

5.3游戏地图算法流程图

有关图片的算法流程如图5-3所示:

(a) 图像发送流程 (b) 图像接收流程

图5-3 图像发送和接收流程图

第 19 页 共41页

19

常州大学本科生毕业设计(论文)

游戏音乐算法流程图

背景音乐播放控制的算法流程如图5-4所示:

开始

背景音乐播放控制线程

是否处在

是否接受到

暂停状态

恢复信息

播放背景音乐

接受到停止信息

结束

图5-4 背景音乐播放控制流程图

第 20 页 共41页

20

5.4

常州大学本科生毕业设计(论文)

6详细设计

6.1主界面设计

由于这个程序的界面并不是很复杂,所以用到的控件也不多,主要核心内容还是后台的代码设计。根据数组元素值,来显示图片。

①色彩上:总结人们的视觉习惯和色彩对眼睛的健康影响,决定对于画布采用黑色背景,神秘而大方;左边的控制区中墙体采用类似砖头的颜色的图片,配合左边纯黑的背景,是的空间显得更大更有立体感。

②功能上:背景就是窗体,右侧是一个groupbox[18]控件,用来显示生命值和得分情况,

游戏主界面截图,如图6-1所示:

图6-1开始界面

游戏主界面的程序,代码如下:

public class Packman extends JApplet implements KeyListener, ActionListener{

private Ticker t;//定义了一个ticker的对象t

private Image offScreenImage;//定义了一个图片对象offScreenImage

//定义吃豆者

private Player player;

//定义四个敌人

private Enemy Red, Cyan, Pink, Orange;

private int health, Scores; //健康值与分数

private boolean gameover; //游戏是否结束

第 21 页 共41页

21

常州大学本科生毕业设计(论文)

private boolean gameStarted; //游戏是否开始

private int alarmTime;//敌人失去反抗的时间

private boolean alarm;//是否失去反抗能力

private boolean UP_TYPED, DOWN_TYPED, LEFT_TYPED, RIGHT_TYPED;//是否能够向上,向下,向左,向右

private Image[] WALL; //定义墙

private AudioClip[] SOUND;//定义音乐

private Wall[] wall;//定义墙的数组

private Gold[] gold; //定义豆子的数组

private int gameFlow;

private boolean levelComplete;//是否升级

or();//设置颜色为白色

ring("生命: " + health + "%", 420, 84);

ring("积分: " + Scores, 420, 105);

if(!gameStarted){//游戏没开始

or();//绘制开始这几个字的颜色

ring(" 按空格开始", 153, 273);

}

if(gameover && gameFlow > 100){

or();

ring("游戏结束", 179, 238);

}

}

public void keyPressed(KeyEvent e)//定义一个键盘输入

if(Code() == _SPACE){

SOUND[6].play();

gameStarted = true; //点击“空格”,游戏开始

}

if(Code() == _UP){

Direction(0); //点击方向键,执行相应的操作

UP_TYPED = true;

DOWN_TYPED = false;

LEFT_TYPED = false;

RIGHT_TYPED = false;

第 22 页 共41页

22

常州大学本科生毕业设计(论文)

}

if(Code() == _DOWN){

Direction(1);

UP_TYPED = false;

DOWN_TYPED = true;

LEFT_TYPED = false;

RIGHT_TYPED = false;

}

if(Code() == _LEFT ){

Direction(2);

UP_TYPED = false;

DOWN_TYPED = false;

LEFT_TYPED = true;

RIGHT_TYPED = false;

}

if(Code() == _RIGHT){

Direction(3);

UP_TYPED = false;

DOWN_TYPED = false;

LEFT_TYPED = false;

RIGHT_TYPED = true;

}

}

public void keyReleased(KeyEvent e){}

public void keyTyped(KeyEvent e){}

public void update(Graphics g) {

Graphics offScreenGraphics;

if (offScreenImage == null) {

offScreenImage = createImage(545, 482); //返回创建一幅用于双缓冲的、可在屏幕外绘制的图像。

//如果组件是不可显示的,则返回值可能为 null。

}

offScreenGraphics = phics();

or();

ct(0, 0, 545, 482);

第 23 页 共41页

23

常州大学本科生毕业设计(论文)

}

paint(offScreenGraphics);

age(offScreenImage, 0, 0, this);

6.2本游戏的模块设计

6.2.1墙体绘制模块设计

通过Wall的public类,根据x、y[19]数组和图片索引构造实现墙体的绘制,见图6-2,代码如下:

}

public Wall(int a, int b, int c){

xPos = a;

yPos = b;

IndexOfImage = c;

wall = new Rectangle(xPos - 10, yPos - 10, 21, 21);

}

/**

* 返回墙的边界

*/

public Rectangle getWallBorder(){

return wall;

}

/**

* 返回图片索引构的值

*/

public int getImageIndex(){

return IndexOfImage;

}

public int getxPos(){

return xPos;

}

public int getyPos(){

return yPos;

}

第 24 页 共41页

24

常州大学本科生毕业设计(论文)

图6-2 墙体图

6.2.2豆子绘制模块设计

通过Gold的public类,根据x、y数组来设置中心位置和豆子的类型构造一个豆子的对象从而实现豆子的绘制,见图6-3,代码如下:

public void draw(Graphics g){

}

public Rectangle getBorder(){

图6-3使敌人丧失战斗力的大豆子和普通小豆子图片

return gold;

}

or();

//普通的小豆子

if(goldSpecies == 1){

}

//可以使敌人失去防抗能力的大豆子

if(goldSpecies == 2){

}

al(xPos - 4, yPos - 4, 9, 9);

al(xPos - 2, yPos - 2, 4, 4);

第 25 页 共41页

25

常州大学本科生毕业设计(论文)

6.2.3吃豆者的绘制模块设计

通过Player的public类,根据x、y数组来设置中心位置以及对吃豆者外观设置要求从而实现吃豆者的绘制,见图5-,代码如下:

public Player(){

xPos = 210;

yPos = 357;

xVPos = xPos;

yVPos = yPos;

direction = 2;

//构造一个新的 Rectangle,其左上角被指定为(xPos - 10, yPos - 5),而其宽度和高度为(11,11)。

}

public void draw(Graphics g){

int DirectionAngle = 180;

or();

if(direction == 0)

DirectionAngle = 90;

DirectionAngle = -90;

DirectionAngle = 180;

DirectionAngle = 0;

if(direction == 1)

if(direction == 2)

if(direction == 3)

if(dead)

第 26 页 共41页

26

player = new Rectangle(xPos - 10, yPos - 5, 11, 11);

//吃豆者的初始张开角度为30度

mouthDegree = 30;

//初始张合状态:张开

mouthOpen = true;

speed = 2;

常州大学本科生毕业设计(论文)

DirectionAngle = 90;

//填充覆盖指定矩形的圆弧或椭圆弧。

//得到的弧由(mouthDegree + DirectionAngle)并跨越(180 - mouthDegree)角度。

//弧的中心是矩形的中心,此矩形的原点为 (xPos - 10, yPos - 10),大小为(21, 21)

c(xPos - 10, yPos - 10, 21, 21, mouthDegree + DirectionAngle, 180 -

mouthDegree);

图6-4 吃豆者图片

6.2.4敌人绘制模块设计

通过Enemy的public类,根据x、y数组来设置中心位置,并敌人进牢笼和没进牢笼的两种状态需要有不同的颜色来以示区别的要求,来实现对敌人的绘制,代码如下:

if(gameFlow% 16 < 9){

int[] xPoints = {xPos - 5,

};

第 27 页 共41页

27

}

c(xPos - 10, yPos - 10, 21, 21, 180 + DirectionAngle, 180 - mouthDegree);

xPos - 9,

xPos - 9,

xPos - 6,

xPos,

xPos + 6,

xPos + 10,

xPos + 10,

xPos + 5,

常州大学本科生毕业设计(论文)

}

int[] yPoints = new int[] {yPos - 9,

};

yPos - 4,

yPos + 9,

yPos + 4,

yPos + 9,

yPos + 4,

yPos + 9,

yPos - 4,

yPos - 9,

Ghost = new Polygon (xPoints, yPoints, );

if(!alarm && !ghost){

}

//用图形上下文的当前颜色填充由指定的Polygon对象定义的多边形Ghost。

lygon(Ghost);

//如果敌人没有失去反抗能力,则用蓝色进行填充敌人的整体,用白色填充敌人的眼睛。

if(!alarm || ghost){

//填充敌人眼睛的白色部分

or();

al(xPos - 8, yPos - 5, 7, 8);

al(xPos + 2, yPos - 5, 7, 8);

//填充敌人眼睛中的蓝色十字部分

or();

if(direction == 0){

}

//使用当前颜色填充外接指定矩形框的椭圆。

al(xPos - 6, yPos - 4, 3, 4);

al(xPos + 4, yPos - 4, 3, 4);

第 28 页 共41页

28

常州大学本科生毕业设计(论文)

if(direction == 1){

al(xPos - 6, yPos - 2, 3, 4);

al(xPos + 4, yPos - 2, 3, 4);

}

if(direction == 2){

al(xPos - 7, yPos - 3, 3, 4);

al(xPos + 3, yPos - 3, 3, 4);

}

if(direction == 3){

al(xPos - 5, yPos - 3, 3, 4);

al(xPos + 5, yPos - 3, 3, 4);

}

}

//如果敌人失去反抗能力

if(alarm){

or();

//当敌人即将恢复攻击能力时,将其颜色显示为蓝色

if(alarmTime >= 231 && alarmTime%6 > 2)

or(ray);

lygon(Ghost);

or();

al(xPos - 6, yPos - 6, 5, 6);

al(xPos + 2, yPos - 6, 5, 6);

//在此图形上下文的坐标系统中,使用当前颜色(灰色),

//在点(xPos - 6, yPos + 3)和(xPos - 4, yPos + 1)之间画一条线。 ne(xPos - 6, yPos + 3, xPos - 4, yPos + 1);

ne(xPos - 4, yPos + 1, xPos - 2, yPos + 3);

ne(xPos - 2, yPos + 3, xPos, yPos + 1);

ne(xPos, yPos + 1, xPos + 2, yPos + 3);

ne(xPos + 2, yPos + 3, xPos + 4, yPos + 1);

ne(xPos + 4, yPos + 1, xPos + 6, yPos + 3);

第 29 页 共41页

29

常州大学本科生毕业设计(论文)

}

图6-5敌人图片

6.2.5 移动控制模块设计

使用键盘方向键对吃豆者的移动进行控制,其代码如下:

if(Code() == _UP){

Direction(0); //控制键盘向上移动的操作 UP_TYPED = true;

DOWN_TYPED = false;

LEFT_TYPED = false;

RIGHT_TYPED = false;

}

if(Code() == _DOWN){

Direction(1);//控制键盘向下移动的操作

UP_TYPED = false;

DOWN_TYPED = true;

LEFT_TYPED = false;

RIGHT_TYPED = false;

}

if(Code() == _LEFT ){

Direction(2); //控制键盘向左移动的操作 UP_TYPED = false;

DOWN_TYPED = false;

LEFT_TYPED = true;

RIGHT_TYPED = false;

}

if(Code() == _RIGHT){

Direction(3); //控制键盘向右移动的操作 UP_TYPED = false;

第 30 页 共41页

30

常州大学本科生毕业设计(论文)

DOWN_TYPED = false;

LEFT_TYPED = false;

RIGHT_TYPED = true;

}

}

public void keyReleased(KeyEvent e){}

public void keyTyped(KeyEvent e){}

public void update(Graphics g) {

Graphics offScreenGraphics;

if (offScreenImage == null) {

//返回创建一幅用于双缓冲的、可在屏幕外绘制的图像。

//如果组件是不可显示的,则返回值可能为 null。

offScreenImage = createImage(545, 482);

}

offScreenGraphics = phics();

or();

ct(0, 0, 545, 482);

paint(offScreenGraphics);

age(offScreenImage, 0, 0, this);

}

6.2.6水果模块设计

通过fruit包的public类,利用x、y数组来实现带水果的绘制,代码如下: interval = 63 + 21*((int)(()*10));

}//间隔时间的计算

//水果移动

if(direction == 0 && canMoveUp)

yPos-=1;

if(direction == 1 && canMoveDown)

yPos+=1;

if(direction == 2 && canMoveLeft)

xPos-=1;

if(direction == 3 && canMoveRight)

xPos+=1;

第 31 页 共41页

31

常州大学本科生毕业设计(论文)

if(direction == 2 && xPos < 0)

xPos = 420;

if(direction == 3 && xPos > 420)

xPos = 0;

Fruit = new Rectangle(xPos - 6, yPos - 6, 13, 13);

int a = (xPos - 10)/21;

int b = (xPos - 10)%21;

if(b < 6)

b = 0;

if(b > 16)

b = 21;

if(b < 17 && b > 5)

b = 11;

xVPos = a*21 + b + 10;

int c = (yPos - 10)/21;

int d = (yPos - 10)%21;

if(d < 6)

d = 0;

if(d > 16)

d = 21;

if(d < 17 && d > 5)

d = 11;

yVPos = c*21 + d + 10;

}

public void draw(Graphics g){

double y = yPos + + 3*((6*appearTime));

or (new Color (254, 184, 4));

al(xPos - 5, (int)(y - 5), 11, 11);

or (new Color (28, 232, 4));

ct(xPos - 5, (int)(y - 5), 3, 3);

ct(xPos - 7, (int)(y - 7), 3, 3);//水果的绘制和出现时间的设计第 32 页 共41页

32

常州大学本科生毕业设计(论文)

}

6.2.7 HTML文件引用模块设计

文件是引用HTML文件,其代码如下:

HEIGHT=482>

6.3音乐播放和墙体图片设计

6.3.1音乐播放设计

音频文件的播放涉及到IO[20]操作,不管是何种系统,对于IO操作,都是比较慢的,如果当程序运行到需要播放音效时,再从文件中取得音频数据,然后播放,很可能会造成一种“卡”的感觉,影响用户体验。基于此,经过反复论证,本游戏决定采用以剪辑的方式来播放音频文件。

Java语言中的剪辑Clip,是一种在播放之前就提前加载于内存中的特殊的音频数据流,当需要用时,只需直接从内存中调出即可,省去了IO读取所需的大量时间,而且剪辑播放完毕后,仍旧存储在内存中,对于游戏的背景音乐及音效这类需要反复多次播放的音频,这种方式是非常有用的。

单单采用剪辑还是不够的,音频文件的播放,应当另外开启线程来控制,这样既可以更方便地控制音频的播放、暂停等操作,也不会程序执行其它的操作。

①音效播放

在游戏开始、暂停,方块落下及消行时添加相应的音效既可以提醒用户发生某种变化,又能增强程序的表现效果。音效,相对来说是比较小的音频文件,对于音效,可选取wav格式的音频文件,不但音频质量好,在系统支持、存储性方面也占有优势。

根据多线程及剪辑的思想,首先在程序初始化时应该把音效载入内存,游戏开始后开启一个线程,当满足音效播放的条件时,即播放音效,音效播放完毕后,应当将相应的音频文件的剪辑位置重新置为开始处。

②背景音乐播放

同音效的播放,背景音乐的播放也应当采用剪辑的形式,以方便音乐的循环多次播放,同样,背景音乐播放可能是贯穿于整个游戏过程,背景音乐的播放必须采用单独的线程控第 33 页 共41页

33

常州大学本科生毕业设计(论文)

制,以不影响程序执行其它操作。

因为背景音乐采用单独线程播放,这里面会出现一个问题,当用户选择暂停背景音乐播放时,背景音乐播放线程是进入wait状态还是以另一种方式实现暂停?如果背景音乐进入wait状态,则当用户取消暂停播放时,必须再创建一个线程去唤醒它,新建一个线程只是控制背景音乐播放,不免浪费资源,而且也增加程序编写难度。

考虑到背景音乐极可能在玩家的整个游戏过程中都处在播放状态,当暂停时,玩家也随时会取消暂停,故而在游戏结束之前,本程序会将背景音乐播放线程一直处在执行状态,如果玩家暂停音乐播放,则让线程转去处理检测玩家是否取消暂停,当检测到暂停取消后,继续播放音乐。

6.3.2游戏地图设计

游戏地图的绘制是用一个二维数组来存放地图信息,本设计使用6个不同的数,他们分别代表了地图中的各类元素,通过一个双循环来判断出在屏幕的哪些位置上应该绘制哪些元素,为了使游戏界面简约朴素,视觉舒适,本设计中使用更加立体的砖块墙体,配合黑色的背景色,看起来非常好看。

根据游戏设计,需要考虑到本游戏嵌入了吃豆者越界自动纠正功能,而吃豆者越界,实际上就是游戏地图数组越界。当发生翻转时,吃豆者可能移动至游戏地图外,在这种情况下,就发生了游戏地图数组越界,Java异常处理系统会抛出,为避免这种情况的发生,游戏地图数组应当适当增大,故本游戏将地图数组长度和宽度各扩大了三个单位。本游戏的墙体图片是根据对于接收端接收到的数据包,可以先从数据包中提取出图像,然后将图像画到游戏画布中。

6.4游戏界面截图

图6-6游戏开发类图

第 34 页 共41页

34

常州大学本科生毕业设计(论文)

图6-7 游戏开始界面

图6-8 游戏运行界面

图6-8 游戏结束界面

第 35 页 共41页

35

常州大学本科生毕业设计(论文)

7软件测试

7.1 吃豆子游戏的测试内容

软件测试是软件工程中及其重要的一个环节,目的是保证软件的质量。测试的好坏将直接影响软件的好坏,进行测试可以找出其中的错误及不足加以改进,从而得到一个高效、可靠的系统。进行软件测试主要作用有以下几点:

1)软件测试是为了发现程序中的错误而执行程序的过程。

2)好的软件测试方案是极可能发现尚未发生错误的方法。

3)程序的测试是发现了至今尚未发现的错误。

软件应从多角度进行测试和分析,这样才能找出其中错误的地方。测试的时间最好找一些与设计系统无关的人员,或者分析人员。因为在开发软件的时候,开发人员已经形成了自己的思维定势,在测试的时候始终受到这种思想的束缚,很难找出其中的错误而与设计无关的人员和那些分析人员很容易找出错误所在。

在程序调试过程中一定要耐心仔细,一个细微的错误将会导致整个功能不能实现会浪费很多的时间来修改。应在以下几方面加以注意:

·语法错误

语法错误是经常碰到的错误。例如,命令拼写错误或传递给函数的参数不正确都将产生错误。语法错误可能导致不能继续编写代码。

·逻辑错误

逻辑错误通常可能是潜在和难以检测的。当有因键入错误或程序逻辑流程引起的逻辑错误,可能会成功运行,但产生的结果却是错的。例如,当本应使用小于符号比较数值,但却使用了大于符号时,那么将返回不正确的结果。

·运行时错误

运行时错误是在执行过程中指令试图执行不可能的动作而导致的,必须纠正运行时产生的错误,这样才能保证软件运行的可靠性。

本游戏在开发过程中采用了多种有效的措施保证软件质量,例如,边界处旋转、游戏翻转越界纠,等等,极大地方便了用户操作,但是系统中通常可能还存在着一些错误和缺陷,因此,游戏必须要经过反复的运行测试,尽最大量将bug减到最少。

7.2吃豆子游戏的测试步骤

本游戏的测试划分为单元测试、集成测试、确认测试和系统测试,本游戏将以这四个步骤进行测试。

①单元测试

第 36 页 共41页

36

常州大学本科生毕业设计(论文)

单元测试又称为模块测试,是针对软件设计的最小单位——程序模块进行正确性检验的测试工作。其目的在于发现各模块内部可能存在的各种差错。可以应用人工测试和计算机测试两种不同类型的测试方法。

单元测试需要从程序的内部结构出发设计测试用例,即采用白盒测试技术。多个模块可以平行独立地进行测试。

在这个测试过程中所发现的往往是编码和详细设计中的错误。传统的最小可编译单元通常指模块、函数或子程序等,而在面向对象技术中通常是指类。

单元测试的重点是模块接口测试、局部数据结构测试、重要的执行通路测试、出错处理通路测试、边界条件测试。

②集成测试

集成测试分为子系统测试和系统测试。

子系统测试是把经过测试运行正常的模块放在一起形成子系统后再测试。这个步骤着重测试模块的接口,测试模块之间能否相互斜体哦以及通信时有无问题。

系统测试就是把经过测试运行正常的子系统组装成完整的系统后再进行测试。系统测试是测试整个软件和硬件系统,验证系统是否满足规定的要求。这个阶段发现的问题往往是需求说明和软件系统设计时产生的错误。

一般,集成测试采用渐增式组装方法组装系统,渐增式组装方式有自顶向下和自底向上两种继承策略。

自顶向下集成是从主模块开始,沿着程序的控制层次向下移动,逐渐把哥哥模块结合起来。在把附属于主模块的那些模块组装到程序结构中去时,或者使用深度优先的策略,或者使用宽度优先策略。

深度优先策略是先组装在软件结构的一条主控制通路上的所有模块。选取一条主控制通路取决于应用的特点,并且有很大的任意性。而宽度优先的结合方法是沿软件结构水平地移动,把处于同一个控制层次上的所有模块组装起来。

自底向上集成从原子模块开始组装和测试。因为是从底部向上结合模块,总能得到所需的下层模块处理功能,所有不需要存根模块。

③确认测试

确认测试是在软件开发过程结束时对软件进行评价,以确认它和软件需求是否一致的过程。确认测试也称验收测试,其目标是验证软件的有效性。

④系统测试

系统测试,是将通过确认测试的软件作为真个基于计算机系统的一个元素,与计算硬件、外设、某些支持软件、数据和人员等其它系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的组装测试和确认测试。

第 37 页 共41页

37

常州大学本科生毕业设计(论文)

系统测试的目的在于与系统的需求定义进行比较,发现软件与系统定义不符合或与之矛盾的地方。系统测试的测试用例应根据需求分析规格说明来设计,并在实际使用环境下运行。

7.3吃豆子游戏的测试项目

7.3.1游戏界面菜单选项的功能测试

“Applet”菜单测试,见表7-1:

表7-1 点击Applet菜单的测试结果表

点击“Applet”

输出

结果

7.3.2按键事件的功能测试

吃豆者移动测试,见表7-2:

启动

游戏开始

正常

停止

游戏关闭

正常

重新载入

游戏重新开始

正常

表7-2吃豆者移动测试表

键盘方向键

输出

上方向键 下方向键 左方向键 右方向键

吃豆者正常移吃豆者正常移吃豆者正常移吃豆者正常移动,不会移出边动,不会移出边动,不会移出边动,不会移出边界 界 界 界

正常 正常 正常 正常 结果

7.3.3无敌状态测试

表7-3 无敌状态测试表

吃到大豆子情况

输出

吃到大豆子 未吃到大豆子

敌人变色,速度减慢,吃豆者敌人继续追击吃豆者

为无敌状态

第 38 页 共41页

38

常州大学本科生毕业设计(论文)

结果

正常

正常

7.4测试结果分析

经过测试,本游戏实现了基本的功能,不过整体功能还不是很强大,作为第一次开发的游戏,本游戏在很多方面还需要进一步完善。例如:水果出现的时间太久,界面设置的不够华丽,没有多人对战功能等。希望本游戏今后能够逐渐完善和扩充更加丰富的内容。

8总 结

本次毕业设计任务是基于Java开发的吃豆子游戏。本课题的目标是让用户在闲暇时玩吃豆子游戏能够打发多余时间并让用户觉得有趣不乏味同时开发用户的逻辑思考能力。在这次的毕业设计完成目标的过程也提升自己的编程水平。

游戏的设计与实践是一项复杂而且庞大的工作,在选题之后,由于之前没有接触过游戏设计所以针对本设计的前期工作做了一下分配。第一步,通过看书和在网上查找寻找相关资料来确定使用何种语言来编写程序,通过比较后我选择了Java作为本设计的编写程序语言,同时Java需要在JDK环境下编写同时免除找插件的麻烦,由此选择了Eclipse做开发平台;第二步,根据设计需要选择地图图片,期间去要Photoshop7.0等制图软件,对图片进行剪切和设计;第三步,针对音乐对于一个游戏的重要性,通过一些网站寻找适合的背景音乐并且需要利用音频软件进行剪辑。

本次设计初步涉及到了电子游戏所涉及到的有关技术、方法,包括电子游戏分类、选题、构思等。并实现几个可演示的游戏软件,其中有很多应用了学习的相关技术,并且做到了图、文、声并茂,能实际演示。此次设计过程中最重要的三方面:

1)在游戏设计的过程中需要老知识的融合使用,同时也涉及到了很多新知识,这需要不断查阅资料来对游戏内容进行添加和修改。经过长时间的学习与实践,最终才能使用Java语言来对游戏进行代码的编写。

2)本设计是需要不断上机实验,调试程序,总结经验这几步来完成的。在这上机实验的过程中要提出问题并想办法解决问题,能够多多实践,增强动手能力。

3)这次毕业设计过程中查阅了很多资料,不但有中文资料还有英文资料。这些资料的搜索过程考验了中、英文资料的检索能力,因此对课题的认识才能更加深刻,编写程序的时候思路更加清楚。

经过编写这个吃豆子游戏,认识许多细节问题需要注意,例如,游戏界面的设计及整体的布局比较简单,没有突出特色出来,游戏内容不丰富,只能满足用户的基本需求。除此之外对于java语言运用还有些不到位。这些是本次游戏设计的不足之处。

第 39 页 共41页

39

常州大学本科生毕业设计(论文)

致 谢

毕业设计是大学里的最后一堂课,从开始进入课题研究到论文顺利完成的两个周的时间里,我经历了大学期间最为难忘的一段时光。在这段时间里,我学到了很多以前不曾接触的东西,这两个月经历对我未来的人生都会有很大的帮助和影响。

首先衷心感谢我的校外指导老师于俊勤老师和校内指导老师顾晓清老师给予我的无微不至的关怀和细心的指导。在设计过程中老师们为我们提出了许多宝贵的意见和建议,在此我要由衷的向老师致以最衷心的感谢和深深的敬意。

在此过程中同学们也给予我很大帮助,感谢我的同学们。在我遇到的一个又一个问题时同学们都热心的帮助我,帮我分析和我探讨,提出了许多解决问题的好方法和建议,使我最终解决了一个又一个问题,感谢我的同学们。

由于我的学识有限,加之时间仓促,文中不免有错误和待改,不足之处,真诚欢迎各位师长、同学提出宝贵意见。最后,祝愿所有的教师和同学们,愿你们身体健康,工作顺利

第 40 页 共41页

40

常州大学本科生毕业设计(论文)

参 考 文 献

[1]张广彬.孟红蕊.张永宝.Java课程设计案例精编[M].清华大学出版社.2007

[2]荣钦科技.Java游戏程序设计[M].北京科海电子出版社.2003

[3]Ivor 2入门经典[M].北京机械工业出版社.2006

[4]杜江.Java2实用教程[M].电子工业出版社,2006

[5]Roger E. Design Foundations[M].Wordware Publishing.2003

[6]林建素.孟康健.Eclipse开发[M].电子工业出版社.2008

[7]张磊.丁香乾.Java Web程序设计[M].电子工业出版社.2011

[8]王红.卫聂阳.杨猛.PS抠图秘技[M].机械工业出版社, 2011

[9]Dejan 脚本编程:语言、框架与模式[M].机械工业出版社.2008

[10]朱仲杰.Java SE6全方位学习[M].机械工业出版社.2008

[11]郎波.Java语言程序设计[M].清华大学出版社.2005

[12]H. M. Deitel, P. J. how to program[M].电子工业出版社.2008

[13]颜志军.栾媛媛.Java程序设计实践教程[M].清华大学出版社.2011

[14]于俊乐.图形图像设计教程[M].清华大学出版社.2005

[15]David Wallace 游戏高级编程[M].电子工业出版社.2005

[16] 孙一林.彭波. Java程序设计案例教程[M]. 机械工业出版社.2011

[17] 张红梅. Java应用案例教程[M].清华大学出版社.2010

[18] 金保华. Java程序设计实用教程[M]. 科学出版社.2010

[19] John R. 程序设计学习指导与习题解答[M].清华大学出版社.2010

[20] 张振领.Java语言程序设计[M].中国电力出版社.2009

第 41 页 共41页

41


本文标签: 游戏 设计 开发