基于JAVA设计炮台打飞机小游戏的问题分析

来源 :科技风 | 被引量 : 0次 | 上传用户:guoke3zhang
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:近年来,JAVA以其简单性,可移植性和平台无关等特点,广泛应用于Android应用、金融业应用、网站、嵌入式领域等,所以JAVA成了许多编程者的主要选择。像炮台打飞机、贪吃蛇,五子棋等一些小游戏是初学者实战的很好例子。
  关键词:JAVA;炮台打飞机;编程;游戏
  炮台打飞机的游戏我们经常玩,所以对大家来说都不陌生,对于初学者来说确实是一个不错的选择。但是对初学者来说确实会遇到很多问题,所以我们在这里做一些简单的介绍。
  1 游戏世界
  现在的游戏,能够在正确的位置绘制出正确的图形,使用屏幕空间和游戏空间是必不可少的。我们需要一个空间,用来保存整个游戏世界里面的数据,在每一次游戏更新画面的时候,取出要进行更新的那一部份数据,将其绘制在屏幕上。在游戏世界中一般使用笛卡儿坐标系,而在绘制图像中一般使用屏幕坐标系。在游戏世界中使用笛卡儿坐标系是因为处理方便。而绘制图像使用屏幕坐标系是因为很多的标准绘图函数提供的接口都是使用屏幕坐标系,包括C,JAVA,OPENGL和DIRECTX。所以,这项代码的编程难度,就是坐标空间的转换。具体的实现方式有很多,也有很多前辈封装好的转换函数,大都用矩阵的乘法来进行运算。我们自己写了一套平移,旋转,翻转和缩放的代码。这个CLASS的实现,方便了我对于坐标的理解,有了这个CLASS的帮助,只需要在笛卡尔坐标系下对游戏中运动的物体进行每帧位置的更新即可,而不需要把使用屏幕坐标系进行位置更新。这样不仅代码简单,也利于游戏的移植。
  2 飞机刷新
  游戏之所以有趣,就在于其变数,俗称随机性。每一次开始游戏,都可以遇到不同的事件,这会引起玩家不断挑战的欲望。一般的游戏,都会配备一个地图编辑器,就像魔兽争霸的世界编辑器。这些东西的存在很好的划分的了游戏引擎和游戏内容,而且允许玩家創建属于自己的游戏世界也会让游戏能存活得更久。说来惭愧,我们只是创建了一种生成飞机的方式。具体的做法是:用一个值timePass保存已经逝去的时间,当然他的初始值为0。在每一次游戏循环中,不断的读取当前的时间time,让timePass+=time。在每一关里面,都有一个生成飞机的控制:当当前时间大于x秒的时候,消耗y秒,生成一个z类型飞机,每一次生成飞机之后,timePass=y。这样做主要是防止出现不断的刷新飞机的情况。
  3 主动刷屏
  FPS是每个即时游戏的基础,也是游戏和软件最大的不同之处。软件倾向于被动刷新,即等待系统的REPAINT消息,而游戏则要求主动刷新。由于人眼睛每秒钟最多捕捉24张画面和滞留效应,电视的制作得以成为可能。而电子游戏的成功也离不开。对于一般的智益类游戏来说,FPS大于24即可,这也是老式DOS游戏的标准刷新频率。而对于动作类游戏来说,要求FPS达到60甚至更高。现在的机器的性能都非常的高,如果不加入SLEEP,那么一秒钟内可以进行过百甚至过千次的游戏循环。虽然可以不加入SLEEP让游戏以全速的方式运行下去,但是,这样只会造成不必要的资源浪费,CPU使用也会出现居高不下的情况。以FPS60为例,SLEEP具体的算法是:当本画面开始更新时,记录一次当前的时间。然后,通过不停的等待,检测下一次更新的时间(1/60秒)是否到来。如果到来,就纪录当前的时间,然后对画面进行更新,继续检测下一次更新的时间。我们写了一个比较完美的代码在TIMER.JAVA中。
  4 键盘响应
  游戏必须要的就是和玩家的交互。可惜的是,WINDOWS系统提供的键盘消息,根本满足不了游戏每秒60FPS的要求。所以,必须主动获取当前键盘的状态。在老式的DOS平台上,软件可以直接读取键盘的缓冲区,然后对缓冲区中的信息进行分析,提取出所需的数据。使用C语言WIN32编程,主要是通过调用GetKeyState和GetSynsKeyState这两个比较底层的函数查询当前键盘中某个游戏感兴趣的按键的状态。不过,JAVA没有直接读取键盘缓冲区的方法,也没有检测键盘状态的函数。不过,最后我还是找到了一个解决方案。具体的原理是:开一个THREAD,这个THREAD不断监听键盘消息,将所有的键盘消息保存到一个STACK中。每当游戏循环一次的时候,游戏引擎复制一份THREAD中STACK中的数据,不断的访问他们,以获取当前键盘的状态。这样也不会发生在一秒钟内,快速点击键盘而发生漏掉消息的情况。而游戏引擎还要为每个KEY保存一份他们上一次的状态。如果这一次STACK中,某个KEY没有KeyUp的消息,而上一次这个KEY状态中是KeyDown的,那么,引擎要告诉游戏,这个KEY连续一直被按下且没有被释放过。
  5 粒子效果
  虽然我读过相关的知识,也曾经在魔兽争霸3的平台上使用T语言进行过粒子效果的编写,不过在C,C++,JAVA平台上,我都没有尝试过制作这样子的效果。所以我对我能否制作出这样子的效果是带有疑问的。不过我尝试着去做了,最后我发现自己做得也可以。我在飞机的爆炸,战舰移动的波浪,子弹的弹道都使用了粒子效果都使用了自己写的粒子效果。虽然它只是一个简单的点的绘制,在生命周期结束之后自动释放。具体的时间方法是:创建一个粒子(Particle)对象,里面有粒子当前的坐标,已经存活的时间,移动的方向,还有粒子的颜色。然后用一个粒子表(ParticleList)来管理所有的粒子。每一次游戏循环,更新所有粒子的位置,然后减少粒子的生命。如果粒子此时的剩余生命小于0,则从粒子表中删除之。否则,在粒子当前所在的位置,用粒子颜色的笔绘制一个点。后来,我还使用了Graphics中的透明度,绘制的粒子还拥有透明度效果,让粒子效果更加的逼真。具体的做法是,检测粒子当前的生命值(cur)和最大的生命(max),设置创建的笔的透明度为cur/max。
其他文献
基于原子和腔场的双光子共振相互作用,提出了一种制备多原子纠缠态的方案。
摘 要:职业倦怠是上班族在工作的重压下所体验到的身心俱疲、热情耗尽的感觉,它缘于心理的疲乏。当前,人们产生职业倦怠的周期越来越频繁,人力资源管理者也越来越重视。本文从文化馆从业者个人能力得不到发挥、作品认可度低、无法获得成就感等方面分析了这个行业职业倦怠的成因和对策。  关键词:文化馆;职业倦怠;成因;对策;分析  职业倦怠又称工作倦怠,是美国心理学家弗鲁顿伯格于1974年最早提出,是上班族在工作
本文详细研究了利用核磁共振方法实现基本量子逻辑操作,提出了实现量子分立付里叶变换的实验方案,设计了可供实验的脉冲系列,为实验研究量子分立付里叶变换提供了具体方案。
[摘要]由于独立学院其鲜明特点,学生的组成结构既不同于普通高校的本科生,又区别于高职院校的专科生,因此其心理特点、学习能力、行为特点、思想状况、价值取向及人生追求等均有显著的特征。因此,班导师在独立学院人才培养中起到重要的作用。  [摘要]独立学院 班导师 工作探索 工作实践    独立学院作为一种新型的办学模式,伴随着我国高等教育由精英教育向大众教育转变。它作为办学体制的创新形式,一出现就具有自
知识经济时代,知识创新是一个国家经济发展的决定性因素,而知识创新则有赖于既有扎实的理论基础,又具有实践和创新能力的人才.近年来,我校把实践教学作为理论与实际、知识与
思想品德课教学生活化,是新课程改革的核心理念.因此,广大思想品德教师必须坚持课堂教学生活化,将学生、课堂、教材与实际生活联系起来,把鲜活世界提供给学生去了解、理解和
摘 要:在分析了循环水流量变化而引起的凝结水过冷对机组电功率影响的基础上,加入了水资源成本,凝结水除氧费用因素的考虑,对发电机组进行经济性分析。  关键词:循环水流量;过冷度;经济性  中图分类号:TK-9 文献识别码:A  Abstract:On the base of analysis of the influence of the condensate subcooling degree c
它们走过的路不尽相同,但毫无疑问,它们都是跨国经营的成功典范。
为了更好的促进临床医学专业课程教学改革,我系就医学高等职业院校临床医学专业开设相有关课程进行调查问卷调查,旨为进一步加强和修订医学高等职业院校临床医学专业程课程设
摘要:本文介绍了某船电站发电机并网过程中出现的一例故障问题,从发电机并网的条件入手对发生故障的原因进行了分析,总结了设备使用人员经常出现的操作、设备老化等故障原因,并从努力学习掌握要领、及时保养确保可靠、参与检修了解机理等方面对如何提高并网可靠性提出了针对性意见,对于保障船舶电力系统与航行安全,具有一定的借鉴意义。  关键词:船舶发电机;并网失败;解决措施  1 绪论  某船是由五台型号为HFC6