附    录
1.SnakeView类
package ample.android_snake.view;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import ample.android_snake.R;
import ample.android_snake.food.Food;
import ample.android_snake.snake.Body;
import ample.android_snake.snake.Head;
import ample.android_snake.snake.Snake;
import ample.android_snake.snake.SnakeDirection;
import ample.android_snake.stone.Stone;
import android.annotation.SuppressLint;
import t.Context;
import aphics.Bitmap;
import aphics.BitmapFactory;
import aphics.Canvas;
import aphics.Color;
import aphics.Paint;
import aphics.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);
        DefaultDisplay().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) X();
        int y = (int) Y();
        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) {

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。