附 录
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小时内删除。
发表评论