基于 Java 的愤怒的小鸟游戏的设计与实现

点击下载源码

基于Java的愤怒的小鸟游戏的设计与实现

摘要
Java语言是一门面向对象的编程语言,它不但汲取了C++语言的各种精髓,而且还抛弃了C++语言里晦涩难懂的多继承和指针等概念,所以Java语言具有的特征便是:功能超强和易用实用。
Jbox2D中不仅集成了大量物理运动学和机械运动学计算,而且也将物理仿真包集成到类对象中,同时对象也应用在开发人员与用户的交互界面中。所以我们只需要调用对象或者使用相应的功能,就可以模拟出现实生活中的速度、加速度、抛物线运动、重力、碰撞、反弹等各种各样真实的物理运动。
愤怒的小鸟游戏的视角是横向版本的水平视角。背景是为了报复偷鸡蛋的猪,鸟将自己的身体作为武器,就像炮弹一样从弹弓上发射而出,撞向绿猪搭建的堡垒,以达到摧毁绿猪的目的。游戏非常简单,小鸟跳上弹弓,发射角度和强度的改变导致小鸟的落点的不同,玩家需要良好的整体计算,适当的调节强度和角度,从而更准确地击中绿猪。每次击中绿猪,便可获得一定的分数,积累足够的分数便可以通关,游戏设计的体现了放松的情调,乐观的风格。
本文将介绍使用Java语言实现经典的益智类游戏作品“愤怒的小鸟”的开发。游戏将主要实现以下几个功能:游戏玩法功能、页面管理功能、难度和级别功能、碰撞功能、鸟类管理功能、玩家管理功能和备份功能等。此游戏不仅可以给玩家带来欢乐,也会使玩家对开发游戏产生极大地兴趣,让玩家切身体会到Java语言在生活方面的无处不在。
关键词: Java;C++;Jbox2D;物理运动;愤怒的小鸟

目录
摘要 i
Abstract ii
1 绪论 1
1.1 游戏开发的背景 1
1.2 典型的Java游戏介绍 1
1.2.1 Minecraft介绍 1
1.2.2 Super Mario Bros介绍 2
1.2.3 The Sims介绍 3
1.3 游戏开发的意义 3
2 开发环境 4
2.1 开发语言 4
2.2 开发工具 5
2.3 JDK介绍 5
2.4 Java Awt介绍 6
2.5 Java Swing 介绍 7
2.6 Java语言开发平台搭建 9
3系统需求分析 11
3.1 可行性分析 11
3.1.1 技术可行性 11
3.1.2 经济可行性 11
3.1.3 操作可行性 11
3.1.4 发展可行性 12
3.2 性能需求分析 12
3.3 功能需求分析 12
3.4 系统UML分析 13
3.5界面需求分析 14
4 系统设计 16
4.1系统流程设计 16
4.2 系统架构设计 17
5 详细设计 20
5.1 主界面实现 20
5.2 游戏玩法实现 22
5.3 面板管理功能实现 26
5.4 等级、级别管理功能实现 28
5.5 碰撞管理功能实现 32
5.6 鸟类管理功能实现 35
5.7 胜利管理功能实现 38
5.8 玩家管理和备份管理功能实现 40
6 系统测试 44
6.1系统测试简介 44
6.2 系统测试方法 45
6.3 本系统测试 45
6.3.1 测试用例设计 45
6.3.2 测试方法和结论 46
结论 47
参考文献 48
致  谢 49
附录 50
外文原文 50
中文原文 55

1 绪论
1.1 游戏开发的背景
游戏如今已经成为人们生活中不可或缺的一部分,无论是处于童趣中的小孩、还是繁忙工作中的成人,游戏无疑在每一个人生活中起着非常重要的调剂作用。不管是实体玩具还是如今的电子游戏,它们都能给我们留下很多美好的回忆。
本人对Java语言有很大的兴趣爱好,大学期间便对其一直进行学习,而且游戏的制作同时也是我非常感兴趣的一个方面,在此之前也进行过一些小游戏的开发。经此次毕业设计机会,使得我想在专业导师的指导下通过这次毕业设计,来提高自己的Java语言水平,为以后的工作打下坚实的语言基础。
游戏名称是“愤怒的小鸟”,英文称为“AngryBird”。 “愤怒的小鸟”是著名游戏公司Rovio偶然间开发出来的益智游戏,从2009年12月上市到iOS。,讲述了鸟类和猪因为猪偷鸟蛋反生的一系列故事。游戏的类型版本是横向版本的水平视角,背景是为了报复偷鸡蛋的猪,鸟将自己的身体作为武器,就像炮弹一样从弹弓射出抛到绿猪搭建的堡垒,并将其摧毁。 游戏非常简单,小鸟跳上弹弓,发射角度和强度由玩家的自行控制,游戏中需要良好的整体计算,适当的调节强度和角度,从而更精确地击中猪。每次击中更多的绿猪,将获得大量的分数。游戏风格充满乐趣和幽默,游戏设计的体现了放松的情调,乐观的风格。
愤怒的小鸟这款游戏内容包含着丰富的人机交互:不管游戏本身设计的难度如何,只要玩家学会基本的游戏使用方法,大多数人都可以经过不断训练来打到通关这一目的。这一款益智类游戏的开发,目的是为了使人们更多了解物理引擎游戏所带来的与众不同。在今天如此复杂多样的游戏环境中,这一款游戏所带来的新鲜感让人为之疯狂,极大展现了Java语言在开发物理运动游戏方面独有的魅力,也极大促进了Java语言在游戏方面的发展。
1.2 典型的Java游戏介绍
1.2.1 Minecraft介绍
Minecraft是近乎是沙盒游戏的鼻祖,是由瑞典Mojang AB公司和4J Studios联合开发,发行于2009年,最后在2014年冬季被microsoft以25亿美金收购。

图1-1 minecraft
1.2.2 Super Mario Bros介绍
Super Mario Bros是任天堂游戏公司开发的,相信我们小时候都玩过这一款游戏,它几乎是所有红白机游戏中最畅销的一款,游戏风格是横版过关类型,这个游戏几乎移植到了所有已知的游戏平台,为游戏爱好者广泛而知。

图1-2 Super Mario Bros

1.2.3 The Sims介绍
这是一款由Electronic Arts,简称EA开发的以模拟一个人生活中各种事情为主的模拟养成类游戏,。在这个模拟的世界中,玩家可以操作游戏人物进行近乎于现实生活的行动,仿造真实的情境,控制生理和精神的需求。

图1-3 The Sims

1.3 游戏开发的意义
随着计算机科学的发展,游戏的发展已经取得非常显著的成果。图形计算、应用数学、数据结构、算法设计,甚至网络安全都已经应用在强大的游戏引擎中,而且由于快速做出原型是游戏开发的重要组成部分,所以应该学习如何高效率编写可重用的代码是一个很值得关注的问题。即使游戏没有为他人做出贡献,但至少它给了我很多的灵感,让我认识到作为一个程序员的兴趣所在,我可以继续为未来所需的知识量而努力。况且,游戏已经影响到人类生活的方方面面,成为生活不可或缺的一部分。甚至来说,游戏作为一种产业,已经跻身到互联网这个巨大的利益链的前列。目前,中国的游戏产业已然成为一个新的经济增长,极大地刺激了中国经济的发展,成为了中国六大支柱产业之一。
游戏的发展不仅带来了经济的利益,同时也极大地丰富了人类的生活,增强人们的幸福感,但游戏也存在不可避免的弊端,所以积极宣传中国传统文化,引导青少年健康游戏、快乐游戏应该是,每个游戏工作者的责任和义务。

2 开发环境
2.1 开发语言
Java语言是一种面向对象的编程语言,它不仅拥有着C++语言的长处,而且也将C++中的多重继承和指针等概念进行摒弃,Java语言不仅具有易用实用的特征,同时也是一种功能强大的编程语言。
Java语言的特征大致可以分为以下一些:简单性、面向对象、分布式开发、稳健性、安全性、平台独立性、可移植性和多线程以及动态特性。这些特性以及Java语言本身的强大,是Java语言得以风靡全球的根本原因。
Java语言从外部看起来确实很像C++语言,但是为了使Java语言不那么晦涩难懂和难于学习,开发设计人员将很多原本用于C++语言的功能进行选择性删除。比如:Java语言将重载和多个继承功能中的重载运算符排除在外,并且去除主文件,从而消除了预处理器。再由于Java语言准确的是没有结构的,并且字符串数组是对象,所以指针存在也是不必要的。去除C++语言的糟粕后,Java语言可以自动管理参考对象和间接引用、自动垃圾收集,这些功能都可由使用户不必担心内存管理问题,从在将更多的时间和精力投入到研发开发当中,无疑是大大提升了编程开发效率。
如图2-1为Java语言总体特点:

图2-1 Java语言特点
由于Java语言是面向对象的语言。所以对于程序员来说,这意味着数据必须在方法中声明和操纵,笼统来说,程序员只需要学习对方法的熟悉和使用,而不是严格的创造方法过程。Java语言的特点使得语句不单单依赖于实现的方面,这种特殊的特点使得Java环境本身对新的硬件平台和操作系统是可移植的,并且起重要作用的Java编译器也是用Java语言所编写的,而且还包括用ANSIC语言编写的Java运行时系统。Java语言旨在适应进化,这说明它是一种动态语言。
由于Java语言的本质,Java游戏不会受到太多来自软件运行平台的诸多限制。假如我们以Java语言进行开发时,哪怕要重新编译成千上万个类,也只不过是花费很少的时间便可以办到的事情,这是CPP编译速度所无法企及的。而Java语言语法在一定程度上要比C语言或者C++语言简洁方便很多,开发者只需要掌握一些基本语法,久而久之的学习,绝大多数人都可以使用Java语言轻易地进行开发程序。本文将以电脑为基础,采用Java语言来编写一款叫做“愤怒的小鸟”的游戏。

2.2 开发工具
Eclipse是一个将源代码的开放、基于Java语言的具有可扩展性的编程开发平台。就其本身而言,它仅仅只有一个框架与一组服务,将其通过插件组件来构建成一个开发环境。比较需要注意的是,Eclipse 还附带着一个标准的插件集,插件集中包含了各种开发工具,比如用于Java语言开发的Java开发工具(Java Development Kit,JDK)。Eclipse是著名的跨平台开发环境和自由集成开发环境的组合。它最初主要是用于Java语言的开发,在Eclipse中通过安装不同的插件,使得Eclipse具有可以支持不同的计算机语言的特性,比如C++语言和Python语言等开发语言。Eclipse简单来说,它本身仅仅只是一个框架平台,但是各种各样插件的支持使得Eclipse具有其他功能死板IDE软件所难以拥有的方便灵动性,这一特性让许多软件开发公司都将以Eclipse作为基本框架来开发属于自己的IDE。
Eclipse起始于1999年4月,它最开始是由OTI和IBM这两家巨头公司的IDE产品开发项目组合力创建,。Eclipse基础代码最初是由IBM提供的,其中包括JDT 、PDE 和Platform。Eclipse项目经由IBM发起,经过这么多年的发展, Eclipse这一当初小小的项目已然发展成为了一个巨大的Eclipse联盟,目前为止,大概有140多家软件公司先后参与到Eclipse开发项目中,其中包括Red Hat和Sybase等公司。Eclipse本身作为一个开源的项目,它的初衷作为是作为Visual Age for Java的替代品,所以Eclipse的界面效果与早期版本的Visual Age for Java相差不大,后来随着开放源代码,任何开发人员不仅可以免费得到Eclipse,而且可以在它的基础上进行各自插件的开发,这一缘由导致Eclipse受到越来越多的人的欢迎。在此之后还有包括Oracle等在内的许多软件大公司也先后加入了该项目,使得Eclipse到目前为止已经成为任何语言开发的IDE集成者,也是Java语言开发使用最广泛的平台。

2.3 JDK介绍
JDK是Java语言的软件开发工具包(Java Development Kit),它在java语言开发中占有核心的地位,它包括Java的运行环境,java的基本工具和java的基础库等。
JDK包含的基本组件包括:
javac 编译器:javac编译器自动读取由java语言编写而成的类和接口的定义等,并将它们编译成字节代码(class文件)。
jar打包工具:将相关的类文件整合为一个文件
javadoc文档生成器:从源码中将注释提取为一个文档
jdb debugger:调试工具
jav:可将编译后的java程序(.class后缀的程序)运行
appletviewer:可在脱机环境的情况下运行applet。
Javah:创建一个可以被Java程序所调用的C过程的头文件。
Javap:一种进行反编译的工具。
Jconsole: Java中可以对系统进行监控和调试的工具。如下图2-2所示:

图2-2 JDK基本组成
2.4 Java Awt介绍
AWT(Abstract Window Toolkit),中文翻译是:抽象窗口工具包,该包提供了一个GUI交互的接口,Java提供了用于创建和配置Java GUI的基本工具。AWT中图形操作函数与系统中图形功能之间提供了一对一的关系,称为peeres,当开发者使用AWT编写图形用户界面时,实际上是使用本地操作系统所提供的图形库。由于各种操作系统的风格和功能不同,所以提供的图形库不一样,在一个平台上可能存在的功能反而在另一个平台不存在。为了实现“写一次(编写一次,任意平台都可以运行”)Java语言的概念,AWT必须以牺牲独立平台功能为代价,由各种系统提供的AWT图形功能的交集来作为awt图形功能的可用功能。
如下图为awt的几种基本布局:

图2-3 awt的几种基本布局
AWT在基础组件(components)的GUI应用于提供JavaApplet和Java Application。 由于Java是一种独立于平台的编程语言,而是通常将GUI链接到特定的平台,Java技术允许使用相应的AWT可以提供一个平台接口独立应用于某个机器,这保证了相同的程序操作GUI 在不同的机器上具有相似的界面效果(但是并不能保证一定相同)。
来自AWT Java1.0(旧AWT)的和AWT Java1.1(新AWT)之后的有着截然不同的情况,新的AWT相比于旧的AWT有这更显着的改进并且摒弃了很多缺点,从而新的AWT可以更加方便的使用,这篇论文主要是讨论新的AWT,但不可否认在Java1.1中更旧版本的AWT程序也可以运行。
Abstract Window Toolkit(AWT)使用Java语言来操纵位图显示窗口,为一个图形过程库。 最后,扩展设计人员将AWT扩充为AWT Window Alternative Toolkit和Applet Widget Toolkit。 最新的图形界面叫做Swing,扩展了AWT,Swing应用程序开发人员可以使用它来生成独立的GUI平台对象。
2.5 Java Swing 介绍
Java Swing 作为一个GUI工具包,是专门为Java设计与使用的,也是Java基础类的一部分,其中包含的一些组件如文本框、分割窗格、表格、按钮等
Java Swing可以提供的屏幕显示元素,在某种程度上要比Java Awt提供的要好的多。由于Java Swing使用纯Java语言编写的,在这一点上不与AWT相同,所以Java Swing拥有与Java语言一样的可扩展性,可以在多种平台上使用,并且Java Swing也是JFC的一部分。Java Swing可以对面板和主题进行变更(操作系统中存在着默认的主题,不同操作系统的主题不尽相同),这并不是真正的去使用这种操作系统的设备,只是在一定程度上在表面上模仿。这些特殊的功能导致程序猿可以可以使用Java的任何面板,并且不需要操作系统的限制。如下图2-4为Java swing 基本组成:
JFrame : java中的GUI是以JFrame为基础的一种基本思路,它是屏幕上创建window的对象,通过调用一些特定的方法,可以实现界面的最大化、最小化、关闭。
JPanel :作为Java GUI 下的swing中的面板容器类,它包含在javax.swing 包中,使用的时候可以对其进行嵌套,它的功能是在窗体的使用中对其具有相同逻辑功能的组件进行整合,同时也是是一种轻量级容器,使用中可以加入到JFrame窗体中。。
JLabel :JLabel 对象的功能是可以将文本、图像进行显示或同时对二者进行显示。它有垂直和水平两种对齐方式,可以指定标签显示区中的标签内容在任意一处进行对齐。通常默认情况下,标签默认在显示区域内居中垂直对齐,而且,显示文本的标签是开始一种边对齐,显示图像的标签则是居中水平对齐。
JTextField :它可以进行编辑单行文本,是一个轻量级的组件。
JPasswordField :功能是让我们输入了一个文本框类似于输入框,但是在输入密码的时候讲密码进行隐藏,类似替换成*符号。
JButton :JButton 类的实现类,功能是在面板中创建按钮,可以对齐进行点击之类的操作。比如我们经常使用的登录、注册按钮。

2.6 Java语言开发平台搭建
首先登陆到官方网站http://www.oracle.com,之后跳转到JDK下载页面下载Java JDK ,版本选择最新的jdk1.8.0_131进行下载,下载界面如下图2-5所示:

图2-5 下载JDK
下载完成后安装JDK,安装路径为F:\Java\jdk1.8.0_131,安装路径如下图2-6所示:

图2-6 安装路径
安装完成JDK之后登陆网址https://www.Eclipse.org,进行下载Eclipse,下载界面如下图2-7所示:

图2-7 下载Eclipse
下载后,安装完成打开Eclipse,点击菜单栏上的window-preference进行配置JDK,之后便可以使用Eclipse进行编程开发,配置方式如下图2-8所示:

图2-8 配置JDK

如下图2-9位Eclipse的基本使用界面,通过多次使用来进行熟悉即可。

3系统需求分析
3.1 可行性分析
可行性分析是要求以经济方法和效益为核心进行全面的系统分析,围绕影响项目的各种因素、收集大量数据分析论证项目的可行性。对整个项目进行可行性研究是为了对项目进行分析和评估,突出项目的优缺点和讨论如何对项目进行改进。为了结论的可行性,经常还需要添加一些配件,如测试数据、演示材料、电子表格、图纸等,以提高可行性研究的严谨性,使其更具有说服力。
3.1.1 技术可行性
技术可行性是从重要技术项目执行实施的角度,合理设计技术解决方案,进行比较评估不同行业和不同深度的大型技术可行性研究项目。这一款软件开发,在硬件方面不存在特殊要求,只需要在普通的硬件配置中便可以轻松实现,但必须保证系统的正常运行,并提高效率。如果硬件特别弱、性能差从而使得系统效率低下,导致整个系统不顺畅。但对于如今的个人PC的一般配置,进行软件开发是很容易满足条件的。 因此,该系统的开发在硬件方面完全可行。操作系统选择WINDOWS操作系统,开发软件为Eclipse,该系统的设计实现在软件方面是可行的。因此可以看出,该系统的开发是没有问题的。
3.1.2 经济可行性
经济可行性是在资源配置、区域经济发展目标、经济资源有效配置、增加供给、创造就业机会、改善环境、改善生活等方面,对项目的价值进行评估。本基于Java开发的愤怒的小鸟游戏,需要的软硬件环境,在市场上都是很方便可以购买得到,开发人员主要是进行软件开发和简单的维护。所以人力和财力资源开发方面没有问题,开发周期长,经济可行性很大。
3.1.3 操作可行性
操作可行性是设想项目验证是可行的,它提出了各种方案的实施,并解释了不同方案的优缺点。该系统使用基于Java语言编写,使用个人PC安装Eclipse来进行访问和操做,并且界面简单易用,只要用户稍加以学习和多试几次,完全可以熟悉访问和操作。这一款愤怒的小鸟游戏,有着界面上易于管理和良好的互动操作等各种优点。
3.1.4 发展可行性
软件生命周期的观点:随着中国游戏方面还处于成长期,这类游戏软件将会被广大用户提出需求。因此,这是游戏软件长寿的主要原因,开发一款游戏软件,合理的运营将会使它和谐的发展,而且这并不是一个太难的开发项目,它不仅可以在PC端进行操作使用,甚至可以跨平台传播,而且用户操作简单,使用起来非常方便,绝大多数用户都可以不用花费大量的时间便可以完全上手,这不仅是适应用户对游戏的追求,同时适应当前的游戏发展趋势。
3.2 性能需求分析
为了保证愤怒的小鸟程序的长期、稳定和有效的运作,必须保证系统的发展。 在开发基于Java语言的愤怒的小鸟程序的过程中,系统必须确保使用适当方法来保证程序的安全性和有效性。 我们必须充分考虑以下几点:
安全性:在信息时代,信息是确保信息安全的重要资产,特别是个人信息也需要强大的安全性,所以在游戏个人信息保存方面,应该确保安全性是第一位。
超前性:结合当今时尚潮流,开发满足用户需求,让用户总是可以第一时间获得超前的游戏体验,获得新鲜感,获得新的乐趣。
可扩展性:基于Java的愤怒的小鸟游戏不仅可以在PC端进行使用,由于Java语言的可扩展性,注定这个游戏也可以进行多平台使用,更加方便的获取以及更加方便的操作。
3.3 功能需求分析
需求分析是对用户需求和要求的分析。需要准确评估用户需求的结果从而反映实际用户需要,这将直接影响整个设计的流程,也会对系统的使用产生影响。关注需求评估来完成调查收集和研究,可能会受到数据管理和信息安全过程的影响。一般用户相对于开发者来说,绝大部分用户都是缺少计算机相关知识,并且无法确定计算机是否可以为自己做到或者做不到一些事情,准确表达他们的需求是需要的,必须通过跟用户的深入了解来获取用户的需求从而准确的确定计算机的功能。
搜索用户分析和细化特征等用户的描述的信息是必要的。它是软件开发过程的第一阶段主要部分,主要任务是了解您需要什么,需要做个什么样的系统,使完整的目标系统拥有清晰准确的功能,并且可以进行书面表达。
在愤怒的小鸟程序中,主要实现以下功能
游戏玩法功能:
(1) 能实现发射器创建、发射角度、发射力度等
(2) 可以实现小鸟飞行功能,包括小鸟飞行抛物线、小鸟飞行悬停
(3) 实现游戏中猪的移动功能,包括猪的根据级别不同改变移动速度、猪在哪里移动
(4) 碰撞功能:实现小鸟与障碍的碰撞、小鸟与猪的碰撞、鸡蛋与障碍物的碰撞、鸡蛋与猪的碰撞、猪与障碍物的碰撞
页面管理功能:实现各个页面功能,包括主界面、载入游戏界面、控制帮助界面、跳转界面功能等
难度、级别功能:实现游戏难度功能,难度不同猪的移动速度不同,实现级别功能,级别不同地图难易程度也不同
实体类管理功能:创建游戏中各种实体类,包括鸟的种类、猪、障碍物、草地等
玩家管理功能和备份功能:实现玩家信息管理以及游戏信息保存的功能
如下图3-1所示:

图3-1 总体功能需求图
3.4 系统UML分析
UML是在面向对象的方法Booch,TMO,OOSE等基础上开发的方法,以及根据许多其他方法和材料的基础从而衍变出来的。 UML符号是为各种图形符号表示,消除混淆、冗余符号或很少使用以及容易导致的图形符号,同时添加一些新的图形符号。
UML是统一建模语言的缩写,也称为统一建模语言。它是用于可视化建模的一种语言。 UML是开发人员用于建模事物的客观标记,同时也为开发人员了解什么样的系统工作以及整个过程做出了准备工作。 现在我们在这个基础上对愤怒的小鸟进行建模分析,UML用例图如下图3-2所示:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

强连通子图

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值