/****
* Classes
****/
// Food class
var Food = Container.expand(function () {
var self = Container.call(this);
var food = self.attachAsset('food', {
anchorX: 0.5,
anchorY: 0.5
});
self.randomizePosition = function () {
self.x = Math.floor(Math.random() * 2048);
self.y = Math.floor(Math.random() * 2732);
};
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 = 10;
self.grow = false;
self.init = function () {
for (var i = 0; i < 5; i++) {
var segment = self.addSegment(1024 - i * 20, 1366);
self.segments.push(segment);
}
};
self.addSegment = function (x, y) {
var segment = self.attachAsset('snakeSegment', {
anchorX: 0.5,
anchorY: 0.5,
x: x,
y: y
});
return segment;
};
self.update = function () {
var newHeadX = self.segments[0].x + self.direction.x * self.speed;
var newHeadY = self.segments[0].y + self.direction.y * self.speed;
if (self.grow) {
var newSegment = self.addSegment(newHeadX, newHeadY);
self.segments.unshift(newSegment);
self.grow = false;
} else {
var tail = self.segments.pop();
tail.x = newHeadX;
tail.y = newHeadY;
self.segments.unshift(tail);
}
// Check for collisions with walls
if (newHeadX < 0 || newHeadX > 2048 || newHeadY < 0 || newHeadY > 2732) {
LK.showGameOver();
}
// Check for collisions with itself
for (var i = 1; i < self.segments.length; i++) {
if (self.segments[0].x === self.segments[i].x && self.segments[0].y === self.segments[i].y) {
LK.showGameOver();
}
}
};
self.changeDirection = function (newDirection) {
if ((newDirection.x !== -self.direction.x || newDirection.y !== -self.direction.y) && (newDirection.x !== self.direction.x || newDirection.y !== self.direction.y)) {
self.direction = newDirection;
}
};
self.init();
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 //Init game with black background
});
/****
* Game Code
****/
var snake = game.addChild(new Snake());
var food = game.addChild(new Food());
var score = 0;
var scoreTxt = new Text2('0', {
size: 150,
fill: "#ffffff"
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
game.update = function () {
snake.update();
// Check for collision with food
if (snake.segments[0].x === food.x && snake.segments[0].y === food.y) {
snake.grow = true;
food.randomizePosition();
score += 1;
scoreTxt.setText(score);
}
};
game.down = function (x, y, obj) {
var head = snake.segments[0];
var direction = {
x: 0,
y: 0
};
if (Math.abs(x - head.x) > Math.abs(y - head.y)) {
direction.x = x > head.x ? 1 : -1;
} else {
direction.y = y > head.y ? 1 : -1;
}
snake.changeDirection(direction);
};