1. 引言
目前,随着电子技术和信息技术的快速发展,越来越多的人们对嵌入式设备的功能有了更高要求。特别是以智能手机为代表的移动设备发展为现有的嵌入式结构形体,那么,现在以手机为游戏设备的嵌入式系统应用产品有了非常广泛的用户群体 [1]。它能够益智、增加生活的趣味性、培养团队精神、虚拟现实等好处。然而,从知网等文献库中却发现嵌入式游戏设计的技术实现的相关文献相对较少。而对于嵌入式系统的手机,其操作系统则更能体现其功能和性能的不同 [2] [3],主流的有Google公司开发的Android系统 [4]、苹果公司的IOS系统、诺基亚等公司联盟开发的Symbian系统等。智能手机它们都支持Java语言 [5],通过跨平台的开发语言使智能手机和PC机一样功能强大 [6] [7]。另外嵌入式手机的独立操作系统,可以安装由第三方服务商提供的应用软件,实现功能和性能上的提升 [8]。
由于Symbian、Windows Mobile、IOS这些系统相对的比较封闭,在程序员开发时需要投入一些精力,因此在市场上一个有很强开放性的Android系统平台能够满足这一要求 [9] [10] [11]。Android系统是基于Linux系统,主要使用的是Java语言所构成的,所有的代码都是开放性的 [12],程序员可以很方便开发 [13],使开发效率大大提升 [14]。因此,它在市场上独占鳌头。
基于上述情况,本文提出了贪食蛇游戏的Android嵌入式系统设计,旨在说明嵌入式系统游戏的技术实现过程。随着移动终端和通信技术不断地进步,嵌入式手机游戏系统也变得越来越成熟,它在全世界都被认为是带动移动业务高速发展的重要力量。同时,智能手机的出现,手机游戏业务也呈现指数形式增长。
2. 游戏规则
2.1. 电子游戏的发展
最早的电子游戏基本上是随着第一台计算机的诞生而诞生的。早在20世纪50年代,美国的计算机科学家威力·希金博萨姆使用了电器工程学的装置,制作了一个双人网球的游戏。又到了70年代,麻省理工学院的一个学生布什内尔创造了第一款商业游戏机“电脑空间”,但是由于它的操作过于复杂,还是以失败告终了,后来他又成立了雅达利公司,设计了一套以乒乓球为题材的游戏,获得了圆满成功。在当时,很多程序员都在开发一些游戏,但由于计算机技术还不成熟,只有一些本行的人才会关注这些东西。
2.2. 贪食蛇游戏规则
贪食蛇大作战的前身是贪吃蛇,是上个世纪70年代诞生的很经典的游戏,后来到了90年代,诺基亚开发了一款贪吃蛇,并命名为“Snake”,一般认为,“Snake”是世界上的第一款手机游戏。
游戏规则相信大家都很熟悉了,在这里主要说一说贪食蛇大作战规则,它是玩法玩家在屏幕上通过吃虫子等击败其它的蛇,然后吃它的尸体来获得成长和分数,同时也要防止自己撞倒障碍物。它和贪吃蛇的区别在于:(1) 蛇的数量:贪食蛇大作战有一条蛇是玩家本身,其余的是敌人;贪吃蛇只有一条蛇就是玩家;(2) 食物:贪食蛇大作战有许多只虫子作为蛇成长的基础来源,还有蛇的尸体能够快速成长;贪吃蛇只把小虫作为成长来源;(3) 移动方向:贪食蛇大作战中的蛇可以在水平方向任意方向移动;贪吃蛇只能朝上下左右方向;(4) 速度:贪食蛇大作战中移动的频率大,步长小,可以加速移动,但有能量限制;贪吃蛇移动频率小,步长大,不能加速移动;(5) 死亡条件:贪食蛇大作战中的蛇碰到墙壁或者其它蛇的身体,就会死亡从而变成尸体;贪吃蛇碰到墙壁就会死亡。(6) 贪食蛇大作战使用账号登录,可以在任何平台上玩,有无限模式、限时模式、团队模式;贪吃蛇是单机游戏。游戏结束条件:也是贪食蛇的死亡条件,当玩家碰到墙壁或者其它蛇。
3. 游戏框架
3.1. 基本框架设计
3.1.1. 基本框架
该游戏选用Android系统的运行平台,采用Java语言和面向对象思想开发的一款单机游戏,大体上可以分为两大结构模块:程序控制界面、游戏逻辑模块。
程序控制模块主要功能时实现用户和界面的交互,使各个Activity之间跳转,比如用户点击屏幕上的“开始游戏”按钮,进入游戏界面,最后当玩家死亡时,显示游戏结束,又回到主页面,程序控制也是数据传输的关键部分。
游戏逻辑模块又分为人机交互控制、人工智能和游戏绘图引擎,如图1。
3.1.2. 内容组成
1) Android中的基本知识,如开发环境的搭建(安装ADT)、Android中基本的组件,布局文件、监听器以及游戏中的核心自定义View和绘图工具的用法;
2) 基于Android游戏和动画该如何实现;
3) 游戏中的碰撞检测;
4) 游戏中大量算法的实现;
5) 控制布局文件,改善界面的美观性;
6) 改善游戏卡的问题。
4. 游戏逻辑模块
4.1. 游戏绘图引擎
嵌入式游戏开发的一个重点就是游戏图形开发,其技术上的可行性是关键。此嵌入式游戏开发主要从绘图引擎设计和绘图代价两方面考虑解决游戏绘图引擎的问题。
4.1.1. 绘图引擎设计
绘图引擎技术是基于任务的顺利地完成,以及软件和硬件性能体验方面实现的。在制作贪食蛇大作战时,采用了Java语言进行编程、Eclipse作为Android的开发环境、以及ADT提供的大量图形用户界面组件进行界面设计。Java语言具有较好的开放性、跨平台性、安全性,Java的API当中包含了大量的类库和方法,开发效率极高,系统运行效率较快,面向对象的思想也使开发难度大大地简化。因此在技术上是可行的。
4.1.2. 绘图代价
制作该游戏仅需要一台Windows系统的计算机、以及包含ADT插件的Eclipse,不需要第三方插件和工具,编写适量的绘图代码就能实现相应的操控功能,所以相对成本较小。如果需要对界面进行深层次的美化,可以通过美工技术人员进行设计,然后嵌入到系统资源管理中进行调用即可达到效果。
4.2. 人机交互控制
游戏系统设计采用了面向对象的思想,封装的每个对象都具有相应的接口、属性和方法。用户可以通过设置游戏对象的三种属性完成趣味游戏过程。在该游戏中主要涉及了三种对象,并形成三大类:蛇类、虫子类、点类。用户通过操作这三个类对象实现人机控制功能。
人机交互中主要操作的对象就是蛇类(Snake)。蛇类是游戏中的核心类,蛇的属性有颜色、长度、速度、方向、位置、能量条、头和眼睛的大小。在众多属性中,最为复杂的是位置属性,该属性使用的是Point[][]类型,该二维数组中每一行第一列存储的是蛇的每一个身体的位置,point[0][0]代表头的位置,point[1][0]代表紧挨着头的身体的位置,以此类推,每一个位置都是Point类型。而该数组除了第一列以外的下标所对应的值存储的是蛇的移动轨迹。蛇的方法就是移动,每当执行一次该方法,它的位置数组就会发生一次改变。玩家类主要多了一个积分的属性蛇类代码如下:
package com.sgame.pojo;
public class Snake {
public static final int snakeMaxSize = 399;
public int color;
}
定义该Snake类最大为399,此数值不能更改。
public Snake(int color, int direction, Point[][] location) {
super();
this.color = color;
this.direction = direction;
this.location = location;
}
设置Snake对象的颜色、运动方向以及位置等参数。
4.3. 人工智能控制
智能控制模块是通过一个服务类SnakeService实现的。该类主要处理的是蛇的一些动作,比如像前面提到的如何运动,根据周围有无障碍物并作出响应。代码如下:
public void enemyOper(EnemySnake enemy){
double x = enemy.location[0][0].x;
double y = enemy.location[0][0].y;
if(x < 40){
}
虫子类(Insect),虫子类只有颜色,大小和坐标属性,由于它不会移动,所以没有方向和速度。
点类(Point),点类是构成蛇与虫子的基本要素,因为每一个蛇和虫子在屏幕上的位置都是以坐标的形式存在的,因此点的属性有横坐标和纵坐标。
5. 程序控制界面
5.1. 虚拟器界面
基于Android的贪食蛇游戏开发主要使用Java语言,因此需要先安装有关Java的开发工具,然后再安装ADT插件。
创建模拟器,模拟器能兼容不同的系统。Device Definitions是对虚拟设备的定义,可以定义各种各样的分辨率、模拟器名称、设备、目标、CPU、摄像头、SD卡等。在Android Virtual Devices下的一个模拟器,启动打开后模拟器左边是屏幕,支持触摸,右边是常用的按钮。
创建应用程序,会形成程序图标和activity,Mark this project as a library是让该应用程序以包的形式存在,如果写完的应用程序就是在手机上运行的,不用打包;如果写完的应用程序是给别的应用程序支持的,要打成包的形式。
项目中有大量的文件,src里面放的是Java源文件,gen是被生成的Java文件,是由ADT自动生成和修改的,文件不可手工改动。Android4.2和Android Dependencies是Android的Jar文件。assets存放的是一些资源文件,比如音频、图片。bin放置的是二进制文件,一般不经常用。libs放置的是第三方的Jar文件。Res存放资源文件,在该目录放的文件都会生成id,是一个int型的数据。drawable用来放图片,有4个文件夹用来放置不同分辨率的图片。layout放的是布局文件,menu放的是菜单,values是可设置的参数值。AndroidManifest.xml是整个应用程序的主配置文件。
软件的运行,在项目上点击右键,选择Run As下的Android Application,如果模拟器没有启动,它会自动帮你启动,然后运行;如果已经启动,会直接在模拟器上运行。过一会,就会弹出一个框,询问是否要监视后台输出的错误,通常选择Yes。
5.2. 游戏操作界面
(1) 首先进入游戏主页面,如图2。
(2) 点击开始游戏,进入游戏页面,如图3。
(3) 通过点击屏幕控制玩家的移动方向。
(4) 在游戏中设计显示玩家的得分信息栏目。
(5) 当有的蛇死亡时,会变成尸体成为其它蛇的食物,如图4。
5.3. 自改变界面
一开始的时候,由于游戏蛇的体能有限,不能一直加速移动,所以刚开始应该先吃一些小虫子来获得成长,蛇的形体就自动改变了。当蛇的体能积累得差不多了,遇到和其它蛇互相残杀的时候,这个时候趁着其它蛇“不注意”的时候,偷偷地把头伸到其它蛇的前面,然后突然加速急转弯,其它蛇来不及“反应”,就会碰撞死亡成为他人的食物。这时就不需要玩家设置,蛇的尸体就自改变为食物形状。
6. 结论
基于Android系统的游戏软件已经成为了手机的一个基本配置,本文给出了一个完整的以贪食蛇为例子的游戏开发过程及其技术实现,为嵌入式游戏开发提供了借鉴和帮助。课题开发解决了嵌入式游戏设计遇到的许多问题,一是Android开发环境的搭建,包括Android开发基础的掌握,尽管它是以Java语言为基础,但是它里面还多了许多特殊的控件。二是提供了类对象的游戏设计方式,提高了编程效率和简化了编程的复杂性。首先把对象类和工具类创建好,然后处理游戏中的逻辑部分,这方面要花费较长的时间,主要是针对自定义View的运行机制;其次才是算法设计,解决对象适应玩家规则。三是Android开发的思想方法。能够在Eclipse上开发一个小项目并移植到手机上运行,掌握程序的设计思想、算法。四是对程序设计人员而言,他可以很快地适应使用一种新的编程语言,此游戏的开发启示编程者编程不仅仅是掌握编程语言,而更多的是编程能力。