基于Android的贪吃蛇游戏.docx

上传人:b****4 文档编号:12266899 上传时间:2023-04-17 格式:DOCX 页数:33 大小:765.94KB
下载 相关 举报
基于Android的贪吃蛇游戏.docx_第1页
第1页 / 共33页
基于Android的贪吃蛇游戏.docx_第2页
第2页 / 共33页
基于Android的贪吃蛇游戏.docx_第3页
第3页 / 共33页
基于Android的贪吃蛇游戏.docx_第4页
第4页 / 共33页
基于Android的贪吃蛇游戏.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

基于Android的贪吃蛇游戏.docx

《基于Android的贪吃蛇游戏.docx》由会员分享,可在线阅读,更多相关《基于Android的贪吃蛇游戏.docx(33页珍藏版)》请在冰豆网上搜索。

基于Android的贪吃蛇游戏.docx

基于Android的贪吃蛇游戏

东北石油大学应用训练任务书

课程___________________________题目

专业姓名学号

主要内容、基本要求、主要参考资料等

主要内容:

本无线开发应用训练利用ADTeclipse开发Android软件,主要完成贪吃蛇游戏的软件开发。

其中有三大模块,分别是项目框架、游戏类图设计、界面设计。

侧重于Java类的编写和视图layout的的xml编写。

基本要求:

(一)掌握Eclipse集成开发环境中Android开发的完整开发流程;

(二)掌握课题的工作原理,完成系统分析及相应的程序设计工作,包括:

(1)贪吃蛇游戏主界面程序设计;

(2)贪吃蛇游戏类图的设计;

(3)贪吃蛇Android项目框架的搭建。

(三)撰写无线开发应用训练报告。

主要参考资料:

[1]陈炜,张晓蕾,侯燕萍等.Java软件开发技术[M].北京:

人民邮电出版社,2005.

[2]林城.Android2.3应用开发实战[J].机械工业出版社,2011:

17-321.

完成期限2016年2月29日~2016年3月11日

指导教师

2016年2月29日

一、开发背景和需求分析

Android是基于Linux开放性内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统。

早期由原名为"Android"的公司开发,谷歌在2005年收购"Android.Inc"后,继续对Android系统开发运营,它采用了软件堆层(softwarestack,又名软件叠层)的架构[1],主要分为三部分。

底层Linux内核只提供基本功能,其他的应用软件则由各公司自行开发,部分程序以Java编写。

针对当今游戏开发的流行趋势,手机游戏的设计已成为主流,随着计算机技术及硬件技术的不断发展,用户的需求量也越来越多,并且用户追求的效果也越来越好,在此形势下好的设计方法尤为重要,基于android系统的手机游戏设计方法简单且效率较高[2]。

贪吃蛇游戏也是很多人热衷的游戏,用户不仅要求其界面设计精美,更希望操作简单,程序执行速度快。

Android支持使用Java作为编程语言来开发应用程序,而Android的Java开发方面从接口到功能,都有层出不穷的变化。

考虑到Java虚拟机的效率和资源占用,谷歌重新设计了Android的Java,以便能提高效率和减少资源占用,因而与J2ME等不同[3]。

操作系统与应用程序的沟通桥梁,应用分为两层:

函数层(Library)和虚拟机(VirtualMachine)。

Android的中间层多以Java实现,并且采用特殊的Dalvik虚拟机(DalvikVirtualMachine)。

Dalvik虚拟机是一种“暂存器型态”(RegisterBased)的Java虚拟机,变量皆存放于暂存器中,虚拟机的指令相对减少。

贪吃蛇游戏是一款老牌的手机游戏,同时也是一款比较需要耐心地游戏。

贪吃蛇游戏就是一条小蛇,不停地在屏幕上游走,吃各个方向出现的食物,越吃越长。

只要蛇头碰到屏幕四周,或者碰到自己的身子,小蛇就立即毙命。

玩“贪吃蛇游戏”,难度最大的不是蛇长得很长的时候,而是开始的时候。

那时蛇身很短,看上去难度不大,却最容易死掉,因为把玩一条小蛇让人容易走神,失去耐心。

二、开发环境与准备工作

JDK由一个标准类库和一组建立,测试及建立文档的Java实用程序组成。

其核心JavaWTK是Sun公司提供的无线开发工具包,分四种模拟器

Defaultcolorphone用于具有彩色显示屏幕的手机模拟器

Defaultgrayphone用于具有单色灰度屏幕的手机模拟器

Mediacontrolskin用于具有音频和视频控制功能的手机模拟器

Qwertydevice用于具有标准打字键盘的手机模拟器

Eclipse是一个开放源代码的软件开发项目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。

它主要由Eclipse项目、Eclipse工具项目和Eclipse技术项目三个项目组成,具体包括四个部分组成——EclipsePlatform、JDT、CDT和PDE。

ADT是一个用来开发Android应用程序的Eclipse插件[4],本次开发也将应用的EclipseADT插件来完成贪吃蛇游戏的编程。

Android应用越来越广泛,开发Android游戏也渐渐成为市场的必须,本游戏的开发是基于Android4.0系统,采用eclipse编程实现[5]。

具体实现过程分为以下3步:

项目框架、游戏类图设计、界面设计。

1、新建一个eclipse工程。

 

图1新建eclipse工程

2、导入文件

导入相关的程序包

3、编写程序

图2工程中的相关文件

4、运行与调试,运行结果如下图。

图3程序调试

三、系统功能与原型设计

1、功能概述:

功能简述

功能描述

主界面

包含“开始游戏”,“作者信息”,“游戏说明”,“退出”

“贪吃蛇”游戏

首先是用户的贪吃蛇在每个格子中只有一个方向,然后,若“吃”到系统随机给出的小点,则相应的蛇身增加一格,最后,控制蛇头不能触到蛇身任何位置,若触到则游戏结束。

作者信息

主要是贴出个人信息。

游戏说明

对游戏的玩法做出介绍。

2、原型设计

操作系统:

Android4.0及以上版本

屏幕分辨率:

≥320×480

手机型号:

适用于装有Android4.0及以上版本并且屏幕分辨率≥320×480的手机

3、系统流程

图4系统流程

四、详细设计与编程实现

4.1项目框架

新建一个Eclipse工程并命名为Snake,工程如下图所示:

图5Snake工程

工程中包括4个Activity,分别为Snake(主界面)、Game(游戏界面)、Help(游戏说明界面)、AuthorView(作者信息界面),通过不同Activity之间的转换实现不同界面之间的切换。

4.2游戏类图设计

Game(Activity)继承了SnakeView类,SnakeView类继承了TileView类。

TileView类继承了View,如下图所示:

图8类图

TiltView的基类是View,包含了贪吃蛇游戏画面的各个设定参数,主要负责绘制游戏画面。

TileView类定义如下:

publicclassTileViewextendsView{

privatestaticfinalStringtag="yao";

protectedstaticintmTileSize=20;//方格的边长

protectedstaticintmXTileCount;//X轴上方格的个数

protectedstaticintmYTileCount;//Y轴上方格的个数

privatestaticintmXOffset;//绘图时X轴上的起始坐标

privatestaticintmYOffset;//绘图时Y轴上的起始坐标

privateBitmap[]mTileArray;//位图数组

privateint[][]mTileGrid;//映射整个游戏画面的数组

privatefinalPaintmPaint=newPaint();//画笔

publicTileView(Contextcontext,AttributeSetattrs){

super(context,attrs);

Log.i(tag,"TileViewConstructor");

Log.i(tag,"mTileSize="+mTileSize);

}

SnakeView类定义了游戏运行时的画面改变及蛇体和果子的更新方法。

定义SnakeView()函数初始化游戏,代码如下:

publicSnakeView(Contextcontext,AttributeSetattrs){

super(context,attrs);

Log.i(tag,"SnakeViewConstructor");

initSnakeView();//构造函数中,初始化游戏

}

定义initSnakeView()初始化SnakeView类,代码如下:

privatevoidinitSnakeView(){

Log.e(tag,"initSnakeView");

//设置焦点,由于存在文字界面和游戏界面的跳转。

这个focus是不可或缺的。

setFocusable(true);

//取得资源中的图片,加载到砖块字典中。

Resourcesr=this.getContext().getResources();

resetTiles(4);

loadTile(RED_STAR,r.getDrawable(R.drawable.redstar));

loadTile(YELLOW_STAR,r.getDrawable(R.drawable.yellowstar));

loadTile(GREEN_STAR,r.getDrawable(R.drawable.greenstar));

}

此外还定义了updateWalls()、updateApples()、updateSnake()绘制墙、果子、蛇,以及更新画面函数、保存位置坐标函数等,具体代码请详见目录。

4.3界面设计

界面设计包括游戏主界面(Snake)、作者信息界面、游戏说明界面、游戏界面的设计。

界面的设计采用的是xml文档形式,在xml文档中规划好界面布局布局后,分别在java文件中声明。

主界面设计:

主界面包括一个TextView、一个imagebutton、三个button,其main.xml文档如下:

xmlversion="1.0"encoding="utf-8"?

>

android="

android:

layout_width="fill_parent"

android:

layout_height="fill_parent"android:

background="@drawable/icon">

android:

orientation="vertical"

android:

layout_width="fill_parent"

android:

layout_height="fill_parent"android:

gravity="center">

textColor="#ff3456ff"android:

textSize="40sp"android:

layout_height="wrap_content"android:

visibility="visible"android:

text="Snake"android:

layout_width="wrap_content"android:

id="@+id/text"android:

gravity="center_horizontal">

android:

visibility="visible"

android:

layout_width="wrap_content"

android:

layout_height="wrap_content"

android:

id="@+id/ImageButton1">

android:

id="@+id/Button1"

android:

layout_width="wrap_content"

android:

layout_height="wrap_content"

android:

visibility="visible">

android:

id="@+id/Button5"

android:

layout_width="wrap_content"

android:

layout_height="wrap_content"

android:

visibility="visible">

android:

id="@+id/Button3"

android:

layout_width="wrap_content"

android:

layout_height="wrap_content"

android:

visibility="visible">

游戏主界面如下图所示:

图6游戏主界面

游戏界面设计:

游戏界面包括一个button,一个game.snake.SnakeView,其game.xml文档相对应的为Game.java文件。

运行界面图如下所示:

图7游戏开始界面

图8游戏运行界面

图9游戏结束界面

作者信息界面设计:

此界面包括一个TextView、一个button,其author.xml文档相对应的为AuthorView.java文件,设计界面如图10所示。

图10作者信息界面

游戏说明界面设计:

此界面包括一个TextView、一个button,其help.xml文档相对应的为Help.java文件。

游戏说明如图11所示。

图11游戏说明界面

至此,全部界面设计完成,但还有最重要的一步,就是将所有的Activity注册到AndroidManifest.xml中。

AndroidManifest.xml文档如下:

xmlversion="1.0"encoding="utf-8"?

>

android="

package="my.game.snake"

android:

versionCode="1"

android:

versionName="1.0">

icon="@drawable/icon"android:

label="@string/app_name">

name=".Snake"

android:

label="@string/app_name">

name="android.intent.action.MAIN"/>

name="android.intent.category.LAUNCHER"/>

android:

name=".AuthorView">

android:

name=".Game">

android:

name=".Help">

minSdkVersion="3"/>

另外strings.xml中定义了常量字符,至此,贪吃蛇游戏设计完毕。

五、系统调试和运行

1.要切换空间,重新设置Eclipse。

2.在自定的视图中添加一个Button按钮,通过此按钮实现返回主界面的功能,但是此时的Button按钮是显示不出来的,上网查资料很多人说自定的视图也是View,Button也是View,View和View是不能嵌套的,解决的办法是有的,可以在自定义的视图上画一个Button或者绘制某一个区域,并将此区域注册到监听器上去,如果鼠标在此区域点击则返回主界面,否则不执行。

程序调试运行效果图如下:

3.InvalidstarttagLinearLayoutmain.xml放错文件夹,应在\res\layout下。

4.Activitynotstarted,itscurrenttaskhasbeenbroughttothefront解决方法:

在Eclipse中,“project”-->“clean…”。

总结

我所做的设计功能并不算强大,但是这些结合了本学期所学习的内容,主要是界面的设计,并改写了两个类。

通过自己写代码,我更进一步清楚了android工程的框架及设计的步骤,以及每个文件的作用,稍微掌握了一些View类的方法,同时也学到了更多的界面设计的方法,比如如何实现一个TextView里显示多行数据,如何自定义视图等。

通过本次的设计,我学到了很多,我会再接再厉,了解更多,充实自己。

参考文献

[1]陈炜,张晓蕾,侯燕萍等.Java软件开发技术[M].北京:

人民邮电出版社,2005.

[2]林城.Android2.3应用开发实战[J].机械工业出版社,2011:

17-321.

[3]张建源.Android开发技术的学习及应用[J].太原:

现代工业经济及现代化,2014(12):

23-26.

[4]EdBurnette.Hello,Android:

IntroducingGoogle'sMobileDevelpmentPlatform[M].NewYork:

PragmaticBookshelf,2013.

[5]韩超.Android经典应用程序开发[J].人力资源出版社,2011:

5-18.

附录(源程序代码)

TileView.java

packagemy.game.snake;

importandroid.content.Context;

importandroid.graphics.Bitmap;

importandroid.graphics.Canvas;

importandroid.graphics.Paint;

importandroid.graphics.drawable.Drawable;

importandroid.util.AttributeSet;

importandroid.util.Log;

importandroid.view.View;

publicclassTileViewextendsView{

privatestaticfinalStringtag="yao";

protectedstaticintmTileSize=20;//方格的边长

protectedstaticintmXTileCount;//X轴上方格的个数

protectedstaticintmYTileCount;//Y轴上方格的个数

privatestaticintmXOffset;//绘图时X轴上的起始坐标

privatestaticintmYOffset;//绘图时Y轴上的起始坐标

privateBitmap[]mTileArray;//位图数组

privateint[][]mTileGrid;//映射整个游戏画面的数组

privatefinalPaintmPaint=newPaint();//画笔

publicTileView(Contextcontext,AttributeSetattrs){

super(context,attrs);

Log.i(tag,"TileViewConstructor");

Log.i(tag,"mTileSize="+mTileSize);

}

//重置位图数组的长度

publicvoidresetTiles(inttilecount){

mTileArray=newBitmap[tilecount];

}

@Override

//适应各种分辨率的屏幕,当改变屏幕大小尺寸时,同时修改tile的相关计数指标

protectedvoidonSizeChanged(intw,inth,intoldw,intoldh){

Log.i(tag,"onSizeChanged,"+"w="+w+"h="+h+"oldw="+oldw+"oldh="+oldh);

mXTileCount=(int)Math.floor(w/mTileSize);

mYTileCount=(int)Math.floor(h/mTileSize);

Log.i(tag,"mXTileCount="+mXTileCount);

Log.i(tag,"mYTileCount="+mYTileCount);

mXOffset=((w-(mTileSize*mXTileCount))/2);

mYOffset=((h-(mTileSize*mYTileCount))/2);

Log.i(tag,"mXOffset="+mXOffset);

Log.i(tag,"mYOffset="+mYOffset);

mTileGrid=newint[mXTileCount][mYTileCount];

clearTiles();

}

//这里做了一个Drawable到bitmap的转换

publicvoidloadTile(intkey,Drawabletile){

Bitmapbitmap=Bitmap.createBitmap(mTileSize,mTileSize,Bitmap.Config.ARGB_8888);

Canvascanvas=newCanvas(bitmap);

tile.setBounds(0,0,mTileSize,mTileSize);

tile.draw(canvas);

mTileArray[key]=bitmap;

}

//清空图形显示

publicvoidclearTiles(){

Log.i(tag,"TileView.clearTiles");

for(intx=0;x

for(inty=0;y

setTile(0,x,y);

}

}

}

//在相应的坐标位置绘制相应的砖块

publicvoidsetTi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 制度规范

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1