Code edit (2 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
User prompt
Allow spawning multiple food at once, configure a global variable which stores the default number to spawn
User prompt
Migrate to the latest version of LK
User prompt
Make the snake five times as fast.
User prompt
Make it ten times slower.
User prompt
Make the snake four times as fast.
/**** * 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();
===================================================================
--- original.js
+++ change.js
@@ -120,9 +120,9 @@
game.addChild(background);
game.x = marginX;
game.y = marginY;
var dots = [];
-var defaultDotCount = 3;
+var spawnFoodCount = 1;
var snake = game.addChild(new Snake());
var level = game.addChild(new Level());
var score = 0;
var scoreTxt = new Text2(score.toString(), {
@@ -188,9 +188,9 @@
startSwipePos = null;
});
var gridSize = 100;
var spawnDot = function spawnDot() {
- for (var i = 0; i < defaultDotCount; i++) {
+ 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);