前言
这游戏跟《兔子跳铃铛》一样,也是在大学的时候写的。不过前者使用的是C++,而这个则是在大三上学期的时候用JAVA,在J2ME平台上开发出来的。代码不多,当时使用了不到三天时间,但是却感觉比兔子的游戏好多了。
我就写过这两个游戏,感觉玩起来还不错,所以都写出来和大家分享一下。代码在最后。:)
效果
启动游戏,闪屏、标题、开始菜单:
点击开始游戏,游戏开始(废话!)。游戏控制很简单,只需要使用左右两个键就行了。控制你的小人,在木板、滑板、闪板、跳板等各种板子上移动跳跃。当被最上面的刺刺到或者跳到刺板上的时候,就会掉血。血完或者没有接上板子而直接掉下去,都GameOver。撑的时间越久,分数越高。如图:
程序结构
这个游戏比上次那个《兔子跳铃铛》好些。好歹当时也是设计过的,嘿嘿。先看所有的类的列表:
包大致可以分为两部分,通用/游戏类。以下包列表中,第一个是通用的,其它则是为《是男人就下一百层》专门开发。从下到上,为单向依赖:
hxy.Interface + hxy.Utils :这两个包定义了一些在游戏设计中通用的类和接口。可理解为一个通用的小框架。
hxy.Game.Interface :只定义了一个接口,表示一个简单的游戏管理器。
hxy.Game.Enum :枚举定义:方向/键/碰撞类型。
hxy.Game.Base :一些重要的基类:精灵类、板子类、滚动图层类。
hxy.Game.Common :一些不通用,但是通常却被定义的类,为ConcreteSprites包下的类打基础。(这里有唯一个依赖上层ConcreteSprites的类:BroadsFacotry。嘿嘿,小问题。)
hxy.Game.ConcreteSprites :这个游戏中最具体的所有精灵类都在这里面了。
hxy.Game :《是男人就下一百层》这个游戏中,基于上面的框架的具体应用类。这个包里面放置了所有和MIDlet平台通信或相关的类。其下,又分了以下几个子包。
细节
先说说定时子系统:
游戏的界面绘制,其实就是在适当的时候画出动画效果。而动画也是在规定时间内分桢显示,所以说到底,最重要的就是时间的控制。那么,定时的功能就显得尤为重要了。
虽然可以在需要定时的时候采用开启线程的方式来控制,但是一旦游戏中多处需要定时器的时候,资源就会占据过多。所以这里需要对这个资源进行统一管理。查找过WTK2.5中的包,的确有一个类是Timer,不过研究一下之后,感觉使用并不灵活(我感觉J2ME的包中的类,有些用起来还真是不顺手。当然,很有可能是我不精通JAVA的原因吧。:))。所以只好自己下手,设计如下“子系统”:
重要接口:
类图:
现在看看,其实里面有这些已经被大家熟知的设计模式:Observer、Factory、Decorator。
虽然它的设计和实现都并不复杂,但是在这个游戏设计中,却起了关键性的作用。它不但统一了上层控制时间时使用的API调用模式,也相对于打开不必要的线程而言,更节省了资源,这在手机这种“弱”平台上,显得尤为重要。
再说说一个有趣的设计:
开发中,想到怎么让小人一停的往下掉啊,想了几个办法都不怎么样,最后使用了类GravitySystem。重力系统!哈哈,比较牛的名字,但是代码却相当的简单。有空的读者可以去看看,就20行代码吧。不过我觉得很有意思的是,它是多么接近生活啊!这样的设计,感觉很符合我对程序的美感,写得心里十分舒畅,嘿嘿。
然后是重点:
重点自然就是可爱的精灵们了,只是图上一点都不可爱,全是字母……
当然,也少不了为游戏做出贡献的背景等:
接下来是难点:
游戏中的传输板TransmitBoard是个开发的难点。不过不好意思的是,时隔两年,我已经不记得为什么是难点了。(汗!)就记得当时做这个时候,可是做了好久才做出来的。如果有读者有空看了代码的话,可以和我聊天探讨探讨。:)
最后,入口:
GameManager是游戏中最重要的类,它实现的游戏管理者接口,并负责把所有的内容进行整合并管理。其中的Initailze方法比较重要,看代码的读者可以从这里入手。
反思
当时还没有事件的思想,所以设计了IRPGGameManager接口,而大多数精灵类都直接依赖它来在特定的时候,让游戏做出特定的响应。这其实是个很菜的设计。合理的当然还是让精灵暴露出这个特定的时候需要发生的事件,然后GameManager监听这个事件,再对游戏做出特定的响应。毕竟,这才是Manager该做的事。
另外,这游戏跟RPG没什么关系,不过当时居然为接口起了这个名字,汗。
致歉
原因,同“兔子”。不好意思再打第二遍。
:(
感谢
这次真是该谢谢室友小兴、小帅的时候了,不仅帮忙找素材,而且这游戏中小人挂掉的惨叫声,也是你们帮我录的,哈哈。
另外,谢谢网上的某位帅哥/美女。因为我听说,游戏中的一些素材,是从你那K来的。
鄙视
鄙视室友小伟,不但不帮忙,还老是在我关键的时刻,把我拖去打游戏。
而且我每次都中招……哈。