基于Java小游戏的设计与实现(论文+源码)_kaic

目  录

摘要
第一章 绪论
1.1研究的目的和意义
1.2项目设计语言背景
1.3论文的主要内容
第二章 系统开发环境介绍
2.1编译语言
2.2编译工具
第三章 设计小游戏需求及分析
3.1设计游戏框架
3.2敌人入场
3.3飞行物移动
3.4子弹入场
3.5英雄机随着鼠标动
3.6删除越界的飞行物
3.7子弹与敌人的碰撞
3.8画分和画命
3.9英雄机与敌人的碰撞
3.10检测游戏结束
3.11画状态
3.12设计UML用例图原理
第四章 业务实现
4.1给每个对象设计类
4.2创建主类
4.3在窗口之中加图片
4.4设计子弹事件
4.5设计敌机事件
4.6设计英雄机事件
4.7将图片行为画在主窗口
4.8删除越界的飞行物
4.9实现子弹的碰撞
4.10世界类中添加动作
4.11添加检测游戏结束,画状态
4.12最后添加检测游戏结束方法
第五章 设计游戏的测试与运行
5.1测试的目的
5.2测试的结果
第六章 结束语
参考文献-
致谢

基于java小游戏的设计与实现

摘要
随着java语言的发展,java语言开发的软件越来越多,人们的生活中充满了编程语言开发的东西,javaee是近年来随着各种不同的技术的发展,尤其是编程语言飞速发展而火起来的一项开发语言。随着信息技术的飞速发展,计算机的使用也日渐普及,本文从实例出发,向大家介绍射击游戏的设计与实现。Eclipse平台模拟器开发调试,玩家通过鼠标控制英雄机的位置,敌机则是自动运行并具有了一定的智能。程序进行了精简和优化,游戏运行流畅,具有一定的吸引力。
论文中介绍了游戏的总体设计思路和开发游戏的过程。我参与的这款游戏是在Eclipse环境下进行编程的,能四处移动、发射子弹、打击敌人、敌人能够移动、能够模拟爆炸、能够随机给双倍火力、或着命、还能增加分数。

关键字:射击游戏;java;Eclipse;面向对象;java语言基础

第一章 绪论
1.1研究的目的和意义
如果要从精品云集的游戏中找到一款经典游戏,《飞机大战》一定是你的首选,其中有一个游戏叫《雷龙》,这是一款射击游戏,玩家可以控制英雄机的位置,来躲避敌人的撞击,同时还有小蜜蜂来送奖励,会随机产生命或者双倍火力,玩家可以通过控制鼠标来使游戏实现暂停,运行,重来,玩家可以通过躲避子弹来活得更多的分数。
1.2项目设计语言背景
Java语言是当前最为流行的程序语言之一,作为非常优秀和极其健全的编程语言,它同时有面向对象,与平台无关,分布式应用,安全,稳定和多线程等优良的特征,使用java语言,不仅可以开发出功能强大的大型应用程序,而且java语言本身突出的跨平台特征也使得它特别适合与internet上的应用开发[1]。可以这样说,java的出现使得所开发的应用程序实现一次编写,处处使用,网络化的市场让游戏变成人和人的交战,而不是人和电脑的对战,这样可以增加游戏的难度,游戏的时间和游戏的寿命[2]。立体化是为了适应现在越来越3D 的趋势,游戏有必要做的更加的完善,趋向3D 并且加重环境描写。多样化则是增加游戏的任务,游戏的耐玩性而在坦克大战里增加更多的内容加大其可玩性,比如:装备,对战方式,任务合作模式等等。可以想像,如果坦克大战还是人机对战的模式,并且协作性不提高的化,玩家对该游戏的选择性将大大降低,最终成为历史。
1.3论文的主要内容
本课题就是想对该游戏进行分析研究,借助于它的游戏规则,用JAVA 语言模拟开发一个类似的,功能相对简单的小游戏。
本文的第一章绪论部分主要介绍了研究的目的和意义,说明了为何进行此项研究以及其重要性。同时,也详细探讨了项目设计语言背景,并概述了项目或论文的基本概况。后续小节则更加深入地讨论了这些主题,具体地解释了研究背景、目标、方法等,为后续的探讨打下了坚实的基础。
在第二章系统开发环境介绍中,详细介绍了系统开发环境,其中编译语言和编译工具是该章的核心内容。例如,关于Eclipse的内容可能会包括其特性、功能以及如何使用它进行代码编译和调试等。这些内容的介绍为后续的开发过程提供了有力的技术支持[3]。
第三章设计小游戏需求及分析主要对设计的小游戏的需求进行了深入的分析。包括了游戏框架的设计、敌人入场、飞行物移动、子弹入场、英雄机随着鼠标动等等。这些小节都详细讨论了每个元素的特性和行为,以及它们如何在游戏中互动和影响玩家的体验。这些分析的结果为后续的游戏设计提供了重要的参考。
第四章业务实现部分详细地讨论了如何通过给每个对象设计类、创建主类、添加图片等方式来实现业务逻辑。例如子弹事件、敌机事件、英雄机事件等都进行了深入的探讨。每一小节都详细地描述了具体的实现步骤和方法,这些具体的实现为后续的编码提供了详细的指导。
在第五章设计游戏的测试与运行中,主要讨论了如何对游戏进行测试以及游戏的运行效果。其中包括了测试的目的、测试的结果等。通过有效的测试,可以保证游戏的质量和稳定性,同时也能检测出游戏性能和用户体验等方面的问题,以便进行进一步的优化和完善。

第二章 系统开发环境介绍
2.1编译语言
.Java 语言的特点
平台无关性:平台无关性指的是Java 能够运行在不同的平台。Java 引进的是虚拟机的原理,并运行于虚拟机,实现不同平台的Java 接口之间。使用Java 编写的程序能在世界Java运行与机器无关,Java 虚拟机范围内共享。(Java Virtual Machine )是建立在硬件和操作系统之上,实现Java 二进制代码解释执行的功能,提供于不同平台的接口的。
安全性:Java 的编程有点类似C++语言,学习过C++的读者一般都很快能够掌握Java 的精髓。Java和C++还有有区别的,Java 舍弃了C++的指针对存储器地址的直接操作,在程序运行的时候,内存由操作系统分配,这样做是可以避免病毒通过指针侵入系统的。为防止程序的非法访问,保证安全,Java 对软件程序提供了安全的管理器。
面向对象:Java 吸取了C++面向对象的一些概念,将数据封装于类中,利用类的优点,实现了程序简洁性和便于维护性。类的封装性、继承性等有关对象的一些特性,使程序代码只需要编译一次,然后通过上述特性可以反复利用[4]。我们程序员只需把主要精力花费在类和接口的设计和应用上。Java 提供了众多的一般对象的类,通过继承便可使用父类的方法。在Java 中,类的继承这一关系它是单一的非多重的,一个子类只有一个父类,子类的父类又有一个父类。Java 提供的Object 类以及子类的继承关系如同一棵倒立的树形,根类为Object 类,Object 类功能非常的强大,经常会使用到它以及其它派生的子类。
分布式:Java 是建立在扩展TCP/IP网络平台上。库函数主要提供了用HTTP 和FTP 协议传送以及接受信息的方法。这使得我们程序员在使用网络上的文件以及使用本机文件一样的容易, 使用其相关技术也可以十分方便的构建分布式应用系统。
健壮性:Java 主要致力于检查程序在编译和运行过程中的错误[5]。类型检查可以帮助检查出许多开发早期可能出现的错误。Java 自己操纵内存也很大程度减少了内存出错的可能性。Java 还实现了真数组,真数组的存在避免了覆盖数据的可能,这些功能特征也大大提高了开发Java 应用程序的周期。并且Java 还提供了Null 指针检测、数组边界检测、异常出口、Byte code 校验等功能。Java 取消了C 语言的结构、指针、#define语句、多重继承、goto 语句、操作符、重载等不易被掌握的特性,提供垃圾收集器自动回收不用的内存空间[6]。
简单性:Java 还删除了许多极少被使用、不容易被人理解和容易令人混淆的C++功能。剔除的功能主要包括运算符重载、多重继承以及广泛的自动强迫同型。与C++相比之下,Java 语言也提供了重载函数,不过它重载的对象只能是函数而非变量或是运算符。Java 还增加了自动内存收集这一功能,从而简化了Java 程序的一些工作,不过同时呢也让系统变得稍微复杂了一些[7]。Java 的目标之一是要协助开发能独立地在小型机器上顺利执行的软件。Java 的基本解释器和对象类支持约占40KB 空间,而若增加基本的标准程序库和线程支持则需增加约175KB 。体积小对于在嵌入式系统中的使用是很重要的,正因为这样,Java 才能够通过网络轻易下载。
中立性:Java 的设计目标是要支持网络应用程序。一般而言,网络是由不同的平台系统构造而成的,包括各种CPU 与操作系统结构。为了能够让Java 应用程序在网络上任何地方都可以执行,Java编译器将会生成一种能够具备结构中立性的目标文件格式。编译后的程序代码可以在提供Java 运行系统的多种不同处理器上面执行[8]。Java 的这种中立性结构不仅仅对网络应用有很大的帮助,而且也非常适合单一的系统软件流通。Java 编译器是通过生成与某一特定电脑结构无关的字节代码指令,以达到上述功能的。这些字节码指令能够很容易在任何机器上解释执行。结构中立性是确保程序可移植的最重要部份,不过除此之外还需很多必须配合的条件和C 与C++不同的是,Java 规范中并无任何与机器结构相依存的陈述存在。它指定了基本数据类型的大小,及其算术运算元的执行行为。例如:“int ”代表一个有符号的二进制补码32Bit 整数,而“float ”代表一个32BitIEEE754浮点数。这些选择在今天的环境很适用,因为几乎所有CPU 都具备这些特性。程序运行库属于系统的一部份,它定义了一些可移植的程序接口。例如,Windows 和Macintosh 它包括一个抽象的Windows 类,并且提供了该类在Unix 、平台上的实现。
解释执行性:Java 解决器可以直接在任何已移植该解释器的机器上解释、执行Java 字节代码。再者,由于其链接过程比较倾向于逐步增量与轻量过程,因此程序开发更快、更精密。
高效能性:虽然解决过的字节代码性能已相当不错,不过有些情形下还是要求程序达到更高执行效能。字节代码可以动态地解释为执行应用程序特定CPU 的机器码[9]。这对于习惯使用一般编译器与动态载人器的程序设计者而言,有点类似将最终的机器码生成器放到动态载入器之内。字节代码格式在设计上即已考虑了机器码的产生,因此实际的机器码生成程序相当简单。其生成的机器码是有效的,编译器自动分配寄存器,而在生成字节代码期间也会进行一些优化[10]。我们以解决码在一台Sun Microsystem SPARC Station10上执行时,达到每秒三十万个函数调用速率。字节代码转换至机器码的速度性能,几乎和直接生成机器目标代码的C 或C++没有什么两样。
多线程性:Java 拥有一组复杂的同步化基本单元,它们是以广泛使用的C.A.R.Hoare 监视器与条件变量图为基础的。将这些概念融合到语言中之后,它们就变得更容易使用且更为健壮。这种融合方式大部分来自Xerox 的Cedar/Mesa系统[11]。多线程所带来的其它好处包括更好的交互式回应能力与实时运行能力。然而这会受到底层平台的限制:独立执行的Java 运行环境有着很好的实时执行能力,而若在其他系统例如Unix 、Windows 、Macintosh 或WindowsNT 等平
2.2编译工具
关于Eclipse
Eclipse这一软件是著名的跨平台且自由集成开发环境(IDE)。最初它主要用来Java 语言开发,但是后期逐渐有人通过插件使其作为其他计算机语言的开发工具,比如C++和Python。
Eclipse起始于1999年4月。IBM最初是提供了的Eclipse 代码的基础,包括Platform、JDT和PDE[12]。目前由IBM 牵头,围绕着Eclipse项目现在已经发展成为了一个庞大的联盟,已经有150多家软件公司参与到Eclipse 这一项目中, Eclipse是一个开发源码的项目,它呢其实是Visual Age for Java 的替代品,它的界面跟先前的Visual Age for Java 其实有很多相似的地方,但是发展到后期由于其开放源码,任何人都可以免费得到,并且可以在此基础上开发各自需要的插件,因此呢受到了越来越多开发者的关注。近期还有很多大公司比如说包括Oracle 在内的也纷纷加入了该项目,并宣称Eclipse 不久的将来能成为可进行任何语言开发的IDE 集大成者,使用者只需下载各种语言的插件即可[13]。
第三章 设计小游戏需求及分析
3.1设计游戏框架
1.创建各对象的类
2.添加各对象的行为
3.创建主方法类执行各对象的方法
3.2敌人入场
1.在World类中添加nextOne()随机生成敌人对象
2.在World类的run()中调用enterAction()实现敌人入场
3.在enterAction()获取敌人,装到enemies数组中
3.3飞行物移动
1.在超类FlyingObject中添加抽象方法step()
2.在派生类中重写抽象方法step()
3.在World类的run()中调用stepAction()实现飞行物移动
4.在stepAction()调用step()实现对象的移动
3.4子弹入场
1.在英雄机Hero中添加shoot()方法实现发射子弹
2.在World类的run()中调用shootAction()实现子弹入场
3.在shootAction()中先调用shoot()获取子弹,并装到bullets数组中
3.5英雄机随着鼠标动
1.在英雄机Hero中添加moveTo()方法实现随着鼠标动
2.在World类的侦听器中重写mouseMoved()侦听鼠标移动事件
3.在mouseMoved()中获取鼠标的x和y,调用moveTo()实现英雄机随着鼠标动
3.6删除越界的飞行物
1.在超类FlyingObject添加抽象方法outOfBounds()
2.在派生类中重写outOfBounds()检查对象是否越界
3.在World类的run()中调用outOfBoundsAction()删除越界对象
4.在outOfBoundsAction()中将所有不越界的对象添加不越界数组中,最后把不越界的数组复制到enemies/bullets数组中
3.7子弹与敌人的碰撞
1.在超类FlyingObject中设计hit()实现敌人与子弹的碰撞在超类FlyingObject中设计goDead()让飞行物去死在英雄机Hero中设计addLife()增命,addDoubleFire()增火力
2.在World类的run()中调用bulletBangAction()实现敌人与子弹的碰
3.在bulletBangAction()中嵌套循环判断是否撞上了,若撞上了,敌人与子弹去死,判断被撞对象,得分或得奖励
3.8画分和画命
1.在英雄机Hero中设计getLife()来获取英雄机的命
2.在World类的paint()中画分和画命
3.9英雄机与敌人的碰撞
1.借用FlyingObject中的hit()碰撞和goDead()去死在英雄机Hero中添加substractLife()减命,clearDoubleFire()清空火力值
2.在World类的run()中调用heroBangAction()实现英雄机与敌人的碰
3.在heroBangAction()中遍历所有敌人,与英雄机对比若撞上了,则敌人去死,英雄机减命,英雄机清空火力值
3.10检测游戏结束
1.借用Hero中的getLife()获取英雄机的命
2.在World类的run()中调用checkGameOverAction()检测游戏结束
3.在checkGameOverAction()中判断游戏是否结束,若游戏结束了,则修改当前状态为游戏结束状态
3.11画状态
1.在World类中设计了4个常量表示程序的状态值
2.在World类中设计了3个静态变量表示启动图、暂停图、游戏结束图,并在static块中初始化
3.在World类的paint()中在不同状态下画不同的图片
4.将World类的run()中的一堆action设计为在运行状态下执行
5.将World类的鼠标移动事件中的英雄随着动设计为在运行状态下执行
6.在World类中重写鼠标点击事件
7.在World类中重写鼠标移出事件
8.在World类中重写鼠标移入事件


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

开心工作室(kaic_kaic)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值