【Java开源代码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。
网学会员整理了Java开源代码-基于java的坦克大战游戏 学士学位论文(有意要的可以联系我qq464520158 会便宜的哦!!) - 培训资料的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
200620112
Java 2006
Java 2006 ............................................................................................................................................. 5 ........................................................................................................ 5 ..................................................................................................................... 5 1.3 .............................................................................................................. 6 2.
Java .................................................................................................................................................. 6 2.1
Java ............................................................................................................................. 7 2.2
Java .......................................................................................................................... 7 3 ..................................................................................................................................... 7 3.1 : ..................................................................................................................... 7 ........................................................................................ 8 : ............................................................................................................................ 9 3.4 .............................................................................. 10 3.41 ........................................................................ 10 ............................................................................................................ 11 :..................................................................................... 11 ....................................................................................................................................... 11 ........................................................................................................................ 13 6 . .................................................................................................................. 14 7. ................................................................................................................... 15 ............................................................................................................................................. 16 基于
Java的坦克大战游戏 :
Java良好的跨平台特性在移动平台的开发中显示出了巨大的威力。
Java语言面向对象的优势也使得开发游戏变得非常容易。
随着计算机的不断更新与发展,
Java应用程序逐渐体现出其影响力,对丰富人们的生活内容、提供快捷的资讯起着不可忽视的作用。
本
论文着眼于
Java技术的应用,开发一款可商用的
电脑游戏程序——坦克英雄。
本程序的界面和运作方式继承于日本任天堂公司在20世纪80年代开发的Battle City游戏,将老少皆宜的经典作品移植到电脑上来,为更流行的硬件平台提供应用
软件。
本
论文介绍了任天堂红白机的软硬件特性、
Java的相关技术及本程序的结构分析和具体功能的实现。
本程序主要运用
Java语言进行编程,采用了面向对象的思考方式,建立相关的类来实现程序的各个功能,并且用贴图的技术实现了画面的观赏性和美观性。
在游戏中还加入了注册登陆的功能,让游戏更具有商业化。
:单机游戏
Java 坦克大战 THE ADVANTAGE OF
JAVA Key
words: J2SE game
Java tank war Battle City. ABSTRACT:
Java has an advantage of running in different platforms that shows its power in developing for the computer device. The advantage of object-oriented of
Java makes development of games easily. With the continuous updating and development
Java applications gradually reflect its influence on people’s everyday life providing them ever fast information just in hand. This dissertation focuses on implementation of
Java technology and has developed a commercial game suite run on computer—Tank. This application inherits many characters of the old fashioned game Battle City which developed by Nintendo in 1980s. It transports the classical product to computer offering corresponding software for such more popular hardware platform. This dissertation introduces the characteristic of Nintendo FC machine and its software J2SE and its relative technology as well as this program’s structure and analysis of implementation in details. The main use of this procedure
JAVA programming language using object-oriented way of thinking the establishment of procedures for the class to achieve the various functions and use mapping technology to achieve a viewing screen and aesthetics. In the game has also acceded to the functions of registered land the game is more commercial. :随着计算机的不断发展,电脑单机游戏渐渐进入人们的生活,成为人们生活中不可缺少的一部分。
我们每个人在小的时候都是伴随着游戏走过来的,从捉迷藏这样的现实中人们研发的游戏,到1983年任天堂公司发布的游戏机开始游戏由现实转换为虚拟。
伴随着时代的发展,一批专门为人们娱乐而研发出来的游戏机逐渐主导了一段时间,著名的有我国IGS引进于美国的街机,还有1994年日本索尼公司发布的次世代电视游戏平台——play station,直到电脑的普及和电脑单机游戏的出现。
1.单机游戏 1.1单机游戏的概念和特点单机游戏,指仅使用一台
计算机或者其他游戏机就可以独立运行的电子游戏或者计算机游戏。
单机游戏是区别于网络游戏而言的,是指游戏玩家不连入互联网即可在自己的电脑上玩的游戏,模式多为人机对战。
因为其不能连入互联网而互动性稍显差了一些,但可以通过电脑与里面的虚拟人物进行对战,而不需要专门服务器也可以正常运行的游戏。
由于其不必连入互联网也可进行游戏从而摆脱了很多的限制,只需要一台计算机即可体验游戏,同时也可以通过多人模式来实现玩家间的互动,当今的很多单机游戏都是精工细做而成,更能呈现出较好的画面、优良的游戏性,相比
网络游戏而言更有可玩性,游戏的种类更加丰富,各种游戏类型多不胜数。
但如果没有好的配置也可以玩一些不需要高配置的游戏。
1.2单价游戏的类型 当今主要单机游戏出品商有:美国艺电、Activsion Blizzard、任天堂、2K Games、KONAMI、 光荣、CAPCOM、THQ等。
单机游戏的好处还在于较不易上瘾,不会牵扯太多的时间与精力,更注重休闲娱乐性,使得人们在
工作之余能够放松一下自己,是真正的休闲小游戏。
FCFamily Computer主机在欧美又称Nintendo Entertainment System(可译作任天堂娱乐平台即NES)。
FC主机在游戏业界造成的巨大冲击众所周知,这款主机在当时事实上几乎占领了世界各地多个国家的整个游戏市场,并使得逐渐没落的北美游戏市场再度复苏。
这款主机的性能比当时的多数主机都要强大,而价格上却便宜得多。
主机所采用得处理器为CMOS 6502,一款已经淘汰的70年代中期产品。
由于其价格便宜且极易使用,经过任天堂的改造后又焕发了全新活力。
6502 芯片CPU 主频为8 bit,12 MHz,内存8k,画面 52色,同屏最多显示其中的13色,声音2个矩波1个三角波,1个杂音,1个PCM音频见图1-1。
Battle City是其发售卡带中的一款力作,设置了35个关卡,可以双人操纵,画面设置了若干种类的建筑物和阻挡物,以消灭所有敌人为通关条件,并有接宝物等增加游戏效果的设置,画面精美,音效杰出,在PC机的80386处理器仍未面世的当时,能在硬件上运行这样的2D程序不得不令人惊叹,难怪常有人说游戏程序是最大限度发挥硬件水平的载体。
其游戏界面如图1-2所示。
1.3单机游戏的开发环境 操作系统:Microsoft Windows XP 程序语言:
Java 开发包: jdk5.0Hibernate3.2的核心jar包 ,MySQL-Driver jar 开发环境 MYSQL数据库 ,Myeclipse7.0 ,Hibernate3.2, 2. 图1-1 80年代中期的FC机器 2.1
Java的定义
Java是由sun公司于1995年5月推出的
Java程序设计语言(以下简称
Java语言)和
Java平台的总称。
用
Java实现的Hot
Java浏览器(支持
Java applet)显示了
Java的魅力:跨平台、动态的
web、Internet计算。
从此,
Java被广泛接受并推动了Web的迅速发展,
常用的浏览器现在均支持
Java applet。
另一方面,
Java技术也不断更新。
2.2
Java的特点
Java平台由
Java虚拟机(
Java Virtual Machine)和
Java 应用编程接口(Application Programming Interface、简称API)构成。
Java 应用编程接口为
Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。
在硬件或操作系统平台上安装一个
Java平台之后,
Java应用程序就可运行。
现在
Java平台已经嵌入了几乎所有的操作系统。
这样
Java程序可以只编译一次,就可以在各种
系统中运行。
3 坦克大战游戏 3.1 游戏相关功能: 在开始游戏之前需要注册用户名以及密码,如果此用户名已经有人注册过将会提示,当注册成功后会转入登陆页面,输入正确的用户名和密码将会出现提示是否进入游戏画面,如果输入错误的或者没有注册过的将会出现提示。
进入游戏后,玩家可以按键盘上的↑、↓、←、→键,让坦克朝左、左上、上、右上、右、右下、下、左下8个方向行走,当玩家按下Ctrl键,坦克会以炮筒方向发射一发炮弹,当这枚炮弹攻击到敌方坦克,敌方坦克会产生爆炸。
当按下A键时,坦克将会朝8个方向各发出一发炮弹。
玩家控制的坦克有100点生命值,每被射中一发敌人的炮弹,坦克将会减少20点生命值,当生命值小于等于0时,玩家控制的坦克将会被消灭,玩家按F2键将复活己方坦克。
当玩家血少时可以接触画面中闪烁的小血块,己方坦克生命值就会立即恢复为100。
游戏初始会有20辆敌方坦克,如果消灭掉全部敌方坦克系统会自动添加进去15辆坦克。
游戏中存在两堵墙,己方坦克可以穿越墙壁,但是敌方坦克不能穿越,坦克与坦克之间也不可以互相穿越。
子弹碰到墙壁时也不会穿越墙壁。
3.2本程序需解决的有关技术问题: 1. 游戏
程序是一项精度要求很高的程序系统,因为其
代码利用率很高。
一个实时运行的最终作品,每秒都会运行成千上万行程序,绘图事件、键盘事件都会以极高的频率在后台等待响应,若有丝毫的差别都将很容易导致程序在运行不久后可能出现严重错误,甚至死循环。
因此,其逻辑设计应当相当严谨,需将所有可能发生的事件及意外情况考虑在
设计中。
2. 游戏中为了美观,适用性强,可能需要采用外部文件引入的图片贴图,有关贴图,解决静态或动态、画面背景、屏幕刷新的双缓冲等都要考虑解决 3 己方坦克的运行可以通过键盘响应事件控制,但敌方则因为是自动运行,就需要有一定其一定的智能性;同时,出现在屏幕上的敌方可能会有较多的数量,这需要为敌人的坦克加入一些算法让敌人的坦克也可以移动、攻击,这样游戏的运行才更加合理,让游戏增添乐趣。
4. 对于双方坦克发出的子弹的控制也需要对其跟踪控制,子弹也需要处在独立的线程中。
敌方子弹仅需要扫描用户坦克,而用户坦克需要在每一步扫描所有的敌方坦克。
这需要对所有的对象有较好的控制。
另外,子弹在运行过程中也需要实时扫描是否碰撞到了相关障碍物或屏幕边界。
但是游戏进行时间长了,内存的占用就会越来越多,要考虑怎么解决子弹合理占用游戏的内存,消失掉的子弹就相应的不占用电脑的内存。
5. 双方的坦克在前进时也需要考虑到是否碰撞到相关物体或对方坦克,以免重叠运行,造成许多物理上不可能的情况,缺乏真实感。
6. 当游戏中的敌人坦克都被消灭后,要加入新的敌人,还有自己被地方坦克消灭掉后怎么样继续游戏,这样才能使游戏更耐玩而不至于短时间内完成游戏,让玩家可以对这个游戏乐此不疲。
7.在游戏中不能单调的躲敌人的炮弹,要增加障碍可以让玩家更好的利用地形和敌人周旋,这就需要在游戏画面中增加新的东西,让整个画面的地形更加灵活。
8. 用户运行游戏时坦克的移动会存在闪烁问题,因为paint方法还没画完刷新重画就已经完成了,怎样消除闪烁现象是影响游戏的运行和游戏质量的至关重要的问题。
9.这款游戏增加了注册和登陆的功能,这就需要连接数据库,对数据的储存、调用,以及为了防止不同玩家
注册同一个用户名就需用一个合适的方法去解决。
3.3 程序流程: 本程序采用面向对象的设计模式,对游戏中的所有物体赋予对象的概念和属性。
运行程序后允许用户选择执行注册功能,再注册后就会跳转到
登陆页面,登陆注册时的用户名和密码后,点击确认键就会开始进行游戏。
在主程序运行的线程中,画面刷新将以一定的频率采用双缓冲技术对屏幕重绘,实时反映整个游戏的进行状态。
用户控制的坦克运行在主线程中,随屏幕刷新的频率而步进。
二十辆敌方坦克将在游戏开始时出现,每一个敌方坦克都会自己运行并且发出炮弹,如果被击中就会掉20的血量,如果用户血量0时,用户坦克灭亡当用户打掉所有敌方坦克后,系统将会自动添加进去新的敌方坦克。
用户坦克自诞生之时起将拥有一发子弹,子弹虽然开在单独的线程中,但运行结束后(比如撞到相关物体或敌方坦克时)并不结束子弹对象,只是将其线程终止。
用户再次发射子弹时只是将终止的线程再次激活。
在屏幕重绘的主程序中,将在每次的循环中判断若干事件。
如:用户坦克的生命是否已完全用尽,敌方坦克数是否已经为零。
以便程序进入相关的分支执行相关的反应
代码。
主程序流程如图所示: 注册 登陆 主程序 屏幕绘图 进入游戏 按F2重新加入战斗 About 开始 敌方需要出坦克时,生成坦克 初始化参数 死亡时 本程序的主流程图 3.4坦克的控制和敌方坦克的智能运行: 让坦克动起来并且听从我们的指挥需要将坦克的位置定义为一个变量并且启动线程不断重画,在这里我选择线程重画而没选择按键重画的原因是线程重画更均匀,更能控制重画的速度,而按键重画则不能解决将来子弹自动飞行的问题。
然后添加键盘监听器类Key Monitor,并在Tank Cient添加键盘监听器,让坦克听从我们的按键指挥,在这里要针对不同的键改变坦克的位置,与重画线程结合产生不同方向运动。
我定义的坦克的行走方向为左、左上、上、右上、右、右下、下、左下8个方向,定义坦克的8个方向需要添加记录按键状态的布尔量、添加代表方向的量(在这里我使用的是使用枚举类型),增加一个移动的方法和移动的位置再根据按键状态确定Tank方向,从而根据方向进行下一步的移动(move)。
3.41坦克出界和互相不能穿越的问题: 关于坦克的出界以及将来坦克的相互击中,我在这里给坦克定义了一个宽度和高度以便解决坦克出界以及将来击中的问题。
public static final int WIDTH 30 public static final int HEIGHT 30 其次只需要在坦克的MOVE方法里的认定坦克停止的程序后添加一个对于坦克的边碰到边界就停止的命令,
代码如下: ifx lt 0 x 0 ify lt 30 y 30 ifx Tank.WIDTH gt TankClient.GAME_WIDTH x TankClient.GAME_WIDTH - Tank.WIDTH ify Tank.HEIGHT gt TankClient.GAME_HEIGHT y TankClient.GAME_HEIGHT - Tank.HEIGHT 敌方按照规则不能和用户坦克重合,则它每行走一步就需要把用户坦克扫描一次,判断 其是否碰撞到了用户的坦克。
提供了collidesWith函数,用于判断是否与其它坦克之间有图象上的重合(即游戏中的碰撞)。
然而建立一个记录步骤的oldxoldy坐标,因为如果发生碰撞,CollidesWith成立,则两辆坦克已经发生了图象重合,违反了规则,回到上一步的坐标就是oldxoldy,数组就会继续执行坦克就会换一个方向行走。
敌方坦克由于需要具有一定的智能性,以便对玩家攻击,使之具有一定的可玩性。
敌人可以自动行走,但是应当在以下适当的情况下转向:首先是是否超出界面的边界,其次是是否与地图障碍物发生了碰撞,设置一个步数的监听就可以记录坦克运行的位置,当坦克遇到以上
问题就会回到上一步的坐标,这样随即数会继续运行下去就会换一个方向让坦克,就不会出现坦克如果碰到障碍物就会贴在上面无法继续运动的情况。
3.42 子弹的构造: 子弹的构造和坦克的构造方法差不多,,在这里我给子弹也添加了一个容器,当抬起ctrl键的时候容器就会添加一颗子弹进去,在画面上就会发出一发炮弹。
对于玩家控制坦克和敌方坦克的相互攻击,既然坦克可以设置为good和!good,我在这里把子弹也设置成好坏之分,给子弹添加一个成员变量,这样就解决了敌人坦克打出的炮弹也可以攻击到玩家坦克的问题。
由于每抬起一次ctrl键就会向容器(list)中添加一发炮弹,这样会使内存的占用一直多下去,直到内存耗光,为了让游戏能够长时间的进行下去,就必须解决子弹不消亡的问题。
在这里我在子弹类加入了控制Missle生死的量live,判断当炮弹飞出边线就判定为其死亡,当炮弹死亡就从容器中去除掉,在炮弹死去的时候在paint就不对其进行重画了。
3.43 坦克和子弹的贴图技术: 首先定义一个Image数组,private static Image Tank Images null并且把坦克的8个方向的图片加入,让坦克朝哪个方向时,显示哪个方向的图片。
再此就可以删除最开始定义的坦克的圆了。
子弹的贴图方法与坦克相同。
4.工作流程: 本游戏必须注册登陆后才可以进行游戏。
注册的用户数据将如数据库保存,并且进行验 证。
连接数据库:本游戏使用的数据库是sun公司的
免费小型数据库MySql。
连接数据库采用的是JAVAEE当前运用最成熟的对象持久化
开源框架Hibernate。
之所以采用Hibernate,原因有二。
首先是,Hibernate是基于配置的框架,数据源与数据表都在配置文件中配置,可以方便以后更改数据库或者移植到其他机器上面运行,只用修改配置文件而不要重新编译
代码,更好的符合
JAVA的特性。
其次是,作为当前企业级对象持久化解决
方案的数据库框架应该多加练习,使以后使用的更加熟练。
用双缓冲解决坦克移动闪烁的问题: 闪烁问题的产生是想做运动就会让线程不断重画,因为刷新重画频率太快,paint方法还没有完成造成的,就像在网络上网速慢时,图片就会逐条显示出来的原理一样。
解决闪烁问题的方法就是将所draw的东西画在一张虚拟的图片上,当用到图片时就让虚拟图片一次性全显示出来,首先定义这个虚拟图片: Image Off Screen Image null 在repaint调用paint方法之前会通过updata方法,所以这里在updata这里拦截,让它先调用updata方法,相关
代码如下: public void updateGraphics g ifoffScreenImage null offScreenImage this.createImageGAME_WIDTH GAME_HEIGHT Graphics gOffScreen offScreenImage.getGraphics Color c gOffScreen.getColor gOffScreen.setColorColor.BLACK gOffScreen.fillRect0 0 GAME_WIDTH GAME_HEIGHT gOffScreen.setColorc paintgOffScreen g.drawImageoffScreenImage 0 0 null 5 .游戏的相关贴图: 6 .对于游戏在市场的调查 如上两图所示,来自对上海地区200个游戏用户进行非概率配额抽样,通过街访完成得出上海地区的游戏用户中,喜爱休闲类单机游戏为24.1. 而根据IDC调查指出,在亚太地区有55玩家喜欢玩大型多人在线角色扮演游戏Massively Multiplayer Online Role Playing Game,MMORPG;32的玩家喜欢玩个人计 算机游戏,如实时战略RTS和3D射击动作游戏3D Shooter;而13则玩街机Ar
cade、休闲游戏和其它游戏。
相较于两组资料,我们发现休闲单机游戏虽然不是占喜欢人数最多的,但是基本上70,80后的人群都玩过,潜在的游戏玩家非常多,而且这款游戏的可拓展性强,可以拓展成以上大部分游戏类型,更为重要的一点是这款游戏曾经风靡全球,几乎所有的游戏玩家都玩过坦克大战,因此游戏前景非常被看好,课题的价值评估非常高。
如上两图所示,来自对上海地区200个游戏用户进行非概率配额抽样,通过街访完成得出上海地区的游戏用户中,喜爱休闲类单机游戏为24.1. 而根据IDC调查指出,在亚太地区有55玩家喜欢玩大型多人在线角色扮演游戏Massively Multiplayer Online Role Playing Game,MMORPG;32的玩家.