基于Java的僵尸危机游戏设计与实现.docx

基于Java的僵尸危机游戏设计与实现.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

?

?

基于Java的僵尸危机游戏设计与实现

?

?

向镍锌郭均赵为

摘要:如今快节奏与高强度的生活、工作环境使得游戏成为人们放松身心的不错选择,而智能设备的不断升级,使联网的电脑游戏、手机游戏受到人们更多的青睐。文中设计开发了一款基于Java的僵尸危机游戏,该游戏以2D为视角,采用J2SE技术、克隆方式,使用双缓存技术对游戏进行渲染。实现了游戏的模式选择、背景音乐、人物血条显示、宝箱开启、攻击、爆炸效果、血迹渲染、结果显示等多项功能,使用户有更好的游戏体验。该游戏的设计不仅有助于提高开发能力,更为此类游戏开发提供了思路,推动网络游戏的发展。

关键词:僵尸危机;游戏开发;Java

中图分类号:TP311??文献标识码:A??文章编号:1007-9416(2020)10-0000-00

0引言

随着智能移动终端以及互联网设备的不断优化升级,游戏成为了大众生活中必不可少的一项娱乐放松方式,特别是近年来发展势头良好[1-2]。Java语言作为目前使用最为广泛的网络编程语言之一,具有语法简单、面向对象、稳定、与平台无关、多线程、动态等特点[3],开发人员可以使用少量的代码设计具有界面效果的游戏[4]。本文基于Java语言设计开发了一款僵尸危机游戏,对游戏的功能进行设计分析,实现了怪物的刷新随机性、游戏进程单向性、游戏内容丰富性。

1总体功能设计

僵尸危机游戏需要实现以下功能:

(1)游戏模式选择:当玩家打开游戏执行文件后,进入批处理打开cmd控制台并进入游戏的模式选择界面,玩家可选择单人或双人模式。

(2)怪物刷新:玩家进入游戏后,普通丧尸和幽灵不断刷新。

(3)宝箱系统:游戏中分为补给箱、奖励箱、boss箱。补给箱在游戏开始后不停刷新,奖励箱和boss箱为杀怪奖励。

(4)特殊技能:玩家在游戏中具有近战攻击、远程攻击、人造墙体、扔炸弹等技能。

(5)游戏难度升级:当玩家杀怪数量到一定程度时,进入不同的“血月时刻”,此时背景、地形、怪物刷新等都会改变。

(6)游戏结束:当玩家被啃食击杀后,游戏结束。此时进入结束界面,界面中显示杀怪个数,并切换背景音乐。

2载入流程与组件

2.1游戏载入流程

如图1为游戏载入流程。从Main入口进入游戏程序后分为Start、GameClient、World三个阶段。在Start中,实现游戏开始界面的背景音乐载入、单双人模式选择。进入GameClient客户端后,陆续完成对游戏世界初始化、开辟绘图空间辅助双缓存渲染、开启绘制线程、添加各种监听器等过程。World中包含角色之间的碰撞检测[5]、丧尸幽灵刷新、地形模式改变、炸弹位置搜寻、游戏组件排序等重要环节。

2.2游戏组件关系

游戏组件之间都有着复杂而不同的继承关系。本游戏中设计了一个GameObject的游戏超类,它作为组件的父类,定义所有组件需要的属性,如:名字、半径、速度、x坐标、y坐标、x改变、y改变、方向、HP、碰撞判断、状态等。之后GameObject被Blood、Wall、Weapon、Role、BandDo、Border、Box继承。Blood为当生命体被攻击后在场景留下的血迹。Wall、Weapon、Role分别为:僵尸危机游戏中的墙体、僵尸危机游戏中武器系统的超类、僵尸危机游戏中角色系统的超类。BangShow为神圣炸弹爆炸的效果渲染。Border、Box分别为僵尸危机游戏边界、僵尸危机游戏宝箱系统的超类。详细的组件关系如图2所示。

3功能实现

3.1攻击与装备系统

游戏中英雄具备近战攻击与远程攻击功能。近战攻击时英雄可轉身、上下左右挥动武器,远程攻击时英雄可发出橙色火球对怪物进行攻击,远战攻击演示如图3所示,其关键代码如下:

publicbooleancollisionDetection(Gameobjectobject){

return((!object.equals(this.host))!(object?instanceofWeapon)super.collisionDetection(object));

}

publicvoidsetstate(){

initFireball(this.host.getDir()==Direction.STOP?host.getOldDir():host.getDir());

super.setState();

}

publicvoidsetUltimatestate(){

if(getNum()8)return;

for(Directiondir:Direction.values()){

if(dir==Direction.STOP)continue;

initFireball(dir);

}

super.setS

文档评论(0)

186****3372 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档