/****
* Classes
****/
var Circle = Container.expand(function () {
var self = Container.call(this);
self.shapeGraphics = self.attachAsset('circleAsset', {
anchorX: 0.5,
anchorY: 0.5
});
self.matched = false;
self.match = function () {
self.matched = true;
};
});
var Player = Container.expand(function (shape) {
var self = Container.call(this);
self.playerGraphics = self.createAsset(shape + 'Asset', {
anchorX: 0.5,
anchorY: 0.5
});
self.score = 0;
self.shape = shape;
self.incrementScore = function () {
self.score += 1;
};
});
var Square = Container.expand(function () {
var self = Container.call(this);
self.shapeGraphics = self.attachAsset('squareAsset', {
anchorX: 0.5,
anchorY: 0.5
});
self.matched = false;
self.match = function () {
self.matched = true;
};
});
var Triangle = Container.expand(function () {
var self = Container.call(this);
self.shapeGraphics = self.attachAsset('triangleAsset', {
anchorX: 0.5,
anchorY: 0.5
});
self.matched = false;
self.match = function () {
self.matched = true;
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
var gameStarted = false;
LK.playMusic('ERR', {
loop: true,
fade: {
start: 0,
end: 1,
duration: 1000
}
});
var leftBackground = game.attachAsset('backgroundAsset', {});
leftBackground.width = 2048 / 3;
leftBackground.height = 2732;
leftBackground.tint = 0xFF6347;
var middleBackground = game.attachAsset('backgroundAsset', {});
middleBackground.width = 2048 / 3;
middleBackground.height = 2732;
middleBackground.x = 2048 / 3;
middleBackground.tint = 0x98FB98;
var rightBackground = game.attachAsset('backgroundAsset', {});
rightBackground.width = 2048 / 3;
rightBackground.height = 2732;
rightBackground.x = 2048 / 3 * 2;
rightBackground.tint = 0x87CEFA;
var leftShapes = [];
var middleShapes = [];
var rightShapes = [];
var leftPlayer = game.addChild(new Player('square'));
leftPlayer.x = 2048 / 6;
leftPlayer.y = 2732 - leftPlayer.playerGraphics.height;
var middlePlayer = game.addChild(new Player('circle'));
middlePlayer.x = 2048 / 2;
middlePlayer.y = 2732 - middlePlayer.playerGraphics.height;
var rightPlayer = game.addChild(new Player('triangle'));
rightPlayer.x = 2048 * 5 / 6;
rightPlayer.y = 2732 - rightPlayer.playerGraphics.height;
var scoreTxt = new Text2('0', {
size: 150,
fill: "#ffffff"
});
var tutorialTxt = new Text2('Click to start. Match the shapes!', {
size: 100,
fill: "#ffffff"
});
tutorialTxt.anchor.set(.5, .5);
tutorialTxt.x = 2048 / 2;
tutorialTxt.y = 2732 / 2;
game.addChild(tutorialTxt);
var leftEnableTxt = new Text2('Left side enabled at score 10', {
size: 40,
fill: "#ffffff"
});
leftEnableTxt.anchor.set(.5, 1);
leftEnableTxt.x = 2048 / 6;
leftEnableTxt.y = leftPlayer.y - leftPlayer.playerGraphics.height / 2 - 20;
game.addChild(leftEnableTxt);
var rightEnableTxt = new Text2('Right side enabled at score 20', {
size: 40,
fill: "#ffffff"
});
rightEnableTxt.anchor.set(.5, 1);
rightEnableTxt.x = 2048 * 5 / 6;
rightEnableTxt.y = rightPlayer.y - rightPlayer.playerGraphics.height / 2 - 20;
game.addChild(rightEnableTxt);
scoreTxt.setText(leftPlayer.score + middlePlayer.score + rightPlayer.score);
scoreTxt.anchor.set(.5, 0);
LK.gui.top.addChild(scoreTxt);
var shapeTypes = [Circle, Square, Triangle];
var shapeOrder = ['square', 'circle', 'triangle'];
var shapeSpawnInterval = 40;
var shapeSpeed = 7.49 + Math.min((leftPlayer.score + middlePlayer.score + rightPlayer.score) * 0.5, 20);
var shapeSpawnCounter = 0;
LK.on('tick', function () {
if (gameStarted) {
if (leftPlayer.score + middlePlayer.score + rightPlayer.score >= 10 && (leftShapes.length === 0 || leftShapes.length > 0 && leftShapes[leftShapes.length - 1].y >= 2732 * 3 / 5)) {
var shapeType = shapeTypes[Math.floor(Math.random() * shapeTypes.length)];
var shape = game.addChild(new shapeType());
shape.x = leftPlayer.x;
shape.y = 0;
leftShapes.push(shape);
leftEnableTxt.destroy();
}
if (middleShapes.length === 0 || middleShapes.length > 0 && middleShapes[middleShapes.length - 1].y >= 2732 * 3 / 5) {
var shapeType = shapeTypes[Math.floor(Math.random() * shapeTypes.length)];
var shape = game.addChild(new shapeType());
shape.x = middlePlayer.x;
shape.y = 0;
middleShapes.push(shape);
}
if (leftPlayer.score + middlePlayer.score + rightPlayer.score >= 20 && (rightShapes.length === 0 || rightShapes.length > 0 && rightShapes[rightShapes.length - 1].y >= 2732 * 3 / 5)) {
var shapeType = shapeTypes[Math.floor(Math.random() * shapeTypes.length)];
var shape = game.addChild(new shapeType());
shape.x = rightPlayer.x;
shape.y = 0;
rightShapes.push(shape);
rightEnableTxt.destroy();
}
}
for (var a = leftShapes.length - 1; a >= 0; a--) {
leftShapes[a].y += shapeSpeed;
if (leftShapes[a].y >= leftPlayer.y) {
if (leftShapes[a] instanceof Circle && leftPlayer.shape === 'circle' || leftShapes[a] instanceof Square && leftPlayer.shape === 'square' || leftShapes[a] instanceof Triangle && leftPlayer.shape === 'triangle') {
leftPlayer.incrementScore();
scoreTxt.setText(leftPlayer.score + middlePlayer.score + rightPlayer.score);
LK.effects.flashObject(leftBackground, 0xFFFFFF, 1000);
LK.getSound('shape_pop').play();
leftShapes[a].destroy();
leftShapes.splice(a, 1);
} else {
LK.showGameOver();
}
} else if (leftShapes[a].y > 2732) {
leftShapes[a].destroy();
leftShapes.splice(a, 1);
}
}
for (var a = middleShapes.length - 1; a >= 0; a--) {
middleShapes[a].y += shapeSpeed;
if (middleShapes[a].y >= middlePlayer.y) {
if (middleShapes[a] instanceof Circle && middlePlayer.shape === 'circle' || middleShapes[a] instanceof Square && middlePlayer.shape === 'square' || middleShapes[a] instanceof Triangle && middlePlayer.shape === 'triangle') {
middlePlayer.incrementScore();
scoreTxt.setText(leftPlayer.score + middlePlayer.score + rightPlayer.score);
LK.effects.flashObject(middleBackground, 0xFFFFFF, 1000);
LK.getSound('shape_pop').play();
middleShapes[a].destroy();
middleShapes.splice(a, 1);
} else {
LK.showGameOver();
}
} else if (middleShapes[a].y > 2732) {
middleShapes[a].destroy();
middleShapes.splice(a, 1);
}
}
for (var a = rightShapes.length - 1; a >= 0; a--) {
rightShapes[a].y += shapeSpeed;
if (rightShapes[a].y >= rightPlayer.y) {
if (rightShapes[a] instanceof Circle && rightPlayer.shape === 'circle' || rightShapes[a] instanceof Square && rightPlayer.shape === 'square' || rightShapes[a] instanceof Triangle && rightPlayer.shape === 'triangle') {
rightPlayer.incrementScore();
scoreTxt.setText(leftPlayer.score + middlePlayer.score + rightPlayer.score);
LK.effects.flashObject(rightBackground, 0xFFFFFF, 1000);
LK.getSound('shape_pop').play();
rightShapes[a].destroy();
rightShapes.splice(a, 1);
} else {
LK.showGameOver();
}
} else if (rightShapes[a].y > 2732) {
rightShapes[a].destroy();
rightShapes.splice(a, 1);
}
}
});
game.on('down', function (x, y, obj) {
if (!gameStarted) {
gameStarted = true;
tutorialTxt.destroy();
return;
}
var event = obj;
var pos = game.toLocal(event.global);
if (pos.x >= leftPlayer.x - leftPlayer.playerGraphics.width / 2 && pos.x <= leftPlayer.x + leftPlayer.playerGraphics.width / 2) {
var shapeOrder = ['square', 'circle', 'triangle'];
var currentShapeIndex = shapeOrder.indexOf(leftPlayer.shape);
currentShapeIndex = (currentShapeIndex + 1) % shapeOrder.length;
leftPlayer.shape = shapeOrder[currentShapeIndex];
leftPlayer.removeChild(leftPlayer.playerGraphics);
leftPlayer.playerGraphics = leftPlayer.createAsset(leftPlayer.shape + 'Asset', {
anchorX: 0.5,
anchorY: 0.5
});
leftPlayer.addChild(leftPlayer.playerGraphics);
}
if (pos.x >= middlePlayer.x - middlePlayer.playerGraphics.width / 2 && pos.x <= middlePlayer.x + middlePlayer.playerGraphics.width / 2) {
var shapeOrder = ['square', 'circle', 'triangle'];
var currentShapeIndex = shapeOrder.indexOf(middlePlayer.shape);
currentShapeIndex = (currentShapeIndex + 1) % shapeOrder.length;
middlePlayer.shape = shapeOrder[currentShapeIndex];
middlePlayer.removeChild(middlePlayer.playerGraphics);
middlePlayer.playerGraphics = middlePlayer.createAsset(middlePlayer.shape + 'Asset', {
anchorX: 0.5,
anchorY: 0.5
});
middlePlayer.addChild(middlePlayer.playerGraphics);
}
if (pos.x >= rightPlayer.x - rightPlayer.playerGraphics.width / 2 && pos.x <= rightPlayer.x + rightPlayer.playerGraphics.width / 2) {
var shapeOrder = ['square', 'circle', 'triangle'];
var currentShapeIndex = shapeOrder.indexOf(rightPlayer.shape);
currentShapeIndex = (currentShapeIndex + 1) % shapeOrder.length;
rightPlayer.shape = shapeOrder[currentShapeIndex];
rightPlayer.removeChild(rightPlayer.playerGraphics);
rightPlayer.playerGraphics = rightPlayer.createAsset(rightPlayer.shape + 'Asset', {
anchorX: 0.5,
anchorY: 0.5
});
rightPlayer.addChild(rightPlayer.playerGraphics);
}
var event = obj;
var pos = game.toLocal(event.global);
});