/**** * 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); };
/****
* 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);
};