参考本科坦克大战.docx
- 文档编号:24887344
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:72
- 大小:976.92KB
参考本科坦克大战.docx
《参考本科坦克大战.docx》由会员分享,可在线阅读,更多相关《参考本科坦克大战.docx(72页珍藏版)》请在冰豆网上搜索。
参考本科坦克大战
摘要
本论文着眼于J2ME技术的应用,开发一款可商用的手机游戏程序——坦克大战。
本程序的界面和运作方式继承于日本任天堂公司在20世纪80年代开发的BattleCity游戏,将老少皆宜的经典作品移植到手机上来,为更流行的硬件平台提供应用软件。
本游戏中设计的主要研究的内容:
敌我双方的坦克以及子弹均以图片方式显示,并且添加游戏包含河、墙、草等环境元素。
使用多线程来控制坦克的动作同时使用缓冲技术来减少游戏过程中屏幕的闪动率,游戏的难度会随杀死敌人数量的增加而自动提高。
敌人中包含特殊坦克,杀死后会随机出现奖励物品,我方坦克是有生命值控制的,共三条命。
本游戏采用版本升级的方式逐步完善游戏功能。
本游戏中包括游戏主窗口程序模块,坦克类模块,子弹模块,河流模块,墙壁模块,及容纳这些物体的父类容器模块,奖励模块,爆炸显示模块,配置读取模块,这些模块之间相互联系。
关键词多线程双缓冲技术容器
Abstract
ThispaperfocusesontheapplicationofJ2MEtechnology,developedacommercialmobilephonegames--tankwar.TheprograminterfaceandoperationmodeofinheritanceintheNintendoCoofJapaninthenineteeneightiesdevelopedBattleCitygame,theagesofclassicsportedtomobilephone,formorepopularhardwareplatformtoprovideapplicationsoftware.
Themainresearchcontentofthegamedesign:
thebulletsbetweenusandtheenemydisplayedinpicture,andthegamecontainsriver,wall,grassandotherenvironmentalelements.Theuseofmultiplethreadstocontrolthetankaction,atthesametimeusingbuffertechnologytoreducethecourseofthegamescreenflickerrate.Thedifficultyofthegamewillraiseautomaticallywiththeincreaseofthenumberofthekilledenemy.Theenemyhasspecialtanks,anditwillrandomlyappearrewardsafterkillingenemys,andourtankshasthelifevaluecontrol.Thegameusesthemethodofversionupgradingtoperfectgamefeaturesgradually.
Thegameincludesamainprogrammodule,tankmodule,bulletmodule,rivermodule,wallmodule,andtheparentcontainermodulewhichaccommodatestheseobjects,rewardmodule,displayofblastmodule,configuredmodule,thesemodulesareinterconnectedwitheachother.
Keywords:
multiplethreads,buffertechnology,container
第1章绪论
1.1项目背景
1.1.1国内背景
早期的游戏不能被广泛接受最主要的就是该引擎没有具备广泛的硬件支持幅度,不能够自上而下充分发挥各等级硬件的运算资源。
目前PC游戏销量萎靡(相对于游戏机)的主要病根之一就是PC平台不同等级的硬件性能相差甚巨,而大部分PC游戏对不同级别的硬件支持范围又不够广,所以往往要么是配置需求过高,要么就是画质跟不上时代,导致玩家接受面小而严重影响销量。
而过去暴雪的游戏之所以能够赢得如此庞大的玩家追捧,除了作品本身的优秀质量以外,相对较广的硬件支持同样功不可没。
能够很好兼顾当时高配置下的优秀画质以及低端配置下同样能够提供流畅的游戏体验而闻名。
国内大多数玩家接触的《坦克大战》,都是经傅瓒改造后的版本,经典坦克游戏的编程:
原版《坦克大战》一共35关,玩家的任务是保住己方司令部,并消灭敌方20辆坦克。
傅瓒对原版的地图和参数进行修改,增加了一系列新关卡,这就是最早的“烟山版”《坦克大战》——《坦克7》(进入游戏后有“TANKA”至“TANKG”七个选项,因此得名)。
之后他又陆续制作了《坦克14》、《坦克28》、《89坦克》和《90坦克》等版本,加入了敌方坦克吃宝物、双打时互借坦克等功能,以及水陆两用坦克(可渡河的船)和火焰喷射器(可削草的手枪)等宝物,这些内容都是原版没有的。
作为这一系列的集大成者,《90坦克》是其中流传最广的一款。
其辨识方法也很简单,《90坦克》在B3、B5、B6和B7四版的地图上,分别有“福州”、“烟山”、“软件”和“542408”(电话号码)的字样,这大约是国内最早的游戏内置广告。
凭借“坦克”系列,烟山软件的营业额再次翻番,1989年突破200万元,又推出了《导弹坦克》。
《导弹坦克》已不再满足于对地图和参数的简单编辑,还对游戏程序做了修改,增加了发射导弹、加固工事等新玩法。
玩家发射的导弹可以越过地图上的所有障碍,还可以转弯;导弹用完后,玩家可以用A键加固工事或设置路障,将坦克开到砖或石头前,按A键举起砖石,到需要加固或设置路障的地方,再按A键放下。
《导弹坦克》,连同烟山软件汉化的《烟山杯围棋》、《中文麻将》和《中国象棋》等另外三款游戏,被制作成四合一卡带,这盘卡带的母片(未加密的芯片)后来被卖给了一家台湾公司,这也使烟山软件无意间成为了国内第一家“进军海外”的游戏公司。
1.1.2国外背景
FC(FamilyComputer)主机在欧美又称NintendoEntertainmentSystem(可译作任天堂娱乐平台即NES)。
FC主机在游戏业界造成的巨大冲击众所周知,这款主机在当时事实上几乎占领了世界各地多个国家的整个游戏市场,并使得逐渐没落的北美游戏市场再度复苏。
这款主机的性能比当时的多数主机都要强大,而价格上却便宜得多。
主机所采用得处理器为CMOS6502,一款已经淘汰的70年代中期产品。
由于其价格便宜且极易使用,经过任天堂的改造后又焕发了全新活力。
6502芯片主频为8bit,12MHz,内存8k,画面52色,同屏最多显示其中的13色,声音2个矩波,1个三角波,1个杂音,1个PCM音频(见图1-1)。
BattleCity是其发售卡带中的一款力作,设置了35个关卡,可以双人操纵,画面设置了若干种类的建筑物和阻挡物,以消灭所有敌人为通关条件,并有接宝物等增加游戏效果的设置,画面精美,音效杰出,在PC机的80386处理器仍未面世的当时,能在硬件上运行这样的2D程序不得不令人惊叹,难怪常有人说游戏程序是最大限度发挥硬件水平的载体。
其游戏界面如图1-2所示。
早期的游戏难免粗陋和简单,因为现在发展太快的游戏行业正缺少了那些让我们初次就爱上的游戏。
还有技术性封闭测试主要是以测试版本稳定性为主,测试期间可能出现各类技术问题。
暴雪这种精益求精的公司,实际上游戏开发人员的第一个内部开发版本就因为画风太过于类似魔兽而被彻底推翻重来,而如今面对这个十年磨一剑的续作,我们不难猜想暴雪对其重视程度已经达到呕心沥血的程度!
这款继承经典的游戏,给国人重铸的玩家带来网游的新天地。
所以玩家全心关注,官网急速启动,研发部门日夜奋斗,只为一个目标:
在第一时间开启坦克大战这款世纪经典游戏的网游增强版。
其中坦克与技能卡都能得到升级的机会,经过强化与改造,能让一辆坦克产生翻天覆地的变化。
纵观IT产业的历史,就像军事的发展时常推动计算机的演化一样,计算机游戏已经成为技术创新背后的动力之一。
计算机游戏者渴望更加强大的硬件计算能力;渴望不受不同的软件的限制——无论是将图形强制在人工智能(AI)上还是网络安全性上。
游戏开发者和玩家常常是前沿计算机技术的最早的采用者。
由于他们的创新天性,游戏不再是由大型采购公司控制的技术产品——游戏领域总是有充足的空间给那些在这方面有天分的单个创新者。
1.2项目来源
进入21世纪,社会竞争日趋激烈,同时人们的生活压力日益增大,为了在紧张的社会环境给人们带来休闲的快乐,各大游戏公司相继开发种种其乐无穷的游戏。
其中坦克大战就是其中的一款。
坦克大战早在上世纪是由日本专家任天堂的开发的,后流传到中国福建,在福建的一所高校中,由一位物理老师傅瓒修改后流行于整个大陆,现在人们所玩的坦克大战游戏大部分都是在傅瓒的基础上修改的,出于对游戏开发的兴趣与好奇,便尝试开发了此游戏
1.3设计游戏的必备知识
1.3.1Java语言程序设计的基本知识点
1.java语言支持面向对象程序语言的三个关键特性
(1)封装
将对象的数据与操作数据的方法相结合,通过方法将对象的数据和实现的细节保护起来。
(2)继承
当一个类是另一个类的特例时,这两个类之间具有父子关系。
子类就可以继承了父类的状态(变量)和行为(方法),子类可以重用父类的这部分代码。
继承关系减少了程序中相似代码的重复说明。
程序员可以再父类中对一些共同操作与属性只说明一次,而在子类中,基于子类的特性再进行扩展或是改变。
并且继承具有传递性。
(3)多态
多态可以表达为,对外一个接口,内部多重实现。
Java语言支持2种形式的多态。
运行时多态,和编译时多态是通过方法的重载实现编译时的多态,而遇到类之间的继承性,方法的重实现运行时多态。
2.类和对象的基本概念
类和对象是java中的基本组成要素。
类描述了同一类对象都举要的数据和行为。
创建一个新类,就是创建了一种新的数据类型。
类有两种基本成分:
变量和方法,成为成员变量和成员方法。
(1)public说明了类的属性。
Extend表示类继承了superclassname为父名的父类,implements关键词表示类实现了interfacenamelist中列出的各个接口。
(2)public的属性表明任意类均可以访问这个类,如果类声明中没有public,则只有定义在同一个包中的类才能访问这个类。
(3)类体。
类体提供了这个类的对象在生命周期中需要的代码,构造和初始化新对象的构造方法。
(4)类的封装与隐藏
Java中类成员的访问权限有:
public,private,以及默认权限(是没有任何定义符的)。
利用这种访问权限可以控制类中的信息的隐藏程度。
(5)方法体中可以声明方法中所用到的局部变量,它的作用域只在该方法的内部,如果局部变量的名字和类的成员变量的名字相同,则成员变量被隐藏。
如果要将该成员变量显露出来,则需要在该变量前加修饰符this。
3.方法的重写
在类的层次结构中,当子类的成员变量与父类的成员变量同名时,子类的成员变量会将父类的成员变量隐藏。
方法重写:
子类可以改写父类方法所实现的功能。
4.static关键词
在成员变量声明是用static,是是该变量声明我静态变量。
静态变量只是在系统加载所在的类时,分配空间并初始化。
main方法是一个静态方法,它是程序的入口点。
5.接口
与类相比,接口只是规定了一个类的基本形式,不涉及什么实现的细节。
接口只是进行方法的声明,不提供任何方法的实现接口中的所用方法都是抽象的,一个类可以显现多个接口,的泪但是只能继承一个抽象的父类接口与显现它的类不构成继承体系。
6.包
为了使类易于查找和使用,为了避免命名冲突,我们将一组相关类和接口包裹在一起形成包。
7.子类和父类,而没有说明抽象类的作用。
抽象类是据有一个或多个抽象方法的类,必须声明为抽象类。
抽象类的特点是,不能创建实例上面讲的只是子类和父类。
而没有说明抽象类的作用。
抽象类是据有一个或多个抽象方法的类,必须声明为抽象类。
8.抽象类与接口紧密相关。
然而接口又比抽象类更抽象,这主要体现在它们的差别上:
类可以实现无限个接口,但仅能从一个抽象(或任何其他类型)类继承,从抽象类派生的类仍可实现接口,从而得出接口是用来解决多重继承问题的。
抽象类当中可以存在非抽象的方法,可接口不能且它里面的方法只是一个声名必须用public来修饰没有具体实现的方法。
抽象类中的成员变量可以被不同的修饰符来修饰,可接口中的成员变量默认的都是静态常量(staticfinal)。
这一点也是最重要的一点本质的一点"抽象类是对象的抽象,然接口是一种行为规范。
1.3.2Java语言的特性
1.平台无关性
Java引进虚拟机原理,并运行于虚拟机,实现不同平台之间的Java接口。
使用Java编写的程序能在世界范围内共享。
Java的数据类型与机器无关。
2.安全性
Java的编程类似C++,但舍弃了C++的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针入侵系统。
它提供了安全管理器,防止程序的非法访问。
3.面向对象
Java吸收了C++面向对象的概念,将数据封装于类中,实现了程序的简洁性和便于维护性,使程序代码可以只需一次编译就可反复利用。
4.健壮性
Java致力与检查程序在编译和运行时的错误,并自动回收内存,减少了内存出错的可能性。
Java取消了C语言的结构、指针、#define语句、多重继承、操作符、重载等不易被掌握的特性,提供垃圾收集器自动回收不用的内存空间。
第2章需求分析
需求分析即是分析用户的需求,是软件计划时建立的可行性进行细化与精确,分配软件元素,是软件定义时期的最后一个阶段,它的基本任务是确定系统必须做什么。
是对要做的系统确定一个完整的、具体的、清晰的、准确的要求。
可以分为需求的提出,需求的描述,需求的评审等阶段。
需求分析也是设计数据库的起点,需求分析的结果是否准确地反映了用户的实际要求,将直接影响到后面各个阶段的设计,并影响到设计结果是否合理和实用。
需求分析的任务是通过详细调查现实世界要处理的对象(坦克、子弹、墙等),充分了解游戏的运行概况,明确开发游戏的各种需求,然后在此基础上确定游戏的功能。
调查的重点是“数据”和“处理”,通过调查、收集与分析,获得开发游戏的如下要求:
信息要求、处理要求、安全性与健壮性要求。
2.1系统需求分析
坦克大战主要需要我方坦克和对方坦克,还有我的基地,砖墙,铁墙,水,绿草,开始背景,游戏胜利背景,游戏结束背景,以及各种事件触发音乐。
我方坦克和对方坦克都可以上下左右移动,游戏的玩家通过相应的键来控制坦克的移动和发射子弹,对方坦克在创建的时候就能够发出子弹。
当我方子弹与敌军坦克相碰时会有爆炸效果产生。
当我方坦克被对方的子弹打中,或者总部被毁时或者我方坦克打中对方坦克的数目达到某个值时游戏结束。
2.2用况建模
图2-1游戏用例图
游戏中敌我双方坦克均可完成射击,开动的功能,但己方坦克的运行是通过键盘响应事件控制,而敌方坦克是根据设定相应的休眠周期来控制运行的。
同时,出现在屏幕上的敌方可能会有较多的数量,这需要为每个敌方开辟一个线程以便能让其独立运行。
Java的多线程能力为实现这样的游戏提供了可能。
敌人坦克的运行算法也需要进行适当的设置,以免游戏过于简单,单调。
2.3活动建模
图2-2游戏活动图
游戏没开始前是一个由玩家确定是否开始的界面,玩家输入1开始游戏,每一关坦克数量不同,随着关数的增加,坦克数量也在不断增加,我方坦克不关在哪一关生命值用完了游戏便结束,但只有游戏进行到最后一关并将最后一关的坦克全数歼灭我方才算取得胜利。
2.4开发环境
操作系统:
MicrosoftWindowsXP
程序语言:
Java2
开发包:
Java(TM)2StandardEdition(build1.4.1_02-b06)
Micro.J2MEWirelessToolKit2.1
IDE:
Myeclipse7.0
2.5J2ME概况及应用
2.5.1Java平台的四个版本
虽然Java已经被用到许多企业级软体上,可是其实骨子里面还是非常适合用在嵌入式系统之中。
Java平台演进到Java2后,Java平台分别针对不同领域的需求被分成四个版本,亦即J2EE、J2SE、J2ME以及JavaCard,其结构示意图见图2-3。
图2-3java版本
J2EE是Java2的标准版,其核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共同的标准及规格,让各种依循J2EE架构的不同平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间无法兼容,企业内部或外部难以互通的窘境。
J2SE是Java2的标准版,是J2EE的基础,定位在客户端,主要用于桌面应用软件的编程,它大量的JDK代码库是每个要学习J2EE的编程人员必须掌握的,它包含那些构成Java语言核心的类。
比如:
数据库连接、接口定义、输入/输出、网络编程
J2ME是为机顶盒、移动电话和PDA之类嵌入式消费电子设备提供的Java语言平台,包括虚拟机和一系列标准化的JavaAPI。
JavaCard技术主要是让智慧卡或与智慧卡相近的装置上,以具有安全防护性的方式来执行小型的JavaApplet,此技术也被广泛运用在SIM卡、提款卡上。
2.6本章小结
本章主要讲述坦克大战游戏所需要的元素以及国内外游戏的发展背景。
以及介绍了国外任天堂(Nintendo)的8位FC机器和BattleCity游戏程序,同时介绍了java语言的特性和关键知识点和开发环境,由于J2ME平台的好多特征对企业组织发展都有益,所以它被广大设备制造商、网络通信公司和消费者广泛接受。
所以J2ME平台是未来Java平台发展的重点项目。
另外因为J2ME应用在不同设备上都是便携式的,他们常常可在网络上下载和执行。
Java被设计成一种安全的语言。
所有字节码应用在执行之前都要校验;JVM在执行过程中监督应用的安全性。
第3章游戏设计
本游戏中设计的主要研究的内容:
敌我双方的坦克以及子弹均以图片方式显示,并且添加游戏包含河、墙等环境元素。
使用多线程来控制坦克的动作同时使用缓冲技术来减少游戏过程中屏幕的闪动率,当游戏的难度会随杀死敌人数量的增加而自动提高。
敌人中包含特殊坦克,杀死后会随机出现奖励物品,我方坦克是有生命值控制的。
本游戏采用版本升级的方式逐步完善游戏功能。
3.1游戏结构设计
本游戏中有游戏主窗口程序模块,坦克类模块,子弹模块,河流模块,墙壁模块,及容纳这些物体的父类容器模块,奖励模块,爆炸显示模块,配置读取模块,这写模块之间相互联系,如图3-1所示。
图3-1游戏结构图
3.2数据结构设计
游戏中各个元素定义成线程类,并且在一定的条件下某些元素随机消失,随机出现,因此为了操作的方便,将这些元素均存放在链表中,采用链表而不采用数组是因为对链表的插入和删除操作容易,且其占用内存的空间是可变的,不用像数组那样事先需要为其分配一定的存储空间,因此链表还节省了空间。
此外,还用到了泛型,将泛型和链表结合使用,是为了方便在从链表中取出元素时无需强制转换。
各元素的数据结构如下表所示:
表3.1数据结构
类名
属性类型
属性名
属性意义
默认值
Tank,SpeedTank,
FinalTank
敌方三个等级不同的坦克
int
level
坦克等级
0
int
Tank_direction
默认的方向
0
int
x
坦克横坐标
0
int
y
坦克纵坐标
0
int
Moving
是否改变方向
0
int
speed_x
横向速度
3
int
speed_y
纵向速度
3
boolean
Ruined
是否被摧毁
false
int
count
是否射击
0
Shoot
敌方子弹
int
x
子弹横坐标
0
int
y
子弹纵坐标
0
int
direction
子弹飞行方向
0
int
speed_x
子弹横向速度
20
int
speed_y
子弹纵向速度
20
PlayerTank
玩家坦克
boolean
Ruined
是否被摧毁
false
int
Tank_direction
默认的方向
1
int
level
坦克等级
0
int
x
坦克横坐标
0
int
y
坦克纵坐标
0
int
speed_x
横向速度
5
int
speed_y
纵向速度
5
PlayerBullet
玩家子弹
int
x
子弹横坐标
0
int
y
子弹纵坐标
0
int
direction
子弹飞行方向
0
int
speed_x
子弹横向速度
15
int
speed_y
子弹纵向速度
15
Bang
爆炸效果
int
x
爆炸地点横坐标
0
int
y
爆炸地点纵坐标
0
int
number
第几张爆炸图片
0
boolean
disapear
是否消失
false
Home,Bride,Fe,Grass,River
int
x
元素横坐标
0
int
y
元素纵坐标
0
3.3算法设计
本游戏中每个可以移动的对象都将其设置成一个线程,即敌我双方坦克,子弹均是以线程的形式出现在游戏中的,此外游戏中还设置了砖墙,河流,草皮,钢铁奖励物品等元素,这些元素都是以图片的形式出现在游戏中,并且存放在列表中。
游戏过程中,坦克和子弹有时会碰撞到这些元素,当坦克碰撞到墙,河流,钢铁时就会改变方向,而子弹可以击碎砖墙无法击碎钢铁,关于碰撞都是通过难证坐标是否重合实现的,以下是具体实现。
1.敌我双方坦克在界面中是以图片的形式呈现的,并存放中定义好的链表中,游戏中为其定义了全局变量ruined,类型为布尔型的,用来判断坦克是否被摧毁,当其值为true说明坦克被摧毁,此外还定义了函数Stop_down(),Stop_up(),Stop_right(),Stop_left()来判断坦克是否撞击了墙,其返回类型同样是布尔型,最后我方坦克定义了fire()函数用来射击,敌方坦克定义了shoot()函数射击子弹,在游戏中的运行情况如图3-2
图3-2敌我双方坦克
当敌人坦克完全死亡时,即tanks.size()为0且flag达到相应的值,需调用clear()函数清空桌面上的敌我双方子弹和其它元素,然后进入下一关,重新转回画面。
当然,如果当前已是最后一关,就不会再转回。
进入下一关时,许多变量需要重新被初始化,如地图的绘制、敌人出现位置的重置、敌人的数量、玩家坦克的当前位置。
如果游戏未结束,则需判断屏上坦克是否已小于还剩坦克的总数,如果是这样,就需要再提供一批坦克。
2.敌军子弹的线程在敌军坦克出现时就启动了,为了让子弹移动并且给玩家在视觉上达到子弹移
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 参考 本科 坦克 大战