zoukankan      html  css  js  c++  java
  • JAVA 游戏分享 “是男人就下100层”

    前言

        这游戏跟《兔子跳铃铛》一样,也是在大学的时候写的。不过前者使用的是C++,而这个则是在大三上学期的时候用JAVA,在J2ME平台上开发出来的。代码不多,当时使用了不到三天时间,但是却感觉比兔子的游戏好多了。

        我就写过这两个游戏,感觉玩起来还不错,所以都写出来和大家分享一下。代码在最后。:)


    效果

        启动游戏,闪屏、标题、开始菜单:

    image image image

        点击开始游戏,游戏开始(废话!)。游戏控制很简单,只需要使用左右两个键就行了。控制你的小人,在木板、滑板、闪板、跳板等各种板子上移动跳跃。当被最上面的刺刺到或者跳到刺板上的时候,就会掉血。血完或者没有接上板子而直接掉下去,都GameOver。撑的时间越久,分数越高。如图:

    image image image  image


    程序结构

        这个游戏比上次那个《兔子跳铃铛》好些。好歹当时也是设计过的,嘿嘿。先看所有的类的列表:

    clip_image002

        包大致可以分为两部分,通用/游戏类。以下包列表中,第一个是通用的,其它则是为《是男人就下一百层》专门开发。从下到上,为单向依赖
        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的原因吧。:))。所以只好自己下手,设计如下“子系统”:

        重要接口:

    image 

        类图:

    clip_image002[7]

        现在看看,其实里面有这些已经被大家熟知的设计模式:Observer、Factory、Decorator。

        虽然它的设计和实现都并不复杂,但是在这个游戏设计中,却起了关键性的作用。它不但统一了上层控制时间时使用的API调用模式,也相对于打开不必要的线程而言,更节省了资源,这在手机这种“弱”平台上,显得尤为重要。

        再说说一个有趣的设计

        开发中,想到怎么让小人一停的往下掉啊,想了几个办法都不怎么样,最后使用了类GravitySystem。重力系统!哈哈,比较牛的名字,但是代码却相当的简单。有空的读者可以去看看,就20行代码吧。不过我觉得很有意思的是,它是多么接近生活啊!这样的设计,感觉很符合我对程序的美感,写得心里十分舒畅,嘿嘿。

        然后是重点

        重点自然就是可爱的精灵们了,只是图上一点都不可爱,全是字母……

    clip_image002[9]

        当然,也少不了为游戏做出贡献的背景等:

    clip_image002[11]

        接下来是难点

        游戏中的传输板TransmitBoard是个开发的难点。不过不好意思的是,时隔两年,我已经不记得为什么是难点了。(汗!)就记得当时做这个时候,可是做了好久才做出来的。如果有读者有空看了代码的话,可以和我聊天探讨探讨。:)

        最后,入口

        GameManager是游戏中最重要的类,它实现的游戏管理者接口,并负责把所有的内容进行整合并管理。其中的Initailze方法比较重要,看代码的读者可以从这里入手。

    clip_image002[13]


        反思

        当时还没有事件的思想,所以设计了IRPGGameManager接口,而大多数精灵类都直接依赖它来在特定的时候,让游戏做出特定的响应。这其实是个很菜的设计。合理的当然还是让精灵暴露出这个特定的时候需要发生的事件,然后GameManager监听这个事件,再对游戏做出特定的响应。毕竟,这才是Manager该做的事。

        另外,这游戏跟RPG没什么关系,不过当时居然为接口起了这个名字,汗。


        致歉

        原因,同“兔子”。不好意思再打第二遍。

        :(


        感谢

        这次真是该谢谢室友小兴、小帅的时候了,不仅帮忙找素材,而且这游戏中小人挂掉的惨叫声,也是你们帮我录的,哈哈。

        另外,谢谢网上的某位帅哥/美女。因为我听说,游戏中的一些素材,是从你那K来的。


        鄙视

        鄙视室友小伟,不但不帮忙,还老是在我关键的时刻,把我拖去打游戏。

        而且我每次都中招……哈。


        代码下载:https://files.cnblogs.com/zgynhqf/Man-Code.rar

  • 相关阅读:
    乐观锁和悲观锁
    c++ inline使函数实现可以在头文件中,避免多重定义错误
    无锁队列的实现
    同步异步阻塞非阻塞
    log(m+n)找第k大
    ios开发常见的 工具 - 值得收藏
    iOS 性能优化得 方法
    搭建 安卓开发环境 !
    项目支持 64 - bit
    AFN学习笔记
  • 原文地址:https://www.cnblogs.com/zgynhqf/p/1618279.html
Copyright © 2011-2022 走看看