/****
* Classes
****/
// Obstacle class for the snake to avoid
var Obstacle = Container.expand(function () {
var self = Container.call(this);
self.attachAsset('obstacle', {
anchorX: 0.5,
anchorY: 0.5
});
});
// Prey class for the snake to eat
var Prey = Container.expand(function () {
var self = Container.call(this);
self.attachAsset('prey', {
anchorX: 0.5,
anchorY: 0.5
});
});
// Assets will be automatically created and loaded by the LK engine based on their usage in the code.
// Example assets: snakeHead, snakeBody, prey, obstacle
// Snake class to manage the snake's segments and movement
var Snake = Container.expand(function () {
var self = Container.call(this);
self.segments = [];
self.direction = {
x: 0,
y: 1
}; // Initial direction: down
// Initialize snake with a head
var head = self.attachAsset('snakeHead', {
anchorX: 0.5,
anchorY: 0.5
});
self.segments.push(head);
// Method to grow the snake
self.grow = function () {
var newSegment = self.attachAsset('snakeBody', {
anchorX: 0.5,
anchorY: 0.5
});
self.segments.push(newSegment);
};
// Method to update snake's position
self.update = function () {
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;
}
self.segments[0].x += self.direction.x * 20; // Move head
self.segments[0].y += self.direction.y * 20;
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 // Init game with black background
});
/****
* Game Code
****/
var snake = new Snake();
game.addChild(snake);
snake.segments[0].x = 2048 / 2;
snake.segments[0].y = 2732 / 2;
var prey = new Prey();
game.addChild(prey);
prey.x = Math.random() * 2048;
prey.y = Math.random() * 2732;
var obstacles = [];
for (var i = 0; i < 5; i++) {
var obstacle = new Obstacle();
game.addChild(obstacle);
obstacle.x = Math.random() * 2048;
obstacle.y = Math.random() * 2732;
obstacles.push(obstacle);
}
// Handle touch events to change snake direction
game.down = function (x, y, obj) {
var head = snake.segments[0];
if (x < head.x) {
snake.direction = {
x: -1,
y: 0
}; // Move left
} else if (x > head.x) {
snake.direction = {
x: 1,
y: 0
}; // Move right
} else if (y < head.y) {
snake.direction = {
x: 0,
y: -1
}; // Move up
} else {
snake.direction = {
x: 0,
y: 1
}; // Move down
}
};
// Update game state
game.update = function () {
snake.update();
// Check for collision with prey
if (snake.segments[0].intersects(prey)) {
snake.grow();
prey.x = Math.random() * 2048;
prey.y = Math.random() * 2732;
}
// Check for collision with obstacles
for (var i = 0; i < obstacles.length; i++) {
if (snake.segments[0].intersects(obstacles[i])) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
}
// Check for collision with self
for (var i = 1; i < snake.segments.length; i++) {
if (snake.segments[0].intersects(snake.segments[i])) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
}
// Check for out of bounds
var head = snake.segments[0];
if (head.x < 0 || head.x > 2048 || head.y < 0 || head.y > 2732) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
};