Android实践项目:推箱子

  推箱子是一款来自日本的古老游戏,其设计目的是训练人的逻辑思维能力。游戏场景一般是设定在空间狭小的仓库中,要求把箱子摆放到指定位置。这就要求玩家巧妙的运用有限的空间和通道,合理的安排箱子的位置和移动次序才可能完成任务。 随着计算机游戏的发展,很多编程爱好者基于该游戏的思想开发了出各种版本、各种类型的推箱子。这其中也包括很多手机版本的实现,伴随着手机与计算机的普及,很快推箱子游戏便进入了千家万户。

一、需求分析

1.1 功能需求

  在游戏开发之前,首先需要对游戏所应该具有的功能进行分析,功能分析是游戏开发的前提,有了需求才可能游戏的开发,并且需求分析必须非常详细,以免造成不必要的损失。 具体的功能如下:

  欢迎动画界面 ,游戏运行后首先进入的界面。

  菜单的选择,还需要设计出菜单界面,并且在菜单界面至少有四种菜单供用户选择。

  游戏的音效,游戏的过程中需要在适当的位置添加上音效,并且可以对音效进行开与关闭的设置 。

  游戏帮助,还需要为本游戏添加帮助界面,简单介绍游戏的基本功能及玩法。

  键盘操控,主要是完成玩家与游戏的交互。

  游戏的胜利,游戏需要设计适当的难度,使玩家能够经过努力完成游戏。

1.2 性能需求

  采用的呈现技术,推箱子游戏一般采用的都是2D的呈现技术,本案例为了增强游戏的吸引力,拟采用2.5D呈现技术。2.5D呈现技术也有多种视角可供选择,本游戏采用45度视角。

1.3 其他需求

  游戏情节,本游戏为轻量级的益智游戏,因此不存在很复杂的情节。这方面主要要做的工作主要为设计游戏各关仓库的形状、大小、可通过区域,以及各关中箱子的初始位置与目的地。

  目标受众 ,这个游戏受众面比较广,应该是老少皆宜的。考虑到受众面广的原因,应该将操作方式设计得更加人性化,画面更加清新。

  运行的目标平台,本游戏的目标平台为Android2.1。

  操作方式,本游戏拟采用手机键盘进行操作,对于没有键盘的型号也可以考虑采用虚拟键盘。

1.4 UML用例图

二、系统设计

2.1 GUI设计

  首先对界面进行设计,欢迎界面是一个移动的动画,游戏界面就在实现中展示了,菜单界面包括四个按钮,用Axure做界面如下:

2.2 组件设计

系统模块划分与操作流程:

  共有类:

    Activity的实现类PushBoxActivity

    键盘监听线程KeyThread

  欢迎界面相关类:

    欢迎界面类WelcomeView

    欢迎界面的绘制线程类WelcomeViewThread

    欢迎界面的动画实现类WelcomeViewGoTread

  菜单界面相关类:

    菜单界面类MenuView

    菜单界面的绘制线程类MenuViewDrawThread

    菜单界面的动画实现类MenuViewGoThread

  游戏界面相关类:

    游戏主界面类GameView

    游戏主界面的绘制线程类GameViewDrawTread

    地图信息类MapList  

    角色封装类MySprite

    角色移动线程类SpriteMoveThread

    角色换帧线程类SpriteThread

    箱子移动类BoxThread

  

  具体如下图:

  

  最主要的过程是游戏界面相关类,内部各个类的关系如下:

三、系统实现

3.1 共有类

  共有类主要包含两个类:Activity的实现类PushBoxActivity和键盘监听线程KeyThread。其中PushBoxActivity是通过扩展基类Activity实现的,是整个游戏程序的入口,是游戏的主控制器。KeyThread为手机键盘的监听线程,每隔一段时间读取一次键盘的状态值,并根据当前键盘状态做出相应的操作。

  其中PushBoxActivity类包含了欢迎界面WelcomeView、菜单界面MenuView、游戏界面GameView、角色MySprite等相关类的声明和整个流程的调用过程。

3.2 欢迎界面

  欢迎界面包含三个类:欢迎界面类WelcomeView、 欢迎界面的绘制线程类WelcomeViewThread、欢迎界面的动画实现类WelcomeViewGoTread。

  WelcomeView类为游戏欢迎界面的实现类,主要负责欢迎界面的绘制工作,调用了欢迎界面的绘制线程类WelcomeViewThread。点击鼠标左键可以跳到下一个界面,或者向Activity发送pushBoxActivity.myHandler.sendEmptyMessage(1)的消息,切换到菜单界面。

  WelcomeViewThread类为继承Thread的线程类,负责的工作室定时重绘欢迎界面,通过锁定画布、操作、释放画布的流程进行操作。

  WelcomeViewGoTread类主要用于生成欢迎界面的动画,是通过改变WelcomeView中所用到的图片坐标实现的。实现了铁门,木门等的移动。

3.3 菜单界面

  菜单界面包含三个类:菜单界面类MenuView、 菜单界面的绘制线程类MenuViewThread、菜单界面的动画实现类MenuViewGoTread。

  这三类的主要功能与欢迎界面的三个类基本相同,不同之处在于MenuView类中实现了四个按钮:开始游戏、声音开关、游戏说明、退出游戏的功能,向Activity发送pushBoxActivity.myHandler.sendEmptyMessage(2)的消息,切换到游戏界面。并在MenuViewGoTread类中实现了大背景menubackground的循环动画。

3.4 游戏界面

  游戏界面比较复杂,主要包含如下类:游戏主界面类GameView、游戏主界面的绘制线程类GameViewDrawTread、地图信息类MapList、角色封装类MySprite、角色移动线程类SpriteMoveThread、角色换帧线程类SpriteThread、箱子移动类BoxThread。

  其中GameView类是最关键的一类,负责绘制游戏过程中的所有消息,如地图、玩家角色、所推箱子、恭喜过关图片。调用GameViewDrawTread类实现游戏主界面的刷帧线程;调用MapList类绘制第一层地板层和第二层建筑层;调用KeyTread类实现键盘监听;调用MySprite类取得角色消息,并间接调用SpriteMoveThread类和SpriteThread类实现角色移动和角色换帧线程;

  KeyThread类主要是实现了键盘监听,通过调用GameView类和MySprite类的坐标信息来确定前方是否为箱子、箱子的前方是否为空地,角色的前方是否为空地等。并在其内部实现了BoxThread类。主要是通过四位的状态码来实现键盘上下左右的控制。

  BoxThread类主要实现了箱子的移动。通过调用GameView类的坐标信息实现了箱子的坐标变换。

  MySprite类为玩家角色的封装类,包含了所有与角色相关的信息。实现了角色移动时的状态图的绘制。

  SpriteMoveThread类主要负责角色的无极移动,运用时只需给出起始点和目标点的坐标,同时该类还承担起屏幕的滚动工作。

  SpriteThread类主要负责根据角色的消息时时改变角色的图片。

四、系统测试

  首先将需要测试的项目绘制成测试用例表:

4.1 测试用例一:角色移动与箱子移动

 经过欢迎界面,在菜单界面点击开始游戏,对角色的移动和箱子移动情况进行测试。经过测试,角色移动时靠近四壁会实现滚屏。同时在角色或箱子靠近四壁时,就无法进一步移动,并且当箱子移动到绿色空地时,就会变成绿色。图示如下:

4.2 测试用例二:游戏成功测试

  经过测试,在键盘控制下,实现了箱子正确移动到绿色目的地,最终当每个箱子都到达目的地时,游戏就成功了。

五、开发中遇到的问题及解决方案

5.1 Android版本问题

  本游戏使用的是Android2.1版本,首先要下载API21,再导入项目时会报错,然后下载相应的API就可以了。

5.2 键盘连接问题

  键盘的连接要改变config配置文件。找到模拟器创建的文件夹所在的配置文件,即.andriod里边的adv文件夹。打开config文件,把hw.dpad=no改为hw.dpad=yes,保存好后退出,重新启动模拟器就可以了。

5.3 成功过关问题

  游戏中存在一个错误就是推到箱子时,不论箱子往哪推,都会显示游戏结束,找到BoxThread类,添加如下return false,从而达到只有所有的箱子都变成绿色时游戏才成功过关。

六、总结

  本次项目主要是完成了基于Android平台的推箱子游戏的实现,使用了Android Studio的开发平台,实现了不一样的2.5D呈现技术的新视角。完成了欢迎动画、界面设计、游戏设计等多个环节的制作,并且解决了游戏开发过程中的几个问题,游戏功能基本开发完全,但仍有很多地方可以进行优化和改进。

  (1)音效的提升,本游戏中,并没有过多添加对音效的处理,有兴趣的玩家可以再添加一些适当的音效,以提升玩家的体验。

  (2)玩家的定制,本游戏中,应该添加上游戏难度的选择功能,使玩家根据自己的情况选择不同的等级进行游戏,这样才更加合理。

  (3)成绩的存储 ,如果能在游戏的最后加上游戏成绩的存储与排行,游戏成绩主要是根据步数的多少来评定的,那更会大大提高玩家对本游戏的体验,增强游戏的人性化。

  最后,非常感谢娄老师和同学们给予我的帮助!

Android实践项目汇报的更多相关文章

  1. Android实践项目汇报总结(上)修改

    微博客户端的设计与实现(上) 第一章 绪论 1.1课题背景 微博可以说是时下最受人们所喜爱的一种社交方式,它是一种通过关注机制分享简短实时信息的广播式的社交网络平台.通过微博我们可以了解最新的时事新闻 ...

  2. Android实践项目汇报(二)

    Google天气客户端 本周学习计划 学习布局控件和XML解析的相关知识. 看懂程序代码. 把借鉴代码成功导入到Android Studio中并运行成功. 实际完成情况 我学习到布局控件XML在res ...

  3. Android实践项目汇报-改(一)

    Google天气客户端NABC Need(需求):  功能性需求分析 天气预报客户端,顾名思义就是为用户提供实时准确的天气信息,方便用户出行生活.根据用户日常需求,软件完成后点开,载入界面,显示查询界 ...

  4. Android实践项目汇报(一)

    # 我要做的是Google天气客户端 一.Need(需求): 1. 功能性需求分析 天气预报客户端,顾名思义就是为用户提供实时准确的天气信息,方便用户出行生活.根据用户日常需求,软件实现后所达到的功能 ...

  5. Android实践项目汇报(总结)-修改

    天气客户端开发报告 1系统需求分析 1.1功能性需求分析 天气预报客户端,最基本就是为用户提供准确的天气预报信息.天气查询结果有两种:一种是当天天气信息,信息结果比较详细,除温度.天气状况外还可以提示 ...

  6. Android实践项目汇报(总结)

    天气客户端开发报告 1    系统需求分析 1.1功能性需求分析 天气预报客户端,最基本就是为用户提供准确的天气预报信息.天气查询结果有两种:一种是当天天气信息,信息结果比较详细,除温度.天气状况外还 ...

  7. Android实践项目汇报(四)

    全国天气客户端 本周学习计划 添加修改功能,完成项目 实际完成情况 1.成功显示当天及后几天的天气信息 通过修改chaxun.java程序,比较JSON数据格式中JSONObject("to ...

  8. Android实践项目汇报(三)

    Google天气客户端 本周学习计划 调试代码使之成功运行并实现天气预报功能. 实际完成情况 由于google取消api接口服务,天气源的传输.所以我换了一个使用 haoserver API接口的程序 ...

  9. Android实践项目汇报总结(下)

    微博客户端的设计与实现(下) 第四章 系统详细功能实现 本应用实现了如下主要模块:程序启动模块.登录授权模块.主界面显示模块撰写发表微博模块.用户发布信息模块.软件设置模块. 4.1程序启动模块实现 ...

随机推荐

  1. poj_3258 二分法

    题目大意 给定区间[0,L],在区间内给定N个数,加上区间的端点总共N+2个值.这N+2个数相邻的两个数之间有一个差值delta[i],现在可以从除去端点之外的这N个数中删除M个,使得剩余的N+2-M ...

  2. HTTP/2笔记之连接建立

    前言 HTTP/2协议在TCP连接之初进行协商通信,只有协商成功,才会涉及到后续的请求-响应等具体的业务型数据交换. HTTP版本标识符 h2,基于TLS之上构建的HTTP/2,作为ALPN的标识符, ...

  3. 开源的PaaS方案:在OpenStack上部署CloudFoundry (四)使用Micro Bosh部署CloudFoundry

    使用bosh部署应用是需要两部分,一个是创建虚拟机使用的模板stemcell,另外一个是应该的Release.所以,部署CloudFoundry之前需要上传stencil和release 4.1.1 ...

  4. Excel ALT+小键盘的妙用

    用法就是摁住ALT不松,然后输入小键盘数字(一定要小键盘),再松开ALT就可以了 α     ALT+42689β     ALT+42690γ     ALT+42691δ     ALT+4269 ...

  5. 关于用phonegap 3.0+ 打包后sencha touch按钮点击切换动画延迟接近一秒的以及界面闪烁的解决方案

    android的webview对硬件加速的支持貌似很不理想,在开启硬件加速的情况下,css3这些需要调用硬件加速的样式会大幅拖慢html5的webapp,在htc的部分手机上还会因开启硬件加速而导致闪 ...

  6. [分享]收集的Linux学习资源

    下面是我收集的一些Linux资源,与大家分享.大家共同学习,一起进步. 国内的专业Linux网站(GB) 1. ChinaUnix:http://www.chinaunix.net/ 2. Linux ...

  7. 查看Oracle的redo日志切换频率

    1.Oracle log 每次切换会记录到告警日志中 设想写个方案来查看log切换频率来判断Oracle log是否应该更改大小. 2.sql a.查看redo日志信息 select * from v ...

  8. oneThink发生错误,获取当前执行的SQL语句!

    echo D('AnswerInfoView')->getLastSql();die();

  9. codeforces#505--A Doggo Recoloring

    A. Doggo Recoloring time limit per test 1 second memory limit per test 256 megabytes input standard ...

  10. Asp.NET 与 WebApi 共享Session

    首先新建一个.net framework 4.5.2的 web应用程序,选择WebApi基架,包括MVC与Webapi 1.在global.asax中启用Session 2.在HomeControll ...