Android坦克大战游戏设计解析八篇及代码下载

399 篇文章 2 订阅

游戏引擎移植Java ME的Game API,对于简单的游戏入门简单,效果也不错。

 

在Java ME Game API中提供了几个类。

Layer类,该类为一抽象类,提供了游戏人物及背景的层次的基本构架,它代表了游戏场景中一个可视化的元素,如游戏人物(Sprite)或是分片背景(TiledLayer).
Sprite类,为一个基本动画游戏人物,它可以显示多个动画帧中其中一帧,比如人向前,向后,向左,向右,坦克大战游戏中各种坦克就是一个sprite类对象,它可以显示坦克向四个方向移动的图象,并可很容易实现动态效果,如坦克履带移动的动态效果。它也支持了各种碰撞检测,比如子弹击中坦克,或是打中砖块等等。
TiledLayer类,一般用作显示游戏背景,为了能显示范围较大的背景,一般游戏背景地图可以通过小的图片拼接而成。TiledLayer用于实现由一个二维cell (分片地图)组成背景,这个类也提供了动态背景的支持,比如,坦克大战背景中水面的动态效果。
LayerManager 类用于管理多个Layer ,sprite,及TiledLayer都是Layer的子类。在坦克大战游戏中,LayerManager用来管理坦克及背景,TiledLayer 及sprites在LayerManager管理下有层次的关系(Z-Order),前面的Layer会遮挡后面的Layer.

 

 

 

  1. Android坦克大战游戏设计解析一
  2. Android坦克大战游戏设计解析二
  3. Android坦克大战游戏设计解析三
  4. Android坦克大战游戏设计解析四
  5. Android坦克大战游戏设计解析五
  6. Android坦克大战游戏设计解析六
  7. Android坦克大战游戏设计解析七
  8. Android坦克大战游戏设计解析八

 

代码下载 Android版坦克大战    http://www.imobilebbs.com/download/android/battlecity/AndroidBattleCity.zip

Java ME版坦克大战 http://www.imobilebbs.com/download/android/battlecity/BattleCityJavaME.zip

 

代码源于反编坦克大战游戏的apk文件 Android apk文件 反编说明 一.------ 反编apk文件目的 目前反编android程序功能最强的jd-gui.exe(http://laichao.googlecode.com/files/jdgui.zip), 也只能反编没用混淆器编译的android程序的80%代码,对于混淆器编译的android程序,只能 反编不到10%代码。    借鉴成功的商业程序代码,是新手快速提高编程水平的途径。为此,笔者制作了 android反编译工具,能将混淆器编译的apk文件,还原java文件,资源文件的android开发 项目。可以直接编译目的apk文件,运行效果与原apk一样。只有能正常运行的程序,才有价值 对它进行分析、借鉴。  二.----- 反编java的成员,方法名,类名     经混淆器编译的apk文件,会将原代码的成员,方法名更换为单字符的短名。例如原代码 成员名GetName、方法名PayDialog() 经混淆器编译后,转换为a、b()的短名,这是为了 增加反编代码的阅读难度,同时也阻止成员名,方法名的搜索定位,是防反编译的重要手段。 为提高反编译代码的阅读性,笔者的android反编译工具,将成员,方法短名,按一定的规则 转为长名,使得成员、方法名具有很强的逻辑性,大大提高了代码的阅读性。   成员、方法短名转换为长名的规则: 1-- 公共成员名: 短名a --> Pa_源类名_类型  注: 源类名-声明公共成员所在的类名; 类型 -成员的类型,如int类型的成员,类型字符就是int     2-私有成员名: 短名a --> Ma_类型 3-- 公共方法名: 短名b() --> 源类名_bxxx() 注: 源类名-- 声明公共方法所在的类         xxx   -- 3位数字序号 4-- 私有方法名: 短名b() --> pri_bxx() 5-- 本地成员(方法内的变量):  短名c --> Lc_类型 6-- 类名: 短名a.java --> axxxx.java 注: xxxx -- 4位数字序号  从长名的字符,就可以直接知道成员的属性(如公共、私有、本地的成员,成员的类型, 公共成员的源类名),同时, 长名字符串是唯一的,可以用于字符搜索查找精确 定位、更换,大大提高了反编java代码的阅读性,不亚于阅读原代码。 对于编译时,无混淆为短名的成员、方法名,反编时,还是采用原代码的名称。 只要不符合上面规则的成员、方法名称,就是原代码的名称。    一般说来,成员原名字符,是编程人员自定义有一定意义的字符串,可以望字生意。  但成员名毕竟不是短文,非原编程作者,很难从短短几个字符,就能知道成员的作用。只能通  过分析成员在上下文的赋值、取值关系,才能准确地了解成员的作用;另一方面,成员原名字符,  尤其是字符短的成员名,一般都不能保证字符串的唯一性,造成查询定位成员的困难,影响程  序的分析。        按公共,私有,本地成员的作用域不同,分析的側重点要区别对待。分析程序的整体功能流程,重点  要分析公共成员和公共方法,分析类,方法的功能呢时,重点放在私有、本地成员上。 反编的成员长名,有很强的逻辑性, 从长名就能直接知道成员,方法的作用域和源类名(声明该成员, 方法所在的类名),这大大降低了分析的难度。         三.---- 反编的循环控制层风格          因编译后,会将原java代码的for (i=1,100,i++)循环语句 转为 for ( ; ;), if (i>100) { break} else { i++}    2条语句,反编后的java的也是用上面2条语句代替for (i=1,100,i++),但在if语句附上"控制if“的注释     同样,用for ( ; ;) 取代原java的 while 语句    四.---- 反编的类形式        反编的java 都用独立的类取代原码的类中类,匿名类。 虽然对于只使用一次对象值的(通常是监听类),都可以将独立类改为匿名类。但笔者认为, 将一大段匿名类代码放在方法的参数中,会影响阅读性, 倾向于独立类的阅读性好于匿名类。     五.----  项目各目录的简介     本项目反编于 网上下载游戏 2.0.4版本的apk文件, 在Eclipse平台上的android 2.2版本(android-8)能成功编译,正常运行。在编译前,要将用户   本地2.2或以上版本的android.jar链接到本项目。     assets\ -- 背景声文件        bin\ -- 由编译所生成的class、 apk 文件     gen\ -- 由编译所生成的R.java(源于res\的资源数据) libs\ -- 原生态引擎库 res\ -- 图片,字符的资源库     src\ -- 程序(java)文件 AndroidManifest.xml -- 项目的配置文件  project.properties -- 配置Android版本文件 readme.txt -- 本内容 六.---- 不足与该进     目前反编的java,都直接用android常量数值,而无用到常量名。这影响了程序的分析。    如 src\cn\koogame\ui\KooUiActivity.java 的onTouchEvent() ( 重载手势方法中)中,      可以用 case MotionEvent.ACTION_MOVE: 代替 case 2: ,显然前者阅读性优于后者。    因笔者还没有android常量大全资料,只好暂时直接地使用常量值。若那位读者愿提供 Android常量大全资料,非常欢迎发到笔者的邮箱 walte139@163.com 。 若有建议、意见、批评,也欢迎发给笔者。 Walte 2013.10.12                 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值