暑期Android游戏开发——小兔子跳铃铛(附源码)

一. 背景说明

  我在南京的一所高校学习软件工程。学院里每年会举行一次“创新杯”软件比赛,鼓励同学自主学习和创新。我和几个好兄弟自组“铁男组”参加。经过几个晚上的商量,兄弟们决定在Android上开发游戏。暑假了,兄弟们回家的回家,留校做项目的做项目。而我决定留校自学Android,算是为新学期大家的共同开发铺路吧。

  该怎么学呢?看书加实践!在网上看到一个小游戏——小兔子跳铃铛(http://www.vifo.com.cn/games/no2/tiaolindang/tiaolindang.swf),觉得挺有意思且难度不大,于是决定模仿该游戏,移植到Android平台上。

  我是7月12号开始接触Android,花了一个月时间学习时间,也就是在昨天,beta版出炉了。虽不完美,但看着自己亲手完成每一行完成的程序,心里挺乐的。

  我将源码贴到网上(http://www.rayfile.com/files/f8b99ad1-c4e8-11e0-bb73-0015c55db73d/),有兴趣的朋友可以下下来看看,希望对大家的有所帮助,菜鸟互帮,团结就是力量嘛~也非常希望得到牛人的指点,小弟不胜感激。

二. 运行效果

三. 运行环境说明

我时用Eclipse开发的,在模拟器上运行。模拟器的配置如下。大家注意下Skin选项中Built-in 必须是“WQVGA400”(这是我游戏的一个缺陷)。

四. 体系结构说明

  在看这部分之前,我建议大家先到网上玩玩那个小游戏(http://www.vifo.com.cn/games/no2/tiaolindang/tiaolindang.swf),相信会对你对我下面类容的理解有所帮助。

  下面是Eclipse截图,我简要说明下各个类的作用

  1. RabitActivity:游戏就从这个Activity启动,它的主要作用就是负责展示游戏简介(IntroduceView),如何游戏(HelpView),是否开启音效AudioView)的这三个不同的屏幕
  2. GameActivity:当用户选择完是否开启音效后,就切换到一个新的activity,即GameActivity
  3. Rabit,Bell, Bird,对游戏中兔子,铃铛,鸟的定义。包括状态(state),图片(bitmaps), 速度(speed)都在里面定义。我感觉,state是个很重要的属性,他决定着这个对象到底处于何种状态,从而根据这些状态绘制不同的图片
  4. GameSurfaceView:游戏的显示类,同时是个大容器,将所有的游戏中出现的对象都包含进来,里面的update_all_components()是游戏的核心。
  5. BellCreator:负责铃铛的对象的创建。当一个铃铛从屏幕中消失是,该对象并没有被销毁,而是被BellCreator回收,当下次有新的铃铛在屏幕上出现时,BellCreator就把回收过来的Bell对象重新初始化后交给GameSurfaceView。目的是节约资源,提高系统的系能。
  6. Background:负责动态背景的生成
  7. AudioProvider:音频的封装,负责音效

  那么整个游戏是如何跑起来,所有的对象(图片)如何动起来的呢?

  相信有过一些有小游戏开发经验的人知道,在整个系统中,除了主线程外,会启动另外一个线程,这个线程负责不断刷新所有对象的状态,更新图片,从而达到动画的效果。

  我也是这样做的。在GameSurfaceView中我有个内部类,RefurbishThread,它负责每100毫秒调用GameSurfaceView.update_all_components()方法更新所有rabit,bell,bird,background状态,然后重绘屏幕。

  个人觉得Rabit,Bell等对象状态的定义是个需要花脑筋的地方,我做得还不够好,下面是定义Rabit的一些状态:

    private int face_state;private int ground_state;private int air_state;//rabit面左面右状态    public static final int RABIT_FACE_LEFT = 1;public static final int RABIT_FACE_RIGHT = 2;//rabit在地面状态    public static final int RABIT_NOT_ON_GROUND = 0;public static final int RABIT_LEFT_STOP = 1;public static final int RABIT_RIGHT_STOP = 2;public static final int RABIT_LEFT_MOVE1_ON_GROUND = 3;public static final int RABIT_LEFT_MOVE2_ON_GROUND = 4;public static final int RABIT_RIGHT_MOVE1_ON_GROUND = 5;public static final int RABIT_RIGHT_MOVE2_ON_GROUND = 6;//rabit 在空中的状态     public static final int RABIT_ON_AIR_UP0 = 0;public static final int RABIT_ON_AIR_UP1 = 1;public static final int RABIT_ON_AIR_UP2 = 2;public static final int RABIT_ON_AIR_UP3 = 3;public static final int RABIT_ON_AIR_UP4 = 4;public static final int RABIT_ON_AIR_UP5 = 5;public static final int RABIT_ON_AIR_STOP = 6;public static final int RABIT_ON_AIR_DOWN = 7;

五. 技术小经验

  下面是一些开发中遇到技术层面小知识,希望对大家有帮助:

  1. 如何将游戏画面保持横向显示,不会因为手机横竖而自动切换显示方式:在activity标签里面加上这两个属性的配置就可android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden|navigation"

<activity android:name=".GameActivity"android:screenOrientation="landscape"  android:configChanges="orientation|keyboardHidden|navigation"></activity>

  2. android开发 drawable(hdpi,mdpi,ldpi)的区别:

  http://hi.baidu.com/lujie_dream/blog/item/4ed68b77b28a84210cd7da97.html

  3. java 线程的基础知识

  http://java.chinaitlab.com/line/373702.html

  4. Handler的使用

  http://www.pin5i.com/showtopic-android-handler.html

六. 我的困惑

  1. 不知正规的Android游戏开发是如何进行的,应该不是像我这样贴图这样简单吧,用游戏引擎吗?什么引擎?网上的资料感觉太少了,希望google能够多提供这方面的帮助。不知列位看官是否知道真正手机游戏如何开发的,指点一二,不胜感激。

  2. 体系结构做的不好,类与类之间的耦合度高的吓人。上学期虽然上了设计模式这门课,可能是学艺不精吧,这个小游戏没用什么模式。窃以为,是不是对于小的项目,设计模式用场不是很大?或许小的项目有很大的耦合是正常的,它没有必要分很多模块然后分别进行设计?设计模式可能对大的项目很有用吧,大的项目也需要设计模式。不知我的想法对不对,希望有牛人指点。

七. 总的感悟

  关于Android开发平台的体会:

  我有种粗浅的感觉,在Android平台上开发与平常Java开发差别不是很大。处理配置文件外,程序的大部分代码都是用Java写的。如果你学过Java,有一点Java开发的经验,Android入门还是挺快的。看看书,到网上查查资料,熟悉一些基本机制,如Activity,了解一些API,再动手试试,上手挺容易。当然,无知者无畏,想必Android一些深层的机制不是那么简单,还有许多Android上的概念定义我没掌握,须认真学习体会。我想说的是做个Android菜鸟不那么困难,所以若对Android开发有兴趣,那就行动吧~

  所谓坚持:

  坚持不是件容易的事。

  暑假留校学习Android,开始时热情很高,看书看视频感觉挺好,自己每天都有收获,很幸福。

  真正做其开发时,遇到了不少困难。主要是游戏整体和细节设计,类似游戏的参考很少,有很多Class定义需要左思右想抓耳挠腮,没有同学可以共同探讨,自己感觉又解决不了,很痛苦!很茫然!很失落!于是想要放弃,反正自己做的这件事又没有什么硬性要求,何必自己难为自己呢?

  平时我总是轻视书上鼓吹坚忍不拔之人,觉得他们没什么了不起,不就是坚持嘛,很有可能是后人杜撰的。可现在,反身看看我自己,如果放弃的话,还有什么资格瞧不起别人?于是在这种心理下,硬着头皮继续学习。呵呵,当然,我也狠狠地放纵自己,努力玩,然后学习开发。

  总之,我可以说虽然做这个小东西对别人来说很容易,你也许会轻视我,但我不管,我挺了下来,现在心情还不错。

  O(∩_∩)O~后天回家~

注:我将以此篇博文参加Google 暑期大学生博客分享大赛 - 2011 Android 成长篇,希望大家能支持我这只IT小小鸟。

转载于:https://www.cnblogs.com/boing/archive/2011/08/13/Android.html

暑期Android游戏开发——小兔子跳铃铛(附源码)相关推荐

  1. 基于嵌入式linux五子棋游戏,Android 实战项目之五子棋 附源码

    Android五子棋游戏五子连珠算法实现 1.游戏规则 五子棋是两个人之间进行的竞技活动,黑方白方规则规则相同,黑棋必须先行,五连子的方向为横.竖.斜,如黑白色任一方先五子连一线则算胜出. 2.五子连 ...

  2. 关于美团:零基础搭建获利的美团饿了么优惠券CPS小程序附源码

    关于美团:零基础搭建获利的美团饿了么优惠券CPS小程序附源码 下面是无裂变版本的搭建教程. 源码地址:http://y.mybei.cn 部署步骤 部署后台,填资料 登录后台 http://q.myb ...

  3. 手把手教你搭建美团饿了么电影票外卖cps小程序 附源码

    手把手教你搭建美团饿了么电影票外卖cps小程序 附源码 外卖红包项目的优势 1.刚需:吃饭是每日刚需,尤其是城市白领,上班族,宅男宅女,等群体点外卖的需求,需求更是高频率(每天). 2.门槛低:平台门 ...

  4. EJB+JSF开发示例(附源码)

    刚到公司时没有接触过EJB3和JSF,为了熟悉一下做了个EJB+JSF开发示例来入门.一个比较简单的JSF的web工程做页面展现,一个简单的EJB3工程做业务操作,分别部署到Tomcat下和JBoss ...

  5. JAVA计算机毕业设计晨光文具店进销存系统设计与开发计算机(附源码、数据库)

    JAVA计算机毕业设计晨光文具店进销存系统设计与开发计算机(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行) ...

  6. python画圣诞帽_使用Python给头像加上圣诞帽或圣诞老人小图标附源码

    随着圣诞的到来,想给给自己的头像加上一顶圣诞帽.如果不是头像,就加一个圣诞老人陪伴. 用Python给头像加上圣诞帽,看了下大概也都是来自2017年大神的文章:https://zhuanlan.zhi ...

  7. java计算机毕业设计ssm基于Vue的校园电脑租赁系统设计与开发19xy6(附源码、数据库)

    java计算机毕业设计ssm基于Vue的校园电脑租赁系统设计与开发19xy6(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(We ...

  8. python画圣诞老人_使用Python给头像加上圣诞帽或圣诞老人小图标附源码

    随着圣诞的到来,想给给自己的头像加上一顶圣诞帽.如果不是头像,就加一个圣诞老人陪伴. 用Python给头像加上圣诞帽,看了下大概也都是来自2017年大神的文章:https://zhuanlan.zhi ...

  9. java计算机毕业设计ssm冷链物流管理系统的设计与开发90b3l(附源码、数据库)

    java计算机毕业设计ssm冷链物流管理系统的设计与开发90b3l(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstor ...

最新文章

  1. Atitit sql计划任务与查询优化器--统计信息模块
  2. BC:带你温习并解读《中国区块链技术和应用发展白皮书》—国内外区块链发展现状
  3. 在SQL 语句批量替换数据库字符串的方法
  4. x86_64 arm制linux-gcc,arm-linux-gcc 制作
  5. domReady的理解
  6. 零代码以“王者荣耀”为例解析设计七原则
  7. python必读_学好Python必读的几篇文章
  8. app接口服务器请求为什么会报错307_Vue接口代理和数据Mock,你会了吗
  9. C#中,当从数据库中查询到数据,以DataTable类型返回后,如果需要对DataTable中的数据进行筛选,可以选择下面的方式...
  10. 如何使用十六进制颜色值
  11. C64x+ 与 C64x Cache 区别
  12. 三防数据存储: 3U Open VPX 存储模块
  13. R语言 使用getGEO()直接进行差异表达分析并显示Entrez_id和Symbol_id
  14. BIP与Siebel系统集成
  15. BigDecimal解读
  16. Java编程语言的风格
  17. Angular +Ionic实现关注与取消关注
  18. 大数据工程师学习计划
  19. 【UI设计No7】单页
  20. python练习题--阿拉伯数字转换成中文数字

热门文章

  1. 科学计算机bug,EMUI小助手:计算器百分比计算出bug?真相在这儿!
  2. hive内置函数_hive内置函数大全
  3. 国际贸易术语解释通则(FAS 船边交货(……指定装运港))
  4. 单点登录(四):HTTPS相关知识
  5. 3526-------团战可以输、提莫必须死 dfs做法
  6. Vmware ESX 5.0 安装与部署
  7. rsa对数据库关键数据加密处理
  8. User-Agent是什么意思捏?
  9. HTTPS SSL TLS
  10. 希望这九封信能激励你我