安卓实验5
- 格式:doc
- 大小:1.48 MB
- 文档页数:51
实验五 推箱子游戏实现
一、实验目的
1) 了解益智游戏开发的概念
2) 了解游戏的开发过程
3) 综合利用Android的开发技术实现推箱子游戏
二、实验环境与设备
实验分组进行,每组包括已安装Windows操作系统(Windows Xp)的2台计算机,Eclipse的Android实验环境,教师提供游戏的开发素材
三、预备知识
• 开发背景
推箱子是一款来自日本的古老游戏,其设计目的是训练人的逻辑思维能力。游戏场景一般是设定在空间狭小的仓库中,要求把箱子摆放到指定位置。这就要求玩家巧妙的运用有限的空间和通道,合理的安排箱子的位置和移动次序才可能完成任务。
随着计算机游戏的发展,很多编程爱好者基于该游戏的思想开发了出各种版本、各种类型的推箱子。这其中也包括很多手机版本的实现,伴随着手机与计算机的普及,很快推箱子游戏便进入了千家万户。
• 功能需求
在游戏开发之前,首先需要对游戏所应该具有的功能进行分析,功能分析是游戏开发的前提,有了需求才可能游戏的开发,并且需求分析必须非常详细,以免造成不必要的损失 。
具体的功能如下:
欢迎动画界面 ,游戏运行后首先进入的界面。
菜单的选择,还需要设计出菜单界面,并且在菜单界面至少有四种菜单供用户选择。
游戏的音效,游戏的过程中需要在适当的位置添加上音效,并且可以对音效进行开与关闭的设置 。
游戏帮助,还需要为本游戏添加帮助界面,简单介绍游戏的基本功能及玩法。
键盘操控,主要是完成玩家与游戏的交互。
游戏的胜利,游戏需要设计适当的难度,使玩家能够经过努力完成游戏。
• 游戏的策划
游戏的策划主要包括游戏的情节、目标受众、运行的目标平台、采用的呈现技术、操作方式等几个方面。下面就针对本游戏对上述几个方面进行简单的介绍,如下所列。 游戏情节,本游戏为轻量级的益智游戏,因此不存在很复杂的情节。这方面主要要做的工作主要为设计游戏各关仓库的形状、大小、可通过区域,以及各关中箱子的初始位置与目的地。
目标受众 ,这个游戏受众面比较广,应该是老少皆宜的。考虑到受众面广的原因,应该将操作方式设计得更加人性化,画面更加清新。
运行的目标平台,本游戏的目标平台为Android2.1。
采用的呈现技术,推箱子游戏一般采用的都是2D的呈现技术,本案例为了增强游戏的吸引力,拟采用2.5D呈现技术。2.5D呈现技术也有多种视角可供选择,本游戏采用45度视角。
操作方式,本游戏拟采用手机键盘进行操作,对于没有键盘的型号也可以考虑采用虚拟键盘。
四、实验内容
• 开发前准备工作
由于该游戏使用Eclipse作为主要的开发工具,所以在开发之前需要检查Eclipse是否已经配置好。
准备游戏用到的图片资源
准备游戏用到的声音资源
• 游戏的类框架
• 各个类的组成
该游戏中开发的类比较多,为了让读者能够更好的理解各个类的在游戏中所扮演的角色。 共有类
欢迎界面相关类
菜单界面相关类
游戏界面相关类
• 欢迎动画界面的设计与实现
当玩家运行游戏时,首先看到的是欢迎界面,欢迎界面是整个游戏的门面,良好的欢迎界面会增加玩家对游戏的视觉体验。下面将开始对欢迎动画界面的开发进行介绍。
PushBoxActivity类框架的搭建
欢迎界面WelcomeView类的实现
刷帧线程WelcomeViewDrawThread的实现
动画线程WelcomeViewGoThread的实现
• 菜单界面的设计与实现
欢迎动画界面已经开发完成,接下来将进入菜单相关界面的开发
• 游戏界面的框架设计与实现
经过前面的开发,欢迎界面及菜单界面已经开发完成。接下来将进入本游戏最复杂的界面——游戏界面的开发,首先需要对该界面的框架进行介绍。
• 角色相关类的开发
经过前面的开发,游戏界面的框架已经搭建完成,但是此时还不能绘制任何物体,本节将对游戏的地图、各个实体以及相关线程进行介绍,为之后游戏界面的完善做好准备。
地图类MapList的实现
角色类MySprite的实现
键盘监听线程KeyThread的实现
角色移动线程SpriteMoveThread的实现
换帧线程SpriteThread的实现
• 游戏界面的完善 前面已经将游戏界面需要的地图以及实体进行了介绍,接下来将使用之前开发的各个类来完善游戏的主界面,完成本游戏的开发。
箱子移动线程BoxThread的实现
刷帧线程GameViewDrawThread的实现
游戏界面GameView的完善
• 游戏的优化与改进
本游戏的功能基本开发完全,但仍有很多方面可以进行优化和改进,本节将列出其中一部分,有能力的读者可以进一步对本游戏进行优化,提高游戏的档次。
音效的提升,本游戏中,并没有过多添加对音效的处理,有兴趣的玩家可以再添加一些适当的音效,以提升玩家的体验。
玩家的定制,本游戏中,应该添加上游戏难度的选择功能,使玩家根据自己的情况选择不同的等级进行游戏,这样才更加合理。
成绩的存储 ,如果能在游戏的最后加上游戏成绩的存储与排行,那更会大大提高玩家对本游戏的体验,增强游戏的人性化。
五、实验要求
基本要求
1) 搭建Android开发环境
2) 理解游戏框架结构
3) 实现游戏菜单
4) 完成声音控制
5) 完成游戏说明
6) 实现游戏确保游戏基本能运行
提高要求
1) 添加音效
2) 提高游戏难度
六、实验心得
本次实验属于综合性的实验,需要实现的内容比较多,一开始拿到题目还是疑惑比较大的,不知从何下手,后来根据老师提供的教学视频,大致知道了编写的顺序,以及具体的功能实现的编写。在教学视频的帮助下,代码编写部分没有太大问题,主要难点在于明白代码的作用及其实现的功能,还有就是理清头绪,分布完成整个实验。在原来程序的基础上,还进行了帮助界面的代码编写,实现帮助界面的呈现。在运行时遇到了一些问题,由于在建立虚拟机时没有注意功能选项,使得建立起来的虚拟机的上下左右键是锁定,无法按下的,则使得游戏无法试玩,后来通过网上搜索找到了问题的所在,即将C:\Users\sony\.android\avd\AVD_for_3_2in_HVGA_slider_ADP1.avd目录下的config文件中“dPad=no”改为“dPad=yes”即可,修改后使得游戏能够进行。通过本次实验,能够将本学期所学的知识综合性的进行运用操作,不仅巩固了理论知识,加深了对安卓编程的熟悉,而且也学到了其他一些知识,加深了对安卓开发的兴趣。除此之外,也发现了自身的很多的不足,对android相关知识的学习还不够深入,还需要以后更加深入的学习。
七、实验过程及代码、运行结果
1.导入图片素材
2.导入音频素材
3.欢迎界面
MainActivity类框架的搭建
设置全屏
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(youtParams.FLAG_FULLSCREEN ,
youtParams.FLAG_FULLSCREEN);
初始化背景音乐、开始音乐
backSound = MediaPlayer.create(this, R.raw.sound1);//背景音乐
backSound.setLooping(true); //设置循环
startSound = MediaPlayer.create(this, R.raw.sound3);
startSound.setLooping(true);
启动欢迎界面线程(睡眠时间200)
welcomeView = new WelcomeView(this);
if(isSound){
startSound.start();
}
this.setContentView(welcomeView);
welcomeViewGoThread = new WelcomeViewGoThread(this);
welcomeViewGoThread.start();
异步启动菜单
Handler myHandler = new Handler(){//用来更新UI线程中的控件
public void handleMessage(Message msg) {
if(msg.what == 1){//收到WelcomeViewGoThread/Welcome发来的消息
welcomeViewGoThread.setFlag(false);
if(welcomeView != null){
welcomeView = null;
}
initAndToMenuView();//启动菜单
}
} };
欢迎界面WelcomeView类的实现 (欢迎界面实现类,负责欢迎界面的绘制工作)
package com.example.pushboxn;
import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
@SuppressLint("ViewConstructor")
public class WelcomeView extends SurfaceView implements
SurfaceHolder.Callback, OnClickListener{//实现两个借口
MainActivity pushBoxActivity;
WelcomeViewDrawThread welcomeViewDrawThread = null;
Bitmap bitmap;
Bitmap wallLeft;//左面的墙
Bitmap wallRight;//右面的墙
Bitmap iron;//铁门
Bitmap woodLeft;//左面的木门
Bitmap woodRight;//右面的木门
Bitmap background;
Bitmap mountain;//背景的山
int wallLeftX = 15;//墙的坐标
int wallLeftY = 10;