var Dot = Container.expand(function () { var self = Container.call(this); var dotGraphics = self.createAsset('dot', 'Dot Graphics', .5, .5); self.eaten = false; }); var Snake = Container.expand(function () { var self = Container.call(this); var snakeGraphics = self.createAsset('snake', 'Snake Graphics', .5, .5); self.length = 1; self.direction = 'right'; self.body = []; self.move = function () { var speed = 5; switch (self.direction) { case 'right': self.x += speed; break; case 'left': self.x -= speed; break; case 'down': self.y += speed; break; case 'up': self.y -= speed; break; } }; self.eat = function (dot) { self.length++; var newSegment = self.createAsset('snakeBody', 'Snake Body Segment', .5, .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 () { if (self.x < 0 || self.x > 2048 || self.y < 0 || self.y > 2732) { isGameOver = true; } for (var i = 0; i < self.body.length; i++) { if (self.intersects(self.body[i])) { isGameOver = true; break; } } }; }); var Game = Container.expand(function () { var self = Container.call(this); LK.stageContainer.setBackgroundColor(0x000000); var dots = []; var snake = self.addChild(new Snake()); snake.x = 1024; snake.y = 1366; var scoreTxt = new Text2('0', { size: 150, fill: "#ffffff" }); scoreTxt.anchor.set(.5, 0); LK.gui.topCenter.addChild(scoreTxt); var isGameOver = false; LK.on('tick', function () { snake.move(); snake.checkCollision(); if (isGameOver) { LK.effects.flashScreen(0xff0000, 1000); 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; scoreTxt.setText(parseInt(scoreTxt.text) + 1); } } }); stage.on('down', function (obj) { var event = obj.event; var pos = event.getLocalPosition(self); var angle = Math.atan2(pos.y - snake.y, pos.x - snake.x); if (angle >= -Math.PI / 4 && angle < Math.PI / 4) { snake.direction = 'right'; } else if (angle >= Math.PI / 4 && angle < 3 * Math.PI / 4) { snake.direction = 'down'; } else if (angle >= 3 * Math.PI / 4 && angle <= Math.PI || angle >= -Math.PI && angle < -3 * Math.PI / 4) { snake.direction = 'left'; } else if (angle >= -3 * Math.PI / 4 && angle < -Math.PI / 4) { snake.direction = 'up'; } }); var dotSpawnInterval = LK.setInterval(function () { var dot = new Dot(); dot.x = Math.random() * 2048; dot.y = Math.random() * 2732; dots.push(dot); self.addChild(dot); }, 1000); });
===================================================================
--- original.js
+++ change.js
@@ -8,11 +8,47 @@
var snakeGraphics = self.createAsset('snake', 'Snake Graphics', .5, .5);
self.length = 1;
self.direction = 'right';
self.body = [];
- self.move = function () {};
- self.eat = function (dot) {};
- self.checkCollision = function () {};
+ self.move = function () {
+ var speed = 5;
+ switch (self.direction) {
+ case 'right':
+ self.x += speed;
+ break;
+ case 'left':
+ self.x -= speed;
+ break;
+ case 'down':
+ self.y += speed;
+ break;
+ case 'up':
+ self.y -= speed;
+ break;
+ }
+ };
+ self.eat = function (dot) {
+ self.length++;
+ var newSegment = self.createAsset('snakeBody', 'Snake Body Segment', .5, .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 () {
+ if (self.x < 0 || self.x > 2048 || self.y < 0 || self.y > 2732) {
+ isGameOver = true;
+ }
+ for (var i = 0; i < self.body.length; i++) {
+ if (self.intersects(self.body[i])) {
+ isGameOver = true;
+ break;
+ }
+ }
+ };
});
var Game = Container.expand(function () {
var self = Container.call(this);
LK.stageContainer.setBackgroundColor(0x000000);
@@ -44,15 +80,16 @@
});
stage.on('down', function (obj) {
var event = obj.event;
var pos = event.getLocalPosition(self);
- if (pos.x > snake.x) {
+ var angle = Math.atan2(pos.y - snake.y, pos.x - snake.x);
+ if (angle >= -Math.PI / 4 && angle < Math.PI / 4) {
snake.direction = 'right';
- } else if (pos.x < snake.x) {
- snake.direction = 'left';
- } else if (pos.y > snake.y) {
+ } else if (angle >= Math.PI / 4 && angle < 3 * Math.PI / 4) {
snake.direction = 'down';
- } else if (pos.y < snake.y) {
+ } else if (angle >= 3 * Math.PI / 4 && angle <= Math.PI || angle >= -Math.PI && angle < -3 * Math.PI / 4) {
+ snake.direction = 'left';
+ } else if (angle >= -3 * Math.PI / 4 && angle < -Math.PI / 4) {
snake.direction = 'up';
}
});
var dotSpawnInterval = LK.setInterval(function () {