安卓实验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;