/****
* Classes
****/
var Dot = Container.expand(function () {
var self = Container.call(this);
var dotGraphics = self.attachAsset('dot', {
anchorX: 0.5,
anchorY: 0.5
});
self.eaten = false;
});
var Level = Container.expand(function () {
var self = Container.call(this);
self.targetScore = 10;
self.currentLevel = 1;
self.levelUp = function () {
self.currentLevel++;
self.targetScore += 10;
};
});
var Snake = Container.expand(function () {
var self = Container.call(this);
var gridSize = 100;
var snakeGraphics = self.attachAsset('snake', {
anchorX: 0.5,
anchorY: 0.5
});
self.length = 1;
self.direction = 'right';
self.body = [];
self._move_migrated = 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.attachAsset('snakeBody', {
anchorX: 0.5,
anchorY: 0.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;
}
}
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
var gridSize = 100;
var marginX = 2048 % gridSize / 2;
var marginY = 2732 % gridSize / 2;
var background = game.attachAsset('background', {});
background.width = 2048 - 2048 % gridSize;
background.height = 2732 - 2732 % gridSize;
background.x = marginX;
background.y = marginY;
game.addChild(background);
game.x = marginX;
game.y = marginY;
var dots = [];
var spawnFoodCount = 1;
var snake = game.addChild(new Snake());
var level = game.addChild(new Level());
var score = 0;
var scoreTxt = new Text2(score.toString(), {
size: 150,
fill: "#1a2314",
font: "'Courier New', monospace"
});
scoreTxt.anchor.set(.5, 0);
LK.gui.top.addChild(scoreTxt);
var isGameOver = false;
var tickCounter = 0;
var moveFrequency = 8;
LK.on('tick', function () {
tickCounter++;
if (tickCounter % moveFrequency == 0) {
snake._move_migrated();
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 >= level.targetScore) {
level.levelUp();
moveFrequency = Math.max(1, moveFrequency - 1);
spawnDot();
score = 0;
}
scoreTxt.setText('Score: ' + score + ' Level: ' + level.currentLevel);
scoreTxt.setText(score.toString());
game.removeChild(dots[i]);
dots.splice(i, 1);
spawnDot();
}
}
});
var startSwipePos = null;
game.on('down', function (x, y, obj) {
startSwipePos = game.toLocal(obj.global);
});
game.on('up', function (x, y, obj) {
if (!startSwipePos) {
return;
}
var endSwipePos = game.toLocal(obj.global);
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 spawnDot() {
for (var i = 0; i < spawnFoodCount; i++) {
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);
game.addChild(dot);
}
};
spawnDot(); /****
* Classes
****/
var Dot = Container.expand(function () {
var self = Container.call(this);
var dotGraphics = self.attachAsset('dot', {
anchorX: 0.5,
anchorY: 0.5
});
self.eaten = false;
});
var Level = Container.expand(function () {
var self = Container.call(this);
self.targetScore = 10;
self.currentLevel = 1;
self.levelUp = function () {
self.currentLevel++;
self.targetScore += 10;
};
});
var Snake = Container.expand(function () {
var self = Container.call(this);
var gridSize = 100;
var snakeGraphics = self.attachAsset('snake', {
anchorX: 0.5,
anchorY: 0.5
});
self.length = 1;
self.direction = 'right';
self.body = [];
self._move_migrated = 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.attachAsset('snakeBody', {
anchorX: 0.5,
anchorY: 0.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;
}
}
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
var gridSize = 100;
var marginX = 2048 % gridSize / 2;
var marginY = 2732 % gridSize / 2;
var background = game.attachAsset('background', {});
background.width = 2048 - 2048 % gridSize;
background.height = 2732 - 2732 % gridSize;
background.x = marginX;
background.y = marginY;
game.addChild(background);
game.x = marginX;
game.y = marginY;
var dots = [];
var spawnFoodCount = 1;
var snake = game.addChild(new Snake());
var level = game.addChild(new Level());
var score = 0;
var scoreTxt = new Text2(score.toString(), {
size: 150,
fill: "#1a2314",
font: "'Courier New', monospace"
});
scoreTxt.anchor.set(.5, 0);
LK.gui.top.addChild(scoreTxt);
var isGameOver = false;
var tickCounter = 0;
var moveFrequency = 8;
LK.on('tick', function () {
tickCounter++;
if (tickCounter % moveFrequency == 0) {
snake._move_migrated();
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 >= level.targetScore) {
level.levelUp();
moveFrequency = Math.max(1, moveFrequency - 1);
spawnDot();
score = 0;
}
scoreTxt.setText('Score: ' + score + ' Level: ' + level.currentLevel);
scoreTxt.setText(score.toString());
game.removeChild(dots[i]);
dots.splice(i, 1);
spawnDot();
}
}
});
var startSwipePos = null;
game.on('down', function (x, y, obj) {
startSwipePos = game.toLocal(obj.global);
});
game.on('up', function (x, y, obj) {
if (!startSwipePos) {
return;
}
var endSwipePos = game.toLocal(obj.global);
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 spawnDot() {
for (var i = 0; i < spawnFoodCount; i++) {
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);
game.addChild(dot);
}
};
spawnDot();