Java小游戏

您所在的位置:网站首页 电脑编程飞机大战 Java小游戏

Java小游戏

2024-03-05 17:12| 来源: 网络整理| 查看: 265

摘 要

现如今,随着智能手机的兴起与普及,加上4G(the 4th Generation mobile communication ,第四代移动通信技术)网络的深入,越来越多的IT行业开始向手机行业转移重心。而手机行业中游戏方面的利润所占比重较大,并且手机游戏大多数则是由Java语言开发研制的。所以我想顺应时代发展,用学到的Java知识对游戏进行一次深入的了解与创作。 Java语言在我们大学学习中占了很大的比重,其优点甚多:面向对象,可靠,安全,多平台可移植,高性能,多线程等。面向对象是相对于c语言的面向过程来说的,在面向对象编程中,我们用Java去新建一个对象,调用其方法就能实现我们的目标,并不需要了解这个对象的方法的具体实现过程;Java的可靠安全特点体现Java不支持指针,禁止第三方访问,杜绝了外部风险。所以使用Java开发游戏,是一个正确的选择。关键词:Java  飞机大战  可靠安全

第一章 概述

1.1 引言  经过这段时间的专业学习,使我们系统化的掌握了专业基础知识,为了综合运用所学理论知识,培养自己的独立分析问题、解决问题的能力,让自己在实践中获得真知,我认真的进行并完成了此次设计任务,,此次课程设计课题为飞机大战小游戏,在指导老师的帮助下,我逐步完成。 通过对教材和有关参考资料的学习,是我掌握基木方法,解决了措施主要内容有哪些,此次设计过程中,我按照设计的各项要求,综合运用所学知识,独立的完成了资料的收集整理,,定额的应用,掌操此次设计的完成锻炼了我的创新思维和动于能力,提高了我综合应用专业知识解决实际问题的能力,培养了我注重实事求是、独文思考的科学精神,提高了从事专业的实际工作能力,为我以后的发展打下了坚实的基础。

1.2 系统目标

界面简洁流畅,游戏方式简单,玩起来易上手,功能齐全。

飞机大战系统需求分析

2.1项目分析

本次项目的题目——基于Java的飞机大战游戏的设计与实现,主要目的是实现飞机大战这个游戏。期望结果:游戏无BUG(现在人们将在电脑系统或程序中,隐藏着的一些未被发现的缺陷或问题统称为BUG——漏洞),简单易上手,老少皆宜,让玩家“玩不释手”。 从游戏的玩法来说,主要就是我方飞机(Hero airplane)和敌方飞机(Enemy airplane)的对决,首先是游戏的开始界面与结束界面,然后就是我方飞机(Hero airplane)的移动方式(鼠标移动或者键盘移动,我打算选择鼠标移动,因为鼠标移动可以转移到手机上,现在大多数手机都没有键盘,基本靠手指滑动操作),接下来就是我方飞机(Hero airplane)子弹的生成,然后是敌方飞机(Enemy airplane)的出现坐标的选择,然后飞机与子弹防碰撞,飞机与飞机的防碰撞,最后是我方飞机(Hero airplane)与敌方飞机(Enemy airplane)的对战结果。

2.2 系统功能需求

需求分析是对即将开发的系统确定一个完整的,准确的要求。需求分析的结果是否完美解决了用户的问题,将直接影响到后面的进程,并影响到设计结果是否能让用户接受。软件需求分析对软件系统提出了清楚、准确、全面而具体的要求,是对软件使用者意图不断进行揭示与准确判断的过程,它并不考虑系统的具体实现,而是严密地、完整地描述了软件系统应该做些什么的一种过程。飞机大战主要需要我方飞机和敌方飞机,还有子弹,特殊nPC,开始背景,结束背景,以及背景音乐。我方飞机可以随意移动,敌方飞机无规律出现。游戏玩家通过鼠标移动控制飞机移动,我方飞机在游戏开始时就一直能发射子弹,当我方子弹碰到敌方飞机时,敌方飞机消失。当玩家飞机碰到敌方子弹时,生命值减一,直到玩家飞机生命值为一时,游戏结束。

2.2.1游戏状态控制功能:

游戏的状态控制包括运行、暂停、恢复及结束游戏,首先是游戏的开始页面,在游戏正在进行时,如果你有其他的事情又不想结束游戏你可以将鼠标移出游戏界面或者鼠标在游戏界面单击即可暂停游戏,当你的其他事情解决后你还可以选择恢复游戏,继续玩下去,当游戏结束时会显示游戏结束界面。

2.2.2游戏难度的调整:

玩家随着玩游戏的时间的增加,敌方飞机的数量会增加,出现的频率会有所提高,移动速度也会提高。

2.2.3游戏界面绘画功能:

在右上角显示游戏时间(游戏难度于时间成正比,即游戏时间越长难度越高),玩家游戏得分,与我方飞机生命值,游戏主屏用来显示玩家对我方飞机(Hero airplane)的控制与敌方飞机(Enemy airplane)的出现及移动的显示。

2.2.4玩家游戏控制功能:

玩家可以通过控制移动鼠标或者键盘来控制友机的移动。

2.3软件配置

服务器端:安装Java虚拟机,Web服务器软件Resin,数据库软件Mysql

客户端:  安装Java虚拟机,Chrome浏览器

开发环境:INTelliJ IDEA

开发语言:Java

Web服务平台:resin-4.0.36

数据库: Mysql5.0

2.4硬件配置

服务器端:Centos6.5,有网络接口卡(NIC),内存应在4GB以上,硬盘在160GB以上。

电脑配置:CPU: Core i5 2.30GHz 内存:DDR3 8GB 硬盘:500GB

操作系统:Microsoft Windows10专业版

客户端:Core i5以上配置的PC机,有网络接口卡(NIC),内存应在4GB以上,硬盘在500GB以上。 

电脑配置:CPU: Core i5 2.30GHz 内存:DDR3 8GB 硬盘:500GB

操作系统:Microsoft Windows 10

2.5网络配置

网络:服务器和客户端应有网络连通。配置TCP/IP协议。

2.6可行性分析

可行性研究顾名思义,研究其的可行性。可行性研究是项目开发之前的重要阶段。在软件开发实践中,软件开发人员或者用户对市场的了解不充分,对技术的掌握不好,对进行开发的各项风险评估不足等因素,有些问题不能再预期下得到解决,造成不可预估的损失,为了避免盲目的软件开发和不必要的损失,相关人员需要对开发特定软件项目的可行性进行研究,结合资金、时间和环境等各方面的制约条件,对该软件产品是否能够解决存在的问题,是否能够带来预期的效果和价值做出评估。

2.6.1技术可行性:

现在开发游戏的语言一般都是Java语言,为了保证开发出来的游戏可以在手机、Web浏览器、PC客户端等平台使用,所以就要求开发语言可以在多平台移植,而Java语言刚好符合这个特性。开发工具IntelliJ IDEA可以下载并且可以免费使用,Java的编译工具JDK也可以在Sun官网上直接下载安装,其过程十分简单

2.6.2经济可行性:

配置较低的电脑也能进行Java游戏的开发,一台电脑就行,开发成本低。由于Java具有跨平台以及一次编译,到处运行的特点,开发出来的游戏可以放到各大游戏平台上发售,玩家可以在电脑,浏览器,手机等各种平台运行。而且软件维护简单,实用性强,一次开发使用,即可长久使用,当软件满足不了用户需求时,只需对用户的需求进行添加即可。

2.6.3操作可行性:

本游戏操作简单,在电脑和浏览器上可以用鼠标键盘操作,在手机上可以用手触摸屏幕运行。

2.6.4用户使用可行性:

本软件操作简单,对用户的要求,不需要多强技术能力。

2.6.5法律可行性:

信息产业部已将游戏通用引擎研究及示范产品纳入国家“863计划”,这是中国首次将游戏技术纳入国家科技计划当中。

综上所述,此系统开发目标已明确,在技术和经济方面都是都可行。所依此系统的开发是完全可行的。

第三章 飞机大战游戏总体设计

3.1 功能设计: 该飞机大战游戏程序分为游戏滚动背景绘制模块、各游戏对象绘制模块、游戏对象之间的碰撞模块、爆炸效果产生模块、游戏界面输出玩家得分关卡信息模块、战机道具维护处理模块、视图生命周期维护模块。其中在游戏对象绘制模块中,战机是唯一对,在游戏开始时产生该对象,赋予其固定的生命值,当其与敌机对象、敌机炸弹碰撞时使其生命值减一,直至生命值为零,便删除战机对象。敌机对象与敌机炸弹对象的绘制中采用定时器技术,定时产生。爆炸对象初始化为空,当游戏过程中即时发生碰撞时,在碰撞位置产生爆炸对象,添加到爆炸链表中,并根据爆炸素材图像分八帧进行输出,达到动画特效。 3.2系统功能设计

3.3 功能模块设计3.3.1 游戏状态控制功能模块 游戏的状态控制包括运行及结束游戏,首先进入游戏的开始页面,在游戏进行时,玩家必须躲避或者击落敌方飞机,玩家飞机的生命值降低为0的时候游戏就会结束,弹出游戏结束界面。3.3.2 游戏难度的调整模块 玩家玩的时间越长游戏的难度越高,敌方飞机的数量越多、敌方飞机出现的频率越高,玩家保证飞机的存活的难度越高,操作难度相应也高。3.3.4 游戏界面绘画功能模块 左上角会显示玩家飞机当前生命值,游戏时间,当前分数,其他地方用来输出玩家对我方飞机的控制与敌方飞机的动作显示。3.3.5 玩家游戏控制功能模块 玩家可以通过控制鼠标或者键盘来控制方飞机(Hero airplane)的移动。

3.4游戏难点分析:

3.4.1 绘图美化 清新靓丽的游戏界面将给用户带来愉悦的美感。因此,在这个游戏中,主要参考原始的游戏画面,敌我飞机的形象也应该是美丽的。3.4.2 多线程技术的实现 应用程序线程机制的基石,实现了游戏,游戏的刷架的控制,装上各种角色的资源和背景(如飞机,机友)的要求,以实现整个游戏实现自动控制线程 控制。3.4.3 防碰撞问题的解决 例如,敌方飞机与玩家飞机防碰撞,敌方飞机与玩家飞机防碰撞,等等。防碰撞检测技术实现在不同情况下,有不同的防碰撞检测方法。3.4.4 动画的实现 用图片的阵列,动画切片变换形成。图像阵列,千变万化的图像画在画布标,使动画,这是一个图像的形成阵列。使用切片来实现动画,所有的帧都放置在相同的图像中,以达到爆炸的效果。

第四章 详细设计

4.1 开发工具的选用及其介绍 4.1.1 封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是:代码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。 封装:封装是实现面向对象程序设计的第一步,封装就是将数据或函数等集合在一个个的单元中(我们称之为类)。被封装的对象通常被称为抽象数据类型。 4.2 详细模块设计

GameObject是各个游戏对象的抽象父类,继承自Object类,其他的类:战机类、敌机类、爆炸类、子弹类、炸弹类、血包类、文字类都继承了此类,Boss类继承敌机类。 每个游戏对象类中既继承了来自父类GameObject的属性,又有自己的特有属性和方法。  GameObject类介绍:

// 该游戏对象在窗口中的坐标位置

protected Point point;

// 在窗口中绘制该游戏对象图标

public boolean draw(Graphics g, JPanel panel, boolean pause);

// 获取该游戏对象图标在窗口中的矩形框,进行碰撞检测时使用

public Rectangle getRect();

// 加载该游戏对象对应的图像到内存,方便之后的显示调用

public static boolean loadImage(BufferedImage image, String source);

        继承GameObject的其他游戏对象类也都重载了相关方法,以便于各个游戏对象在程序的调用过程中调用方式的一致性。

        MyPanel:JPanel的继承类,是飞机大战窗口的总显示面板,其中包含了游戏运行过程中的大量全局参数和全局标记位

SpaceWar:程序的入口,窗口对象启动的位置,并在此对相关事件进行了监听

Ball:敌机炮弹类,继承GameObject,有加载图片,获取矩形框,获取对象位置,绘制回想等游戏对象通用操作方法

Blood:血包类,继承GameObject,有加载图片,获取矩形框,获取对象位置,绘制回想等游戏对象通用操作方法

Bomb:战机炮弹类,继承GameObject,有加载图片,获取矩形框,获取对象位置,绘制回想等游戏对象通用操作方法

Boss:Boss类,继承GameObject,有加载图片,获取矩形框,获取对象位置,绘制回想等游戏对象通用操作方法

Enemy:敌机类,继承GameObject,有加载图片,获取矩形框,获取对象位置,绘制回想等游戏对象通用操作方法

Explosion:爆炸效果类,继承GameObject,有加载图片,获取矩形框,获取对象位置,绘制图片等游戏对象通用操作方法

GameObject:游戏对象基类,有加载图片,获取矩形框,获取对象位置,绘制图片的游戏对象统一的方法,统一游戏对象的操作方式

MyPlane:战机类,继承GameObject,有加载图片,获取矩形框,获取对象位置,绘制图片等游戏对象通用操作方法

Scene:场景类,实现了背景滚动,并根据关卡显示不同的背景图片

EnemyTask:实现了TimerTask接口,随着Timer计时器的调用而随时间产生敌机对象和敌机炮弹对象,实现自动产生敌机的效果

MagicTask:实现了TimerTask接口,随着Timer计时器的调用而随时间改变魔法值

RefreshTask:实现了TimerTask接口,随着Timer计时器的调用而随时间刷新窗口界面

AudioUtil:音频操作工具类,提供播放背景音乐和操作音效

ImageUtil:图片加工工具类,实现了透明贴图方法和背景图片拼接

核心代码 游戏初始化代码   public final void paint(Graphics g) {     g.setColor(this.bgColor);     g.fillRect(x, y, width, height);     g.setColor(this.fgColor);     g.drawRect(x, y, width, height);      this.paintBoxContents(g); } private void paintBlock(int x, int y, int blockType, Graphics g) {     int blockX = this.boardX + (this.blockSize * x);     IntblockY=this.boardY+(this.blockSize*(y-TetrisConstants.TOP_VISIBLE_ROW));     if(TetrisConstants.BLOCK_EMPTY != blockType) {         g.setColor(TetrisConstants.COLOR_BLACK);         g.fillRect(blockX + 1, blockY + 1, this.blockSize - 1, this.blockSize - 1);         this.setColor(blockType, g);         g.fillRect(blockX, blockY, this.blockSize - 1, this.blockSize - 1);     }      else {         g.setColor(TetrisConstants.COLOR_WHITE);         g.fillRect(blockX, blockY, this.blockSize, this.blockSize);     } }

第五章 系统实现与测试

5.1 系统实现

成果展示图

 程序源码

https://download.csdn.net/download/m0_54570435/87714588 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3