用Android写一个贪吃蛇
时间: 2024-01-06 16:05:13 浏览: 32
很好,以下是一个简单的贪吃蛇游戏的代码:
```
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
public class SnakeGame extends Activity {
private SnakeView snakeView;
private Timer timer = new Timer();
private int snakeLength = 1;
private int[] snakeX = new int[1000];
private int[] snakeY = new int[1000];
private int foodX = 0;
private int foodY = 0;
private int direction = 0; // 0: up, 1: right, 2: down, 3: left
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
snakeView = new SnakeView(this);
setContentView(snakeView);
timer.schedule(new TimerTask() {
@Override
public void run() {
SnakeGame.this.runOnUiThread(new Runnable() {
@Override
public void run() {
snakeView.move();
snakeView.invalidate();
}
});
}
}, 0, 200);
}
public class SnakeView extends View {
private Paint paint = new Paint();
public SnakeView(Context context) {
super(context);
paint.setColor(Color.GREEN);
paint.setStyle(Paint.Style.FILL);
createFood();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.BLACK);
paint.setColor(Color.GREEN);
for (int i = 0; i < snakeLength; i++) {
canvas.drawRect(snakeX[i] * 10, snakeY[i] * 10, snakeX[i] * 10 + 10, snakeY[i] * 10 + 10, paint);
}
paint.setColor(Color.RED);
canvas.drawRect(foodX * 10, foodY * 10, foodX * 10 + 10, foodY * 10 + 10, paint);
}
public void move() {
for (int i = snakeLength - 1; i > 0; i--) {
snakeX[i] = snakeX[i - 1];
snakeY[i] = snakeY[i - 1];
}
switch (direction) {
case 0:
snakeY[0]--;
break;
case 1:
snakeX[0]++;
break;
case 2:
snakeY[0]++;
break;
case 3:
snakeX[0]--;
break;
}
if (snakeX[0] == foodX && snakeY[0] == foodY) {
snakeLength++;
createFood();
}
if (snakeX[0] < 0 || snakeX[0] >= 40 || snakeY[0] < 0 || snakeY[0] >= 60) {
snakeLength = 1;
snakeX[0] = 20;
snakeY[0] = 30;
}
for (int i = 1; i < snakeLength; i++) {
if (snakeX[0] == snakeX[i] && snakeY[0] == snakeY[i]) {
snakeLength = 1;
snakeX[0] = 20;
snakeY[0] = 30;
break;
}
}
}
private void createFood() {
Random random = new Random();
foodX = random.nextInt(40);
foodY = random.nextInt(60);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
snakeX[0] = 20;
snakeY[0] = 30;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
timer.cancel();
}
}
```
这个代码使用了一个 `SnakeView` 类来绘制游戏界面,并使用一个 `Timer` 定时器来定时移动蛇。在 `SnakeView` 类中,我们使用了 `Canvas` 来绘制游戏界面,包括蛇和食物。我们还实现了一个 `move()` 方法来更新蛇的位置,并检查是否吃到了食物或碰到了墙或自己。在 `onCreate()` 方法中,我们创建了一个 `TimerTask` 来定时更新界面,然后将其添加到 `Timer` 中。在 `onDestroy()` 方法中,我们取消了定时器以释放资源。