Java Snake Xenzia Game Jar 128x160 New -

I'll develop a complete Snake Xenzia game for 128x160 screen (commonly for older Java ME phones). This will be a standalone .jar compatible game with standard Snake mechanics.

// SnakeMIDlet.java - Main MIDlet for 128x160 screen
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class SnakeMIDlet extends MIDlet { private SnakeCanvas canvas; java snake xenzia game jar 128x160 new

public void startApp() 
    if (canvas == null) 
        canvas = new SnakeCanvas(this);
        Display.getDisplay(this).setCurrent(canvas);
public void pauseApp() {}
public void destroyApp(boolean unconditional) 
    if (canvas != null) 
        canvas.stop();

}

// SnakeCanvas.java - Main game canvas
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.util.*;
public class SnakeCanvas extends GameCanvas implements Runnable {
    private SnakeMIDlet midlet;
    private Thread thread;
    private boolean running;
// Game constants
    private static final int WIDTH = 128;
    private static final int HEIGHT = 160;
    private static final int CELL_SIZE = 8;
    private static final int GRID_WIDTH = WIDTH / CELL_SIZE;  // 16
    private static final int GRID_HEIGHT = HEIGHT / CELL_SIZE; // 20
// Snake state
    private Vector snakeBody;
    private int snakeDirection;
    private int nextDirection;
    private int foodX, foodY;
    private int score;
    private boolean gameOver;
    private boolean paused;
// Directions
    private static final int UP = 0;
    private static final int RIGHT = 1;
    private static final int DOWN = 2;
    private static final int LEFT = 3;
// Colors
    private final int COLOR_BG = 0x000000;
    private final int COLOR_SNAKE = 0x00FF00;
    private final int COLOR_SNAKE_HEAD = 0x33FF33;
    private final int COLOR_FOOD = 0xFF0000;
    private final int COLOR_BORDER = 0xFFFFFF;
    private final int COLOR_TEXT = 0xFFFFFF;
private Random random;
public SnakeCanvas(SnakeMIDlet midlet) 
        super(true);
        this.midlet = midlet;
        random = new Random();
        initGame();
private void initGame() 
        snakeBody = new Vector();
        snakeDirection = RIGHT;
        nextDirection = RIGHT;
        score = 0;
        gameOver = false;
        paused = false;
// Initial snake: 3 segments at center
        int startX = GRID_WIDTH / 2;
        int startY = GRID_HEIGHT / 2;
        for (int i = 0; i < 3; i++) 
            snakeBody.addElement(new int[]startX - i, startY);
generateFood();
private void generateFood() 
        do 
            foodX = random.nextInt(GRID_WIDTH);
            foodY = random.nextInt(GRID_HEIGHT);
         while (isSnakeCell(foodX, foodY));
private boolean isSnakeCell(int x, int y) 
        for (int i = 0; i < snakeBody.size(); i++) 
            int[] segment = (int[]) snakeBody.elementAt(i);
            if (segment[0] == x && segment[1] == y) 
                return true;
return false;
private void updateGame()  paused) return;
snakeDirection = nextDirection;
// Get head position
        int[] head = (int[]) snakeBody.elementAt(0);
        int newX = head[0];
        int newY = head[1];
// Move head
        switch (snakeDirection) 
            case UP: newY--; break;
            case DOWN: newY++; break;
            case LEFT: newX--; break;
            case RIGHT: newX++; break;
// Check collision with food
        boolean ateFood = (newX == foodX && newY == foodY);
// Add new head
        snakeBody.insertElementAt(new int[]newX, newY, 0);
// Remove tail if no food eaten
        if (!ateFood) 
            snakeBody.removeElementAt(snakeBody.size() - 1);
         else 
            score += 10;
            generateFood();
// Check collisions
        if (newX < 0
protected void paint(Graphics g)  Graphics.LEFT);
// Draw pause indicator
        if (paused) 
            g.drawString("PAUSED", WIDTH / 2, HEIGHT / 2, Graphics.HCENTER
private void drawGameOver(Graphics g)  Graphics.VCENTER);
        g.drawString("Score: " + score, WIDTH / 2, HEIGHT / 2, Graphics.HCENTER
public void run() {
        long lastTime = System.currentTimeMillis();
        int frameDelay = 150; // milliseconds per frame
while (running) {
            long currentTime = System.currentTimeMillis();
            long elapsed = currentTime - lastTime;
if (elapsed >= frameDelay) 
                updateGame();
                lastTime = currentTime;
                repaint();
                serviceRepaints();
try 
                Thread.sleep(10);
             catch (InterruptedException e) {}
        }
    }
public void start() 
        running = true;
        thread = new Thread(this);
        thread.start();
public void stop() {
        running = false;
        if (thread != null) {
            try 
                thread.join();
             catch (InterruptedException e) {}
        }
    }
protected void keyPressed(int keyCode) 
        int action = getGameAction(keyCode);
if (gameOver) 
            if (action == FIRE) 
                initGame();
return;
switch (action) 
            case UP:
                if (snakeDirection != DOWN) nextDirection = UP;
                break;
            case DOWN:
                if (snakeDirection != UP) nextDirection = DOWN;
                break;
            case LEFT:
                if (snakeDirection != RIGHT) nextDirection = LEFT;
                break;
            case RIGHT:
                if (snakeDirection != LEFT) nextDirection = RIGHT;
                break;
            case FIRE:
                paused = !paused;
                break;
// Keypad number support (2,8,4,6 for Nokia/SE)
        if (keyCode == KEY_NUM2 && snakeDirection != DOWN) nextDirection = UP;
        if (keyCode == KEY_NUM8 && snakeDirection != UP) nextDirection = DOWN;
        if (keyCode == KEY_NUM4 && snakeDirection != RIGHT) nextDirection = LEFT;
        if (keyCode == KEY_NUM6 && snakeDirection != LEFT) nextDirection = RIGHT;
        if (keyCode == KEY_NUM5) paused = !paused;
}

5. Implementation Highlights

4. Game Design & Logic

Why You Need This Specific Version

You might find dozens of Snake clones online. But only the java snake xenzia game jar 128x160 new offers: I'll develop a complete Snake Xenzia game for

  1. Authentic Tactile Feedback: The vibration motor on Nokia phones triggers precisely when the snake eats an apple. Clones miss this detail.
  2. Offline Reliability: No ads. No micro-transactions. No "energy timers." Just pure, brutal gaming.
  3. Battery Efficiency: A Java game consumes roughly 2% of the battery per hour on a feature phone, versus 30% per hour on an emulated Android game.