var Dot = Container.expand(function () {
var self = Container.call(this);
var dotGraphics = self.createAsset('dot', 'Updated Dot Graphics', .5, .5);
dotGraphics.scale.set(1.5);
self.eaten = false;
});
var Snake = Container.expand(function () {
var self = Container.call(this);
var gridSize = 100;
var snakeGraphics = self.createAsset('snake', 'Updated Snake Graphics', .5, .5);
snakeGraphics.scale.set(1.5);
self.length = 1;
self.direction = 'right';
self.body = [];
self.move = function () {
var gridSize = 100;
var oldHeadPosition = {
x: snakeGraphics.x,
y: snakeGraphics.y
};
var marginX = 2048 % gridSize / 2;
var marginY = 2732 % gridSize / 2;
switch (self.direction) {
case 'right':
snakeGraphics.x = Math.round((snakeGraphics.x + gridSize - marginX) / gridSize) * gridSize + marginX;
break;
case 'left':
snakeGraphics.x = Math.round((snakeGraphics.x - gridSize - marginX) / gridSize) * gridSize + marginX;
break;
case 'down':
snakeGraphics.y = Math.round((snakeGraphics.y + gridSize - marginY) / gridSize) * gridSize + marginY;
break;
case 'up':
snakeGraphics.y = Math.round((snakeGraphics.y - gridSize - marginY) / gridSize) * gridSize + marginY;
break;
}
for (var i = self.body.length - 1; i > 0; i--) {
self.body[i].x = self.body[i - 1].x;
self.body[i].y = self.body[i - 1].y;
}
if (self.body.length > 0) {
self.body[0].x = oldHeadPosition.x;
self.body[0].y = oldHeadPosition.y;
}
};
self.eat = function (dot) {
self.length++;
var newSegment = self.createAsset('snakeBody', 'Snake Body Segment', .5, .5);
newSegment.scale.set(1.5);
self.body.push(newSegment);
self.addChild(newSegment);
if (self.body.length > 1) {
var lastSegment = self.body[self.body.length - 2];
newSegment.x = lastSegment.x;
newSegment.y = lastSegment.y;
}
};
self.checkCollision = function () {
var maxX = 2000;
var maxY = 2700;
var marginX = 2048 % gridSize / 2;
var marginY = 2732 % gridSize / 2;
if (snakeGraphics.x <= marginX) snakeGraphics.x = maxX - gridSize + marginX;
if (snakeGraphics.x >= maxX + marginX) snakeGraphics.x = marginX;
if (snakeGraphics.y <= marginY) snakeGraphics.y = maxY - gridSize + marginY;
if (snakeGraphics.y >= maxY + marginY) snakeGraphics.y = marginY;
for (var i = 0; i < self.body.length; i++) {
if (snakeGraphics.x === self.body[i].x && snakeGraphics.y === self.body[i].y) {
LK.showGameOver();
break;
}
}
};
});
var Game = Container.expand(function () {
var gridSize = 100;
var self = Container.call(this);
var gridSize = 100;
var marginX = 2048 % gridSize / 2;
var marginY = 2732 % gridSize / 2;
var background = self.createAsset('background', 'Updated Game Background', 0, 0);
background.width = 2048 - 2048 % gridSize;
background.height = 2732 - 2732 % gridSize;
background.x = marginX;
background.y = marginY;
self.addChild(background);
self.x = marginX;
self.y = marginY;
var dots = [];
var snake = self.addChild(new Snake());
var score = 0;
var scoreTxt = new Text2(score.toString(), {
size: 150,
fill: "#1a2314",
font: "'Courier New', monospace",
bold: true,
stroke: '#000000',
strokeThickness: 4,
dropShadow: true,
dropShadowColor: '#000000',
dropShadowBlur: 4,
dropShadowAngle: Math.PI / 6,
dropShadowDistance: 6
});
scoreTxt.anchor.set(.5, 0);
LK.gui.topCenter.addChild(scoreTxt);
var isGameOver = false;
var tickCounter = 0;
var moveFrequency = 7;
LK.on('tick', function () {
tickCounter++;
if (tickCounter % moveFrequency == 0) {
snake.move();
snake.checkCollision();
}
if (isGameOver) {
LK.showGameOver();
}
for (var i = 0; i < dots.length; i++) {
if (snake.intersects(dots[i]) && !dots[i].eaten) {
snake.eat(dots[i]);
dots[i].eaten = true;
score++;
if (score % 10 == 0 && moveFrequency > 1) {
moveFrequency = Math.max(1, moveFrequency - 1);
}
scoreTxt.setText(score.toString());
self.removeChild(dots[i]);
dots.splice(i, 1);
spawnDot();
}
}
});
var startSwipePos = null;
stage.on('down', function (obj) {
startSwipePos = obj.event.getLocalPosition(self);
});
stage.on('up', function (obj) {
if (!startSwipePos) return;
var endSwipePos = obj.event.getLocalPosition(self);
var dx = endSwipePos.x - startSwipePos.x;
var dy = endSwipePos.y - startSwipePos.y;
if (Math.abs(dx) > Math.abs(dy)) {
if (snake.direction !== 'up' && snake.direction !== 'down') return;
snake.direction = dx > 0 ? 'right' : 'left';
} else {
if (snake.direction !== 'right' && snake.direction !== 'left') return;
snake.direction = dy > 0 ? 'down' : 'up';
}
startSwipePos = null;
});
var gridSize = 100;
var spawnDot = function () {
var dot = new Dot();
dot.x = Math.floor(Math.random() * ((2048 - 2 * marginX - gridSize) / gridSize)) * gridSize + marginX + gridSize;
dot.y = Math.floor(Math.random() * ((2732 - 2 * marginY - gridSize) / gridSize)) * gridSize + marginY + gridSize;
dots.push(dot);
self.addChild(dot);
};
spawnDot();
});