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 () {