功能和不足 

  

    本程序设计实现了手机上以 J2ME 为平台的一个射击类手机游戏的开发与实现,采用从外部文件读取图像、自动控制敌人机体运行的方式进行控制,具有一定的可玩性、复杂性和挑战性。经过了细心的调试和排错解决了绝大部分的问题。
就像几乎每一个软件都会有这样那样的不足,尤其是像本软件那样未经过精心测试,且开发团体很小,开发者知识面较窄,开发时间相对较短的非商业软件。即使是作为经典操作系统而被微软及整个软件行业引以为豪的各版本的 Windows 操作系统也时常会发生许多类型的错误和漏洞。本程序对于初涉此领域的毕业设计课题来说,尤其在开始初期,感觉逻辑复杂,难以控制,因此至今还有一些未能解决的 bug
                           
本游戏主要实现的功能有:
⒈采用 MIDP 2.0 规范,游戏中的碰撞检测——象素检测比较精确;
⒉实现了敌机的简单 AI 功能,使游戏具有一定的可玩性和挑战性;
⒊实现了记录最高得分及游戏得分、玩家等级等功能;
⒋在游戏中将随机出现宝物——国旗,凡捡拾到一面国旗,将可以增加一定量的生命值,使游戏趣味性大增;
⒌实现了背景画面的纵向动态效果,使游戏更加逼真;
 
目前发现的 bug 和未完善的功能列表如下:
⒈如果与敌机相撞,原本设计的将出现烟雾状图片,但出现该图片后,图片不会自动隐去,直到该屏消失;所以在本程序中将主要出现的白色飞机没有令其出现爆炸图片,在飞碟出现时留有该功能,但显然不够理想;
    ⒉敌人的人工智能变化较少,仅实现漫游 AI 中的追踪 AI AI 实现不够理想;
    ⒊×××和敌人经常会与画面的刷新的线程不同步,有时造成画面闪烁;
    ⒋由于每次×××发射和每次机体的移动的一个象素都会对所有机体和所有×××进行一次循环检查,并由于同时开的线程比较多,使得本来运行效率就不高的 KVM 运行异常缓慢。即使刷屏没有间隔也不会提高速度;
    ⒌本游戏宝物设置还不够理想,仅实现增加生命值这样一种宝物;
⒍游戏画面单调,且没有实现升级前后背景的变化。

 

  经验和感想
 
⒈在后期为了优化界面,本打算运用 MIDP2.0 规范,需要采用外部文件引入的图片贴图,有关贴图,在 MIDP2.0 中提供了用于增强游戏功能的game包,使得解决静态或动态、画面背景、屏幕刷新的双缓冲等都有较好的解决方案,后来因为时间以及游戏复杂程度的限制而没有采用。由此可见,本程序的优化,改进和维护将还有很大的空间,在实际的工作中应该对程序精益求精,在以后的时间里,还将对本程序进行进一步的优化。
⒉游戏程序特别是手机游戏程序是一个精度要求很高的程序系统,因为其代码利用率很高。一个实时运行的最终作品,每秒都会运行成千上万行程序,碰撞检测、 AI 实现、绘图事件、键盘响应、图片(音乐)提取等都会以非常高的频率在后台运行并且等待响应,若有一点点的差错都将很容易导致程序在运行不久后可能出现一些 BUG 、错误甚至死循环。因此,其逻辑设计的严谨显得相当重要,需将所有可能发生的事件及意外情况考虑在设计中。
⒊己方机体的运行可以通过键盘响应事件控制,但敌方则因为是自动运行,就需要有一定其一定的智能性(这点没有来得及优化,觉得牵涉到关卡设计,比如每个关卡背景图片不同,背景音乐不同,包括敌机战斗力更强等,由于时间及技术原因没有实现);同时,出现在屏幕上的敌方可能会有较多的数量,这需要为每个敌方开辟一个线程以便能让其独立运行。 Java 的多线程能力为实现这样的游戏提供了可能。
⒋×××,战机(包括敌我双方)在运行过程中也需要实时扫描是否碰撞到了相关物体或屏幕边界。如此过多的线程同时在本来效率就不高的KVM虚拟机上运行,有时也许会导致程序的缓慢(特别是用模拟器时,有时多次载入程序会导致系统停止响应)。双方的机体在运行时也需要考虑到是否碰撞到相关物体,以免重叠运行,造成许多物理上不可能的情况,缺乏真实感。每一次刷新页面、每前进一步都需要将所有的周围环境都进行扫描。 
⒌游戏的结束、开始、动态信息画面作为构成一个完美程序都是必不可少的重要部分。良好的用户界面更是吸引用户的硬指标,相关的美术构图也需要有一定的考虑。 Java 是基于虚拟机的半解释型编译系统,其执行效率较 C++ 等完全编译后的程序会低很多,程序如果不进行精简和优化,将可能导致运行的不流畅。除开发过程中对结构上的控制、变量的使用、算法的优化等优化外,还可以使用混淆器( Obfuscator ) 进行程序打包后的优化。
 
   各种应用软件开发和游戏相比,我仍觉得对游戏的设计有更大的热情。因为其各个模块间的联系十分紧密,代码重复执行率高,当经过无数次的调试、修改后,能最终看到成品,心情也是倍加舒畅。相比一些数据库软件,游戏的设计有很多人文色彩(游戏思想,故事情节,玩家心态等)和艺术思想(界面美观,实现逼真,使玩家有身临其境的感觉)可供发挥,这也使得众多的游戏开发者乐此不疲,兴趣盎然。对于正式商业化的软件的人性化界面和各个游戏间迥异的结构每每会让人有去尝试的冲动。
游戏程序特别是手机游戏程序最大限度的利用了硬件条件,因此在小小的屏幕上展现出的效果带给玩家的往往是多彩绚丽、而又效果惊人。成功的游戏融合了三维运算(本游戏程序为二维)、人工智能、音效处理等计算机多媒体的精华部分。 很多相关的技术,如游戏界面的设计与实现,需要使用到的线程、RMS数据库、Game包的功能、高级、低级图形界面的使用、贴图,背景乐音的提取及播放,每一项都需要花一定的时间去掌握和熟悉。在学习J2ME的过程中,也学习了国内外一些经典书籍,像美国Michael Morrison著的《J2ME手机游戏编程入门》,郎锐,孙方编著的《J2ME手机程序Eclipse开发基础》一直放在电脑旁随时翻阅。
在正式开始编写之前,我照猫画虎的写出一小段绘图代码(仿郎锐的“Paint”)时,已经过去了相当长的准备时间。当掌握了大部分应用技巧时,剩下的游戏思路的设计,具体功能的实现,调试,优化就显得不是最大的障碍了。 我在半个月的时间内写了近3000行代码,经过了无数次的调试,终于基本完成了现在的程序。 回首上个世纪80年代的手持机上的机体大战原始游戏任天堂的游戏小子(Nintendo Game Boy),将会惊叹那个时代的商业软件的巧夺天工。华丽而友好的界面,出色的人工智能,流畅的运行效果、多音效、双人操作控制,其二进制程序体积仅仅为24K。运行在12MHz8K内存的硬件机器上仍不失其流畅性和可玩性。而许多J2ME游戏程序需要200K的运行内存空间、200MHz的处理器,仍运行不够流畅。机器代码级和基于虚拟机的半解释性处理的程序在这里得到了最大的对比。