首页 贪吃蛇游戏安卓源代码

贪吃蛇游戏安卓源代码

举报
开通vip

贪吃蛇游戏安卓源代码附录1.SnakeView类 package com.example.android_snake.view; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.Timer; import java.util.TimerTask; import com.example.android_snake.R; import com.example.android_snake...

贪吃蛇游戏安卓源代码
附录1.SnakeView类 package com.example.android_snake.view; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.Timer; import java.util.TimerTask; import com.example.android_snake.R; import com.example.android_snake.food.Food; import com.example.android_snake.snake.Body; import com.example.android_snake.snake.Head; import com.example.android_snake.snake.Snake; import com.example.android_snake.snake.SnakeDirection; import com.example.android_snake.stone.Stone; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.Style; import android.os.Handler; import android.util.DisplayMetrics; import android.view.Display; import android.view.MotionEvent; import android.view.View; import android.view.ViewManager; import android.view.WindowManager; import android.widget.Toast; public class SnakeView extends View { private Context context; private Bitmap headBitmap; private Bitmap bodyBitmap; private Bitmap foodBitmap; private Bitmap stoneBitmap; // 屏幕的高度和宽度 private int screenHeight; private int screenWidth; // 每个小格子的高度和宽度 private int eachHeight; private int eachWidth; private Snake snake; private Food food; private Stone stone; private int [] listx; private int [] listy; private Timer timer = new Timer(); Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { moveSnake(); invalidate(); } }; public SnakeView(Context context) { super(context); this.context = context; listx =new int[100]; listy =new int[100]; // 获得屏幕的高和宽 DisplayMetrics metrics = new DisplayMetrics(); WindowManager windowManager = (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 protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint paint = new Paint();// 定义画笔 paint.setColor(Color.GRAY);// 设置画笔颜色 paint.setAntiAlias(true);// 去除锯齿 paint.setStyle(Style.STROKE);// 设置空心实心 paint.setTextSize(40); drawLines(canvas, paint); drawStone(canvas, paint); if(isCollide()){ canvas.drawText("Game Over!", screenWidth/4, screenHeight/3, paint); canvas.drawText("得分", screenWidth/4, screenHeight/2, paint); timer.cancel(); }else{ this.drawSnake(canvas, paint); } boolean flag = IsRectCollision(snake.getHead().getPointX(), snake .getHead().getPointY(), eachWidth, eachHeight, food.getPointX(), food.getPointY(), eachWidth, eachHeight); if (flag) { food = null; snake.getBodyList().add(new Body()); this.initFood(); this.initstone(); } else { this.drawFood(canvas, paint); this.drawStone(canvas, paint); } } //方向控制 @Override public boolean onTouchEvent(MotionEvent event) { int x = (int) event.getX(); int y = (int) event.getY(); SnakeDirection nowDir = snake.getSnakeDirection(); int m = -screenHeight * x + screenHeight * screenWidth - screenWidth * y; int n = screenHeight * x - screenWidth * y; if ((m > 0 && n > 0) && (nowDir != SnakeDirection.DOWN)) { snake.setSnakeDirection(SnakeDirection.UP); } else if ((m > 0 && n < 0) && (nowDir != SnakeDirection.RIGHT)) { snake.setSnakeDirection(SnakeDirection.LEFT); } else if ((m < 0 && n > 0) && (nowDir != SnakeDirection.LEFT)) { snake.setSnakeDirection(SnakeDirection.RIGHT); } else if ((m < 0 && n < 0) && (nowDir != SnakeDirection.UP)) { snake.setSnakeDirection(SnakeDirection.DOWN); } return super.onTouchEvent(event); } public void gameRun() { timer.scheduleAtFixedRate(new TimerTask() { public void run() { handler.obtainMessage().sendToTarget(); } }, 100, 400); } /* * 画网格线 */ public void drawLines(Canvas canvas, Paint paint) { int startX = 0, startY = 0; for (int i = 0; i < 100; i++) { canvas.drawLine(0, startY, screenWidth, startY, paint); startY = startY + eachHeight; } for (int i = 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); } // 初始化蛇 public void initSnake() { List bodies = new ArrayList(); Head head = new Head(eachWidth * 4, eachHeight * 2, headBitmap); Body body1 = new Body(eachWidth * 3, eachHeight * 2, bodyBitmap); Body body2 = new Body(eachWidth * 2, eachHeight * 2, bodyBitmap); Body body3 = new Body(eachWidth * 1, eachHeight * 2, bodyBitmap); Body body4 = new Body(eachWidth * 0, eachHeight * 2, bodyBitmap); bodies.add(body1); bodies.add(body2); bodies.add(body3); bodies.add(body4); snake = new Snake(head, bodies, SnakeDirection.RIGHT); } // 画蛇 public void drawSnake(Canvas canvas, Paint paint) { canvas.drawBitmap(headBitmap, snake.getHead().getPointX(), snake .getHead().getPointY(), paint); for (int i = 0; i < snake.getBodyList().size(); i++) { canvas.drawBitmap(bodyBitmap, snake.getBodyList().get(i) .getPointX(), snake.getBodyList().get(i).getPointY(), paint); } } // 改变蛇身的位置 public void changSnakePosition(int pointX, int pointY) { for (int i = 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()); } // 移动蛇 public void moveSnake() { int nowPointX = snake.getHead().getPointX(); int nowPointY = 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); } } else if (snake.getSnakeDirection() == SnakeDirection.DOWN) { changSnakePosition(nowPointX, nowPointY); if (nowPointY >= screenHeight - eachHeight) { snake.getHead().setPointY(0); } else { snake.getHead().setPointY(nowPointY + eachHeight); } } else if (snake.getSnakeDirection() == SnakeDirection.LEFT) { changSnakePosition(nowPointX, nowPointY); if (nowPointX <= 0) { snake.getHead().setPointX(screenWidth - eachWidth); } else { snake.getHead().setPointX(nowPointX - eachWidth); } } else if (snake.getSnakeDirection() == SnakeDirection.UP) { changSnakePosition(nowPointX, nowPointY); if (nowPointY <= 0) { 继续阅读
本文档为【贪吃蛇游戏安卓源代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_358746
暂无简介~
格式:doc
大小:34KB
软件:Word
页数:13
分类:互联网
上传时间:2019-02-18
浏览量:54