写了一个 贪吃蛇小程序 结果出错 请大家帮忙看下
写了一个 贪吃蛇小程序 结果出错
public class snake extends View {
Bitmap bmsnake; // 贪吃蛇的图片
Bitmap bmbean; // 小豆子图片
int snakelong = 3; // 贪吃蛇的长度
float snakeX = 63; // X的初始位置
float snakeY = 0; // Y的初始位置
// 可供玩家选择的方向
int up = 0;
int down = 0;
int right = 1;
int left = 0;
// 根据判断 是否生成新的小豆子
boolean bean = true;
// 生成小豆子 所在的坐标系
float beanX = 0;
float beanY = 0;
ArrayList<Float> positionX = new ArrayList<Float>();
ArrayList<Float> positionY = new ArrayList<Float>();
public snake(Context context) {
super(context);
// 得到图片
bmsnake = ((BitmapDrawable) getContext().getResources().getDrawable(
R.drawable.redstar)).getBitmap();
bmbean = ((BitmapDrawable) (BitmapDrawable) getContext().getResources()
.getDrawable(R.drawable.yellowstar)).getBitmap();
for (int i = 0; i < snakelong; i++) {
positionX.add(i, (snakeX - i * bmsnake.getWidth()));
positionY.add(i, (snakeY));
}
// 开辟一个时间定时器 每隔500毫秒执行一次
Timer tm = new Timer();
tm.schedule(new mytimer(), 200, 500);
}
class mytimer extends TimerTask {
@Override
public void run() {
Message msg = new Message();
msg.what = 110;
ck.handleMessage(msg); // 给自己发送信息
}
}
// 回调函数 给自己发送信息
Handler.Callback ck = new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if (msg.what == 110) {
if (up == 1) {
snakeY -= 21;
}
if (down == 1) {
snakeY += 21;
}
if (right == 1) {
snakeX += 21;
}
if (left == 1) {
snakeX -= 21;
}
}
// 当贪吃蛇吃到豆子时
if (snakeX == beanX && snakeY == beanY) {
bean = true;
snakelong++;
}
// 保存小蛇当前的路线
for (int i = snakelong - 1; i > 0; i--) {
positionX.set(i, positionX.get(i - 1));
positionY.set(i, positionY.get(i - 1));
}
if (snakeX > 310) {
snakeX = 0;
}
if (snakeY > 420) {
snakeY = 0;
}
if (snakeX < 0) {
snakeX = 310;
}
if (snakeY < 0) {
snakeY = 420;
}
return false;
}
};
// 设置 小蛇走的方向
public void setPath(String path) {
if (path == "up") {
up = 1;
down = 0;
right = 0;
left = 0;
} else if (path == "down") {
up = 0;
down = 1;
right = 0;
left = 0;
} else if (path == "right") {
up = 0;
down = 0;
right = 1;
left = 0;
} else if (path == "left") {
up = 0;
down = 0;
right = 0;
left = 1;
}
}
// 画图
@Override
protected void onDraw(Canvas canvas) {
positionX.set(0, snakeX);
positionY.set(0, snakeY);
Paint p = new Paint();
for (int i = 0; i < snakelong; i++) {
canvas.drawBitmap(bmsnake, positionX.get(i), positionY.get(i), p);
}
if (bean == true) {
beanX = (float) (new Random().nextInt(14) * 21);
beanY = (float) (new Random().nextInt(20) * 21);
bean = false;
}
canvas.drawBitmap(bmbean, beanX, beanY, p);
super.onDraw(canvas);
postInvalidate(); // 刷新
}
}
当我的小蛇吃到豆子的时候 系统就崩溃,大家帮忙看一下 是哪里的问题