贪吃蛇游戏安卓田莎莎文档格式.docx

上传人:b****6 文档编号:16549158 上传时间:2022-11-24 格式:DOCX 页数:17 大小:250.91KB
下载 相关 举报
贪吃蛇游戏安卓田莎莎文档格式.docx_第1页
第1页 / 共17页
贪吃蛇游戏安卓田莎莎文档格式.docx_第2页
第2页 / 共17页
贪吃蛇游戏安卓田莎莎文档格式.docx_第3页
第3页 / 共17页
贪吃蛇游戏安卓田莎莎文档格式.docx_第4页
第4页 / 共17页
贪吃蛇游戏安卓田莎莎文档格式.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

贪吃蛇游戏安卓田莎莎文档格式.docx

《贪吃蛇游戏安卓田莎莎文档格式.docx》由会员分享,可在线阅读,更多相关《贪吃蛇游戏安卓田莎莎文档格式.docx(17页珍藏版)》请在冰豆网上搜索。

贪吃蛇游戏安卓田莎莎文档格式.docx

//方格的边长

protectedstaticintmXTileCount;

//X轴上方格的个数

protectedstaticintmYTileCount;

//Y轴上方格的个数

privatestaticintmXOffset;

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

privatestaticintmYOffset;

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

privateBitmap[]mTileArray;

//位图数组

privateint[][]mTileGrid;

//映射整个游戏画面的数组

privatefinalPaintmPaint=newPaint();

//画笔

publicTileView(Contextcontext,AttributeSetattrs){

super(context,attrs);

Log.i(tag,"

TileViewConstructor"

);

mTileSize="

+mTileSize);

}

//重置位图数组的长度

publicvoidresetTiles(inttilecount){

mTileArray=newBitmap[tilecount];

@Override

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

protectedvoidonSizeChanged(intw,inth,intoldw,intoldh){

onSizeChanged,"

+"

w="

+w+"

h="

+h+"

oldw="

+oldw+"

oldh="

+oldh);

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

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

mXTileCount="

+mXTileCount);

mYTileCount="

+mYTileCount);

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

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

mXOffset="

+mXOffset);

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(){

TileView.clearTiles"

for(intx=0;

x<

mXTileCount;

x++){

for(inty=0;

y<

mYTileCount;

y++){

setTile(0,x,y);

}

}

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

publicvoidsetTile(inttileindex,intx,inty){

mTileGrid[x][y]=tileindex;

//onDraw

//将直接操作的画布绘制到手机界面上

publicvoidonDraw(Canvascanvas){

onDraw"

super.onDraw(canvas);

Bitmapbmp;

floatleft;

floattop;

if(mTileGrid[x][y]>

0){

bmp=mTileArray[mTileGrid[x][y]];

left=x*mTileSize+mXOffset;

top=y*mTileSize+mYOffset;

canvas.drawBitmap(bmp,left,top,mPaint);

}

}

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

首先用Handler机制实现定时刷新,代码如下:

classRefreshHandlerextendsHandler{

//获取消息并处理

@Override

publicvoidhandleMessage(Messagemsg){

SnakeView.this.update();

SnakeView.this.invalidate();

//刷新view为基类的界面

Log.i(tag,"

handleMessage|ThreadName="

+Thread.currentThread().getName());

//定时发送消息给UI线程,以此达到更新效果

publicvoidsleep(longdelayMillis){

this.removeMessages(0);

//清空消息队列,Handler进入对新消息的等待

sleep|ThreadName="

//定时发送新消息,激活handler

sendMessageDelayed(obtainMessage(0),delayMillis);

};

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

publicSnakeView(Contextcontext,AttributeSetattrs){

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()绘制墙、果子、蛇,以及更新画面函数、保存位置坐标函数等,具体代码请详见目录。

界面设计

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

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

主界面设计:

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

<

?

xmlversion="

1.0"

encoding="

utf-8"

>

AbsoluteLayoutxmlns:

android="

android:

layout_width="

fill_parent"

layout_height="

background="

@drawable/icon"

<

LinearLayout

android:

orientation="

vertical"

gravity="

center"

<

TextViewandroid:

textColor="

#ff3456ff"

textSize="

40sp"

wrap_content"

visibility="

visible"

text="

Snake"

id="

@+id/text"

center_horizontal"

/TextView>

ImageButton

@+id/ImageButton1"

/ImageButton>

Button

@+id/Button1"

/Button>

@+id/Button5"

@+id/Button3"

/LinearLayout>

/AbsoluteLayout>

其对应的Snake.java文件如下:

publicclassSnakeextendsActivity{

/**Calledwhentheactivityisfirstcreated.*/

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

initialstart();

//初始化

publicvoidinitialstart(){

ImageButtonimageButton=(ImageButton)this.findViewById(R.id.ImageButton1);

Buttonbutton1=(Button)this.findViewById(R.id.Button1);

Buttonbutton3=(Button)this.findViewById(R.id.Button3);

Buttonbutton5=(Button)this.findViewById(R.id.Button5);

button1.setText("

作者信息"

button3.setText("

退出"

button5.setText("

游戏说明"

imageButton.setImageResource(R.drawable.icon1);

//按钮注册到各自的监听器

imageButton.setOnClickListener(newView.OnClickListener(){

publicvoidonClick(Viewview){

Intentintent=newIntent();

intent.setClass(Snake.this,Game.class);

startActivity(intent);

//跳转到Game界面

Snake.this.finish();

});

button1.setOnClickListener(newView.OnClickListener(){

//setContentView(R.layout.author);

intent.setClass(Snake.this,AuthorView.class);

//跳转到作者信息界面

//注销跳转之前的界面

button3.setOnClickListener(newView.OnClickListener(){

//退出应用程序

button5.setOnClickListener(newView.OnClickListener(){

intent.setClass(Snake.this,Help.class);

//跳转到游戏说明界面

游戏界面设计:

游戏界面包括一个button,一个my.game.snake.SnakeView,其game.xml文档如下:

FrameLayoutxmlns:

my.game.snake.SnakeView

@+id/snake"

@drawable/background"

/>

RelativeLayoutandroid:

@+id/relativeLayout1"

<

#ff8888ff"

24sp"

开始"

layout_centerInParent="

true"

Buttonandroid:

返回"

@+id/button4"

layout_alignParentBottom="

>

/RelativeLayout>

/FrameLayout>

相对应的Game.java文件如下:

publicclassGameextendsActivity{

//定义游戏参数

privateSnakeViewmSnakeView;

privatestaticStringICICLE_KEY="

snake-view"

privateintmMode=READY;

publicstaticfinalintPAUSE=0;

publicstaticfinalintREADY=1;

publicstaticfinalintRUNNING=2;

publicstaticfinalintLOSE=3;

setContentView(R.layout.game);

mSnakeView=(SnakeView)findViewById(R.id.snake);

//设置界面背景

mSnakeView.setBackgroundResource(R.drawable.background);

TextViewtv=(TextView)findViewById(R.id.text);

Buttonbutton4=(Button)this.findViewById(R.id.button4);

//根据TextView状态判断是否开始游戏

mSnakeView.setStatusTextView(tv);

if(savedInstanceState==null){

mSnakeView.setMode(SnakeView.READY);

}

else{

Bundlebundle=savedInstanceState.getBundle(ICICLE_KEY);

if(bundle!

=null){

mSnakeView.restoreState(bundle);

}else{

mSnakeView.setMode(SnakeView.PAUSE);

//按钮注册到监听器

button4.setOnClickListener(newView.OnClickListener(){

intent.setClass(Game.this,Snake.clas

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

当前位置:首页 > 工程科技 > 冶金矿山地质

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

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