android课程设计.docx
- 文档编号:5390452
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:26
- 大小:316.12KB
android课程设计.docx
《android课程设计.docx》由会员分享,可在线阅读,更多相关《android课程设计.docx(26页珍藏版)》请在冰点文库上搜索。
android课程设计
课程设计
课程名称游戏基础开发
题目名称__贪吃蛇手机安卓游戏_
学生学院
专业班级
学号
学生姓名
指导教师
2011年12月13日
1、程序代码:
(1)TileView.java
/**TileView是基于Android的View类实现的方块图类,用来支撑上层类的调用,绘
*制方块图的显示界面
*/
packagemobile.android.demo.snake;
importcom.example.android.snake.R;
importandroid.content.Context;
importandroid.content.res.TypedArray;
importandroid.graphics.Bitmap;
importandroid.graphics.Canvas;
importandroid.graphics.Paint;
importandroid.graphics.drawable.Drawable;
importandroid.util.AttributeSet;
importandroid.view.View;
publicclassTileViewextendsView
{
protectedstaticintmTileSize;
protectedstaticintmXTileCount;
protectedstaticintmYTileCount;
privatestaticintmXOffset;
privatestaticintmYOffset;
privateBitmap[]mTileArray;
privateint[][]mTileGrid;
privatefinalPaintmPaint=newPaint();
publicTileView(Contextcontext,AttributeSetattrs,intdefStyle)
{
super(context,attrs,defStyle);
TypedArraya=context.obtainStyledAttributes(attrs,
R.styleable.TileView);
mTileSize=a.getInt(R.styleable.TileView_tileSize,12);
a.recycle();
}
publicTileView(Contextcontext,AttributeSetattrs)
{
super(context,attrs);
TypedArraya=context.obtainStyledAttributes(attrs,
R.styleable.TileView);
mTileSize=a.getInt(R.styleable.TileView_tileSize,12);
a.recycle();
}
publicvoidresetTiles(inttilecount)
{
mTileArray=newBitmap[tilecount];
}
@Override
protectedvoidonSizeChanged(intw,inth,intoldw,intoldh)
{
mXTileCount=(int)Math.floor(w/mTileSize);
mYTileCount=(int)Math.floor(h/mTileSize);
mXOffset=((w-(mTileSize*mXTileCount))/2);
mYOffset=((h-(mTileSize*mYTileCount))/2);
mTileGrid=newint[mXTileCount][mYTileCount];
clearTiles();
}
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()
{
for(intx=0;x { for(inty=0;y { setTile(0,x,y); } } } publicvoidsetTile(inttileindex,intx,inty) { mTileGrid[x][y]=tileindex; } @Override publicvoidonDraw(Canvascanvas) { super.onDraw(canvas); for(intx=0;x { for(inty=0;y { if(mTileGrid[x][y]>0) { canvas.drawBitmap(mTileArray[mTileGrid[x][y]],mXOffset+x *mTileSize,mYOffset+y*mTileSize,mPaint); } } } } } (2)SnakeView.java /**SnakeView调用了TileView,实现了游戏逻辑和具体的显示。 */ packagemobile.android.demo.snake; importjava.util.ArrayList; importjava.util.Random; importcom.example.android.snake.R; importandroid.content.Context; importandroid.content.res.Resources; importandroid.os.Bundle; importandroid.os.Handler; importandroid.os.Message; importandroid.util.AttributeSet; importandroid.util.Log; importandroid.view.KeyEvent; importandroid.view.MotionEvent; importandroid.view.View; importandroid.widget.TextView; publicclassSnakeViewextendsTileView { privatestaticfinalStringTAG="SnakeView"; privateintmMode=READY; publicstaticfinalintPAUSE=0; publicstaticfinalintREADY=1; publicstaticfinalintRUNNING=2; publicstaticfinalintLOSE=3; privateintmWidth,mHeight; privateintmDirection=NORTH; privateintmNextDirection=NORTH; privatestaticfinalintNORTH=1; privatestaticfinalintSOUTH=2; privatestaticfinalintEAST=3; privatestaticfinalintWEST=4; privatestaticfinalintRED_STAR=1; privatestaticfinalintYELLOW_STAR=2; privatestaticfinalintGREEN_STAR=3; privatelongmScore=0; privatelongmMoveDelay=600; privatelongmLastMove; privateTextViewmStatusText; privateArrayList privateArrayList privatestaticfinalRandomRNG=newRandom(); privateRefreshHandlermRedrawHandler=newRefreshHandler(); classRefreshHandlerextendsHandler { @Override publicvoidhandleMessage(Messagemsg) { SnakeView.this.update(); SnakeView.this.invalidate(); } publicvoidsleep(longdelayMillis) { this.removeMessages(0); sendMessageDelayed(obtainMessage(0),delayMillis); } }; publicSnakeView(Contextcontext,AttributeSetattrs) { super(context,attrs); initSnakeView(); } publicSnakeView(Contextcontext,AttributeSetattrs,intdefStyle) { super(context,attrs,defStyle); initSnakeView(); } privatevoidinitSnakeView() { 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)); } privatevoidinitNewGame() { mSnakeTrail.clear(); mAppleList.clear(); mSnakeTrail.add(newCoordinate(7,7)); mSnakeTrail.add(newCoordinate(6,7)); mSnakeTrail.add(newCoordinate(5,7)); mSnakeTrail.add(newCoordinate(4,7)); mSnakeTrail.add(newCoordinate(3,7)); mSnakeTrail.add(newCoordinate(2,7)); mNextDirection=NORTH; addRandomApple(); addRandomApple(); mMoveDelay=600; mScore=0; } privateint[]coordArrayListToArray(ArrayList { intcount=cvec.size(); int[]rawArray=newint[count*2]; for(intindex=0;index { Coordinatec=cvec.get(index); rawArray[2*index]=c.x; rawArray[2*index+1]=c.y; } returnrawArray; } publicBundlesaveState() { Bundlemap=newBundle(); map.putIntArray("mAppleList",coordArrayListToArray(mAppleList)); map.putInt("mDirection",Integer.valueOf(mDirection)); map.putInt("mNextDirection",Integer.valueOf(mNextDirection)); map.putLong("mMoveDelay",Long.valueOf(mMoveDelay)); map.putLong("mScore",Long.valueOf(mScore)); map.putIntArray("mSnakeTrail",coordArrayListToArray(mSnakeTrail)); returnmap; } privateArrayList { ArrayList intcoordCount=rawArray.length; for(intindex=0;index { Coordinatec=newCoordinate(rawArray[index],rawArray[index+1]); coordArrayList.add(c); } returncoordArrayList; } publicvoidrestoreState(Bundleicicle) { setMode(PAUSE); mAppleList=coordArrayToArrayList(icicle.getIntArray("mAppleList")); mDirection=icicle.getInt("mDirection"); mNextDirection=icicle.getInt("mNextDirection"); mMoveDelay=icicle.getLong("mMoveDelay"); mScore=icicle.getLong("mScore"); mSnakeTrail=coordArrayToArrayList(icicle.getIntArray("mSnakeTrail")); } publicvoidsetTextView(TextViewnewView) { mStatusText=newView; } publicvoidsetMode(intnewMode) { intoldMode=mMode; mMode=newMode; if(newMode==RUNNING&oldMode! =RUNNING) { mStatusText.setVisibility(View.INVISIBLE); update(); return; } Resourcesres=getContext().getResources(); CharSequencestr=""; if(newMode==PAUSE) { str=res.getText(R.string.mode_pause); } if(newMode==READY) { str=res.getText(R.string.mode_ready); } if(newMode==LOSE) { str=res.getString(R.string.mode_lose_prefix)+mScore +res.getString(R.string.mode_lose_suffix); } mStatusText.setText(str); mStatusText.setVisibility(View.VISIBLE); } privatevoidaddRandomApple() { CoordinatenewCoord=null; booleanfound=false; while(! found) { intnewX=1+RNG.nextInt(mXTileCount-2); intnewY=1+RNG.nextInt(mYTileCount-2); newCoord=newCoordinate(newX,newY); booleancollision=false; intsnakelength=mSnakeTrail.size(); for(intindex=0;index { if(mSnakeTrail.get(index).equals(newCoord)) { collision=true; } } found=! collision; } if(newCoord==null) { Log.e(TAG,"SomehowendedupwithanullnewCoord! "); } mAppleList.add(newCoord); } publicvoidupdate() { if(mMode==RUNNING) { longnow=System.currentTimeMillis(); if(now-mLastMove>mMoveDelay) { clearTiles(); updateWalls(); //更新小蛇的位置 updateSnake(); updateApples(); mLastMove=now; } //产生动画效果 mRedrawHandler.sleep(mMoveDelay); } } //绘制围墙 privatevoidupdateWalls() { for(intx=0;x { setTile(GREEN_STAR,x,0); setTile(GREEN_STAR,x,mYTileCount-1); } for(inty=1;y { setTile(GREEN_STAR,0,y); setTile(GREEN_STAR,mXTileCount-1,y); } } //绘制食物 privatevoidupdateApples() { for(Coordinatec: mAppleList) { setTile(YELLOW_STAR,c.x,c.y); } } privatevoidupdateSnake() { booleangrowSnake=false; //获得小蛇的头 Coordinatehead=mSnakeTrail.get(0); CoordinatenewHead=newCoordinate(1,1); mDirection=mNextDirection; switch(mDirection) { caseEAST: { newHead=newCoordinate(head.x+1,head.y); break; } caseWEST: { newHead=newCoordinate(head.x-1,head.y); break; } caseNORTH: { newHead=newCoordinate(head.x,head.y-1); break; } caseSOUTH: { newHead=newCoordinate(head.x,head.y+1); break; } } if((newHead.x<1)||(newHead.y<1)||(newHead.x>mXTileCount-2) ||(newHead.y>mYTileCount-2)) {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- android 课程设计