/****
* Classes
****/
// Food class
var Food = Container.expand(function () {
var self = Container.call(this);
var food = LK.getAsset('apple', {
anchorX: 0.5,
anchorY: 0.5
});
self.addChild(food);
self.randomizePosition = function () {
self.x = Math.floor(Math.random() * (2048 - food.width));
self.y = Math.floor(Math.random() * (2732 - food.height));
};
self.randomizePosition();
});
//<Assets used in the game will automatically appear here>
// Snake class
var Snake = Container.expand(function () {
var self = Container.call(this);
self.segments = [];
self.direction = {
x: 1,
y: 0
};
self.speed = 5;
self.grow = false;
self.init = function () {
// Initialize the snake with 3 segments
for (var i = 0; i < 3; i++) {
var segment = self.addSegment(1024 - i * 20, 1366);
self.segments.push(segment);
}
};
self.addSegment = function (x, y) {
var segment = LK.getAsset('snakeImage', {
anchorX: 0.5,
anchorY: 0.5
});
segment.x = x;
segment.y = y;
game.addChild(segment);
return segment;
};
self.update = function () {
// Move the snake
var head = self.segments[0];
var newX = head.x + self.direction.x * self.speed;
var newY = head.y + self.direction.y * self.speed;
// Check for collisions with walls
if (newX < 0 || newX > 2048 || newY < 0 || newY > 2732) {
LK.showGameOver();
return;
}
// Check for collisions with itself
for (var i = 1; i < self.segments.length; i++) {
if (newX === self.segments[i].x && newY === self.segments[i].y) {
LK.showGameOver();
return;
}
}
// Move the segments
for (var i = self.segments.length - 1; i > 0; i--) {
self.segments[i].x = self.segments[i - 1].x;
self.segments[i].y = self.segments[i - 1].y;
}
head.x = newX;
head.y = newY;
// Grow the snake
if (self.grow) {
var tail = self.segments[self.segments.length - 1];
var newSegment = self.addSegment(tail.x, tail.y);
self.segments.push(newSegment);
self.grow = false;
}
};
self.changeDirection = function (newDirection) {
// Prevent the snake from reversing
if (self.direction.x + newDirection.x !== 0 || self.direction.y + newDirection.y !== 0) {
self.direction = newDirection;
}
};
self.init();
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xD3D3D3 //Init game with light gray background
});
/****
* Game Code
****/
var snake = new Snake();
game.addChild(snake);
var food = new Food();
game.addChild(food);
// Create a score text and add it to the top right corner of the screen
var scoreTxt = new Text2('0', {
size: 150,
fill: "#008000"
});
scoreTxt.anchor.set(1, 0); // Sets anchor to the top right corner of the text.
LK.gui.topRight.addChild(scoreTxt);
game.update = function () {
snake.update();
// Check for collision with food
if (snake.segments[0].intersects(food)) {
snake.grow = true;
// Increase the score by 1
LK.setScore(LK.getScore() + 1);
// Update the score text
scoreTxt.setText(LK.getScore());
// Increase the length of the snake more
for (var i = 0; i < 5; i++) {
snake.segments.push(snake.addSegment(snake.segments[snake.segments.length - 1].x, snake.segments[snake.segments.length - 1].y));
}
food.randomizePosition();
}
};
// Handle touch events for direction change
game.down = function (x, y, obj) {
var head = snake.segments[0];
var dx = x - head.x;
var dy = y - head.y;
var direction;
if (Math.abs(dx) > Math.abs(dy)) {
direction = {
x: dx / Math.abs(dx),
y: 0
};
} else {
direction = {
x: 0,
y: dy / Math.abs(dy)
};
}
snake.changeDirection(direction);
};