if you’re looking to make Snake game in Android then here is the complete guidance to make Snake game in Android
AppleActor.java
package com.codepath.examples.basicsnakegame;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import com.codepath.simplegame.AbstractGamePanel;
import com.codepath.simplegame.actors.PositionedActor;
public class AppleActor extends PositionedActor {
public static final int DRAW_SIZE = 25;
public AppleActor(int x, int y) {
super(x, y, DRAW_SIZE, DRAW_SIZE);
}
@Override
public void stylePaint(Paint p) {
p.setColor(Color.RED);
p.setStyle(Style.FILL);
}
@Override
public void draw(Canvas canvas) {
canvas.drawRoundRect(getRectF(), 10, 10, getPaint());
}
public void reposition(AbstractGamePanel panel) {
setPos(randomCoordForPanel(panel.getWidth()), randomCoordForPanel(panel.getHeight()));
}
protected int randomCoordForPanel(int max) {
int multiplier = max / DRAW_SIZE;
int randomCoordinate = (int) (Math.random() * multiplier);
return randomCoordinate * DRAW_SIZE;
}
}
ScoreBoard.java
package com.codepath.examples.basicsnakegame;
import android.graphics.Canvas;
import android.graphics.Paint;
import com.codepath.simplegame.AbstractGamePanel;
import com.codepath.simplegame.actors.PositionedActor;
public class ScoreBoard extends PositionedActor {
private int score;
public ScoreBoard(AbstractGamePanel context) {
super(context.getWidth() - 150, 30);
this.score = 0;
}
@Override
public void stylePaint(Paint p) {
p.setTextSize(20);
}
public void earnPoints(int points) {
score += points;
}
@Override
public void draw(Canvas canvas) {
canvas.drawText("Score: " + score, getX(), getY(), getPaint());
}
}
SnakeActor.java
package com.codepath.examples.basicsnakegame;
import java.util.ArrayList;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Point;
import android.graphics.Rect;
import android.view.KeyEvent;
import android.view.MotionEvent;
import com.codepath.simplegame.AbstractGamePanel;
import com.codepath.simplegame.Velocity;
import com.codepath.simplegame.actors.SimpleMovingActor;
public class SnakeActor extends SimpleMovingActor {
public static final int DRAW_SIZE = 25;
public static final int STEP = 25;
public ArrayList<Point> tailPos;
public SnakeActor(int x, int y) {
super(x, y, DRAW_SIZE, DRAW_SIZE);
getVelocity().stop().setXDirection(Velocity.DIRECTION_RIGHT).setXSpeed(STEP);
tailPos = new ArrayList<Point>();
tailPos.add(new Point(x - this.getWidth(), y));
tailPos.add(new Point(x - this.getWidth() * 2, y));
}
@Override
public void stylePaint(Paint p) {
p.setColor(Color.GREEN);
p.setStyle(Style.FILL);
}
@Override
public void draw(Canvas canvas) {
getPaint().setColor(Color.GREEN);
canvas.drawRect(getRect(), getPaint());
for (Point p : tailPos) {
Rect r = new Rect(p.x, p.y, p.x + this.getWidth(), p.y + this.getHeight());
canvas.drawRect(r, getPaint());
}
}
public void move() {
if (this.isEnabled()) {
int headX = getPoint().x;
int headY = getPoint().y;
for (int x = tailPos.size() - 1; x > 0; x--) {
tailPos.get(x).set(tailPos.get(x - 1).x, tailPos.get(x - 1).y);
}
tailPos.get(0).set(headX, headY);
super.move();
}
}
public void grow() {
this.tailPos.add(new Point(getX(), getY()));
}
public boolean checkBoundsCollision(AbstractGamePanel panel) {
if (this.getX() < 0) {
return true;
} else if (this.getX() >= (panel.getWidth() - this.getWidth())) {
return true;
} else if (this.getY() < 0) {
return true;
} else if (this.getY() >= (panel.getHeight() - this.getHeight())) {
return true;
}
return false;
}
public void handleKeyInput(int keyCode) {
if (keyCode == KeyEvent.KEYCODE_W) {
getVelocity().stop().setYDirection(Velocity.DIRECTION_UP).setYSpeed(STEP);
} else if (keyCode == KeyEvent.KEYCODE_S) {
getVelocity().stop().setYDirection(Velocity.DIRECTION_DOWN).setYSpeed(STEP);
} else if (keyCode == KeyEvent.KEYCODE_A) {
getVelocity().stop().setXDirection(Velocity.DIRECTION_LEFT).setXSpeed(STEP);
} else if (keyCode == KeyEvent.KEYCODE_D) {
getVelocity().stop().setXDirection(Velocity.DIRECTION_RIGHT).setXSpeed(STEP);
}
}
public void handleTouchInput(MotionEvent event) {
if (getVelocity().getYSpeed() == 0) {
if (event.getY() < this.getY()) {
getVelocity().stop().setYDirection(Velocity.DIRECTION_UP).setYSpeed(STEP);
} else if (event.getY() > this.getY() && getVelocity().getYSpeed() == 0) {
getVelocity().stop().setYDirection(Velocity.DIRECTION_DOWN).setYSpeed(STEP);
}
} else if (getVelocity().getXSpeed() == 0) {
if (event.getX() < this.getX()) {
getVelocity().stop().setXDirection(Velocity.DIRECTION_LEFT).setXSpeed(STEP);
} else if (event.getX() > this.getX()) {
getVelocity().stop().setXDirection(Velocity.DIRECTION_RIGHT).setXSpeed(STEP);
}
}
}
}
SnakeGameActivity.java
package com.codepath.examples.basicsnakegame;
import android.os.Bundle;
public class SnakeGameActivity extends com.codepath.simplegame.GameActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//before activity is created : cold start
//switch back to original Theme (App Theme)
setTheme(R.style.AppTheme);
switchFullscreen();
setContentView(new SnakeGamePanel(this));
}
}
SnakeGamePanel.java
package com.codepath.examples.basicsnakegame;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.KeyEvent;
import android.view.MotionEvent;
import com.codepath.simplegame.AbstractGamePanel;
public class SnakeGamePanel extends AbstractGamePanel {
public SnakeGamePanel(Context context) {
super(context);
}
private SnakeActor snake;
private AppleActor apple;
private ScoreBoard score;
private boolean isPaused = false;
@Override
public void onStart() {
this.snake = new SnakeActor(100, 100);
this.apple = new AppleActor(200, 50);
this.score = new ScoreBoard(this);
}
@Override
public void onTimer() {
if (!isPaused) {
if (this.snake.checkBoundsCollision(this)) {
this.snake.setEnabled(false);
}
this.snake.move();
if (this.apple.intersect(this.snake)) {
this.snake.grow();
this.score.earnPoints(50);
this.apple.reposition(this);
}
}
}
@Override
public void redrawCanvas(Canvas canvas) {
if (this.snake.isEnabled()) {
this.snake.draw(canvas);
this.apple.draw(canvas);
this.score.draw(canvas);
} else {
Paint p = getPaint();
p.setTextSize(50);
p.setColor(Color.BLACK);
canvas.drawText("Game over!", 100, 100, p);
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
this.snake.handleKeyInput(keyCode);
if (keyCode == KeyEvent.KEYCODE_G) {
this.onStart();
}
if (keyCode == KeyEvent.KEYCODE_P) {
isPaused = !isPaused;
}
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
this.snake.handleTouchInput(event);
return true;
}
return false;
}
}