贪吃蛇游戏安卓源代码.docx
- 文档编号:11091989
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:9
- 大小:15.85KB
贪吃蛇游戏安卓源代码.docx
《贪吃蛇游戏安卓源代码.docx》由会员分享,可在线阅读,更多相关《贪吃蛇游戏安卓源代码.docx(9页珍藏版)》请在冰点文库上搜索。
贪吃蛇游戏安卓源代码
附录1.SnakeView类
packagecom.example.android_snake.view;
importjava.util.ArrayList;
importjava.util.List;
importjava.util.Random;
importjava.util.Timer;
importjava.util.TimerTask;
importcom.example.android_snake.R;
importcom.example.android_snake.food.Food;
importcom.example.android_snake.snake.Body;
importcom.example.android_snake.snake.Head;
importcom.example.android_snake.snake.Snake;
importcom.example.android_snake.snake.SnakeDirection;importcom.example.android_snake.stone.Stone;
importandroid.annotation.SuppressLint;
importandroid.content.Context;
importandroid.graphics.Bitmap;
importandroid.graphics.BitmapFactory;
importandroid.graphics.Canvas;
importandroid.graphics.Color;
importandroid.graphics.Paint;
importandroid.graphics.Paint.Style;
importandroid.os.Handler;
importandroid.util.DisplayMetrics;
importandroid.view.Display;
importandroid.view.MotionEvent;
importandroid.view.View;
importandroid.view.ViewManager;
importandroid.view.WindowManager;
importandroid.widget.Toast;
publicclassSnakeViewextendsView{
privateContextcontext;
privateBitmapheadBitmap;
privateBitmapbodyBitmap;
privateBitmapfoodBitmap;
privateBitmapstoneBitmap;
//屏幕的高度和宽度
privateintscreenHeight;
privateintscreenWidth;
//每个小格子的高度和宽度
privateinteachHeight;
privateinteachWidth;
privateSnakesnake;
privateFoodfood;
privateStonestone;
privateint[]listx;
privateint[]listy;
privateTimertimer=newTimer();
Handlerhandler=newHandler(){
publicvoidhandleMessage(android.os.Messagemsg){
moveSnake();
invalidate();
}
};
publicSnakeView(Contextcontext){
super(context);
this.context=context;
listx=newint[100];
listy=newint[100];
//获得屏幕的高和宽
DisplayMetricsmetrics=newDisplayMetrics();
WindowManagerwindowManager=(WindowManager)context
.getSystemService(Context.WINDOW_SERVICE);
windowManager.getDefaultDisplay().getMetrics(metrics);
screenHeight=metrics.heightPixels;
screenWidth=metrics.widthPixels;
eachHeight=screenHeight/32;
eachWidth=screenWidth/20;
//初始化图片
headBitmap=BitmapFactory.decodeResource(getResources(),
R.drawable.head);
bodyBitmap=BitmapFactory.decodeResource(getResources(),
R.drawable.body);
foodBitmap=BitmapFactory.decodeResource(getResources(),
R.drawable.food);
stoneBitmap=BitmapFactory.decodeResource(getResources(),
R.drawable.stone);
this.initSnake();
this.initFood();
this.initstone();
gameRun();
}
@Override
protectedvoidonDraw(Canvascanvas){
super.onDraw(canvas);
Paintpaint=newPaint();//定义画笔
paint.setColor(Color.GRAY);//设置画笔颜色
paint.setAntiAlias(true);//去除锯齿
paint.setStyle(Style.STROKE);//设置空心实心
paint.setTextSize(40);
drawLines(canvas,paint);
drawStone(canvas,paint);
if(isCollide()){
canvas.drawText("GameOver!
",screenWidth/4,screenHeight/3,paint);
canvas.drawText("得分",screenWidth/4,screenHeight/2,paint);
timer.cancel();
}else{
this.drawSnake(canvas,paint);
}
booleanflag=IsRectCollision(snake.getHead().getPointX(),snake
.getHead().getPointY(),eachWidth,eachHeight,
food.getPointX(),food.getPointY(),eachWidth,eachHeight);
if(flag){
food=null;
snake.getBodyList().add(newBody());
this.initFood();
this.initstone();
}else{
this.drawFood(canvas,paint);
this.drawStone(canvas,paint);
}
}
//方向控制
@Override
publicbooleanonTouchEvent(MotionEventevent){
intx=(int)event.getX();
inty=(int)event.getY();
SnakeDirectionnowDir=snake.getSnakeDirection();
intm=-screenHeight*x+screenHeight*screenWidth-screenWidth*y;
intn=screenHeight*x-screenWidth*y;
if((m>0&&n>0)&&(nowDir!
=SnakeDirection.DOWN)){
snake.setSnakeDirection(SnakeDirection.UP);
}elseif((m>0&&n<0)&&(nowDir!
=SnakeDirection.RIGHT)){snake.setSnakeDirection(SnakeDirection.LEFT);
}elseif((m<0&&n>0)&&(nowDir!
=SnakeDirection.LEFT)){snake.setSnakeDirection(SnakeDirection.RIGHT);
}elseif((m<0&&n<0)&&(nowDir!
=SnakeDirection.UP)){snake.setSnakeDirection(SnakeDirection.DOWN);
}
returnsuper.onTouchEvent(event);
}
publicvoidgameRun(){
timer.scheduleAtFixedRate(newTimerTask(){
publicvoidrun(){
handler.obtainMessage().sendToTarget();
}
},100,400);
}
/*
*画网格线
*/
publicvoiddrawLines(Canvascanvas,Paintpaint){
intstartX=0,startY=0;
for(inti=0;i<100;i++){
canvas.drawLine(0,startY,screenWidth,startY,paint);
startY=startY+eachHeight;
}
for(inti=0;i<100;i++){
canvas.drawLine(startX,0,startX,screenHeight,paint);
startX=startX+eachWidth;
}
canvas.drawLine(0,0,screenWidth,screenHeight,paint);
canvas.drawLine(0,screenHeight,screenWidth,0,paint);
}
//初始化蛇
publicvoidinitSnake(){
List
bodies=newArrayList();Headhead=newHead(eachWidth*4,eachHeight*2,headBitmap);
Bodybody1=newBody(eachWidth*3,eachHeight*2,bodyBitmap);
Bodybody2=newBody(eachWidth*2,eachHeight*2,bodyBitmap);
Bodybody3=newBody(eachWidth*1,eachHeight*2,bodyBitmap);
Bodybody4=newBody(eachWidth*0,eachHeight*2,bodyBitmap);
bodies.add(body1);
bodies.add(body2);
bodies.add(body3);
bodies.add(body4);
snake=newSnake(head,bodies,SnakeDirection.RIGHT);
}
//画蛇
publicvoiddrawSnake(Canvascanvas,Paintpaint){
canvas.drawBitmap(headBitmap,snake.getHead().getPointX(),snake.getHead().getPointY(),paint);
for(inti=0;i canvas.drawBitmap(bodyBitmap,snake.getBodyList().get(i) .getPointX(),snake.getBodyList().get(i).getPointY(),paint); } } //改变蛇身的位置 publicvoidchangSnakePosition(intpointX,intpointY){ for(inti=snake.getBodyList().size()-1;i>0;i--){ snake.getBodyList().get(i) .setPointX(snake.getBodyList().get(i-1).getPointX()); snake.getBodyList().get(i) .setPointY(snake.getBodyList().get(i-1).getPointY()); } snake.getBodyList().get(0).setPointX(snake.getHead().getPointX()); snake.getBodyList().get(0).setPointY(snake.getHead().getPointY()); } //移动蛇 publicvoidmoveSnake(){ intnowPointX=snake.getHead().getPointX(); intnowPointY=snake.getHead().getPointY(); if(snake.getSnakeDirection()==SnakeDirection.RIGHT){ changSnakePosition(nowPointX,nowPointY); if(nowPointX>=screenWidth-eachWidth){ snake.getHead().setPointX(0); }else{ snake.getHead().setPointX(nowPointX+eachWidth); } }elseif(snake.getSnakeDirection()==SnakeDirection.DOWN){changSnakePosition(nowPointX,nowPointY); if(nowPointY>=screenHeight-eachHeight){ snake.getHead().setPointY(0); }else{ snake.getHead().setPointY(nowPointY+eachHeight); } }elseif(snake.getSnakeDirection()==SnakeDirection.LEFT){ changSnakePosition(nowPointX,nowPointY); if(nowPointX<=0){ snake.getHead().setPointX(screenWidth-eachWidth); }else{ snake.getHead().setPointX(nowPointX-eachWidth); } }elseif(snake.getSnakeDirection()==SnakeDirection.UP){ changSnakePosition(nowPointX,nowPointY); if(nowPointY<=0){ 继续阅读
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 贪吃 游戏 源代码