/**** * Classes ****/ var Shape = Container.expand(function () { var self = Container.call(this); console.log('Shape created'); var shapeGraphics; shapeGraphics = LK.getAsset('circle', { anchorX: 0.5, anchorY: 0.5 }); self.updateColor = function () { var h = self.colorIndex / 32; var s = 0.8; var v = 0.8; self.color = hsvToRgb(h, s, v); shapeGraphics.tint = self.color; }; self.colorIndex = Math.floor(Math.random() * 32); self.updateColor(); shapeGraphics.alpha = 0.5; self.addChild(shapeGraphics); var angle = Math.random() * Math.PI * 2; var speed = 7; self.vx = Math.cos(angle) * speed; self.vy = Math.sin(angle) * speed; self._move_migrated = function () { if (!self.isCollided) { self.x += self.vx; self.y += self.vy; if (self.x - self.width / 2 < 0 || self.x > 2048 - self.width / 2) { self.vx = -self.vx; } if (self.y - self.height / 2 < 0 || self.y > 2732 - self.height / 2) { self.vy = -self.vy; } } else { self.vx = 0; self.vy = 0; self.isCollided = true; self.scalingU = true; } }; self.scalingUp = false; self.scalingDown = false; var scaleUp2 = function scaleUp2() { self.scalingUp = true; }; self.explode = function () { self.isCollided = true; LK.setTimeout(scaleUp2, 1); }; var scaleDown2 = function scaleDown2() { self.scalingDown = true; }; self._update_migrated = function () { if (self.scalingUp) { if (self.scale.x < 4) { self.scale.x += 0.2; self.scale.y += 0.2; } else { self.scalingUp = false; LK.setTimeout(scaleDown2, 4000); } } else if (self.scalingDown) { if (self.scale.x > 0.2) { self.scale.x -= 0.2; self.scale.y -= 0.2; } else { if (self.parent) { self.parent.expandedCount--; } self.destroy(); } } }; }); var StaticShape = Container.expand(function () { var self = Container.call(this); self._update_migrated = function () { if (self.scalingUp) { if (self.scale.x < 4) { self.scale.x += 0.08; self.scale.y += 0.08; } else { self.scalingUp = false; LK.setTimeout(scaleDown2, 5000); } } else if (self.scalingDown) { if (self.scale.x > 0.4) { self.scale.x -= 0.4; self.scale.y -= 0.4; } else { if (self.parent) { self.parent.expandedCount--; } self.destroy(); } } }; var shapeGraphics; shapeGraphics = LK.getAsset('circle', { anchorX: 0.5, anchorY: 0.5 }); shapeGraphics.alpha = 0.5; self.addChild(shapeGraphics); self.isCollided = true; self.scalingUp = true; self.scalingDown = false; self.scale.set(1, 1); var scaleDown2 = function scaleDown2() { console.log('StaticShape.scaleDown2 called'); self.scalingDown = true; }; var update = function update() { if (self.scalingUp) { if (self.scale.x < 4) { self.scale.x += 0.08; self.scale.y += 0.08; } else { self.scalingUp = false; LK.setTimeout(scaleDown2, 4000); } } else if (self.scalingDown) { if (self.scale.x > 0.4) { self.scale.x -= 0.4; self.scale.y -= 0.4; } else { if (self.parent) { self.parent.expandedCount--; } self.destroy(); } } }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ var hsvToRgb = function hsvToRgb(h, s, v) { var r, g, b; var i = Math.floor(h * 6); var f = h * 6 - i; var p = v * (1 - s); var q = v * (1 - f * s); var t = v * (1 - (1 - f) * s); switch (i % 6) { case 0: r = v, g = t, b = p; break; case 1: r = q, g = v, b = p; break; case 2: r = p, g = v, b = t; break; case 3: r = p, g = q, b = v; break; case 4: r = t, g = p, b = v; break; case 5: r = v, g = p, b = q; break; } return (r * 255 << 16) + (g * 255 << 8) + b * 255; }; var circlesCollide = function circlesCollide(o1, o2) { var dx = (o1.x - o2.x) * (o1.x - o2.x); var dy = (o1.y - o2.y) * (o1.y - o2.y); var radii = (o1.width + o2.width) / 2; radii *= radii; if (dx + dy < radii) { return true; } else { return false; } }; game.expandedCount = 1; game.setBackgroundColor('0xCCCCFF'); var currentLevel = 0; var playerScore = 0; var levels = [[1, 5], [3, 7], [6, 9], [8, 12], [10, 15], [15, 20], [18, 25], [25, 32], [30, 40], [35, 50], [50, 65], [75, 75]]; var shapes = []; var levelText = new Text2('Level 1 - Get 1 out of 5 shapes', { size: 80, fill: "#ffffff", align: 'center' }); levelText.anchor.set(0.5, 0); levelText.x = 0; levelText.y = 50; LK.gui.top.addChild(levelText); var collisionsCount = 0; var collisionText = new Text2('Shapes: ' + collisionsCount, { size: 80, fill: "#777777", align: 'center' }); collisionText.anchor.set(0.5, 0); collisionText.x = 0; collisionText.y = 150; LK.gui.top.addChild(collisionText); for (var i = 0; i < 5; i++) { var shape = game.addChild(new Shape()); shape.x = shape.width + Math.random() * (2048 - 2 * shape.width); shape.y = shape.height + Math.random() * (2732 - 2 * shape.height); shapes.push(shape); } var isClicked = false; game.staticShape = null; game.on('down', function (x, y, obj) { if (!isClicked) { isClicked = true; var event = obj; var pos = game.toLocal(event.global); game.staticShape = game.addChild(new StaticShape()); game.staticShape.x = pos.x - game.staticShape.width / 2; game.staticShape.y = pos.y - game.staticShape.height / 2; } }); LK.on('tick', function () { if (game.expandedCount == 0) { if (collisionsCount >= levels[currentLevel][0]) { collisionText.setText('Level Completed - now try this'); playerScore += collisionsCount; currentLevel++; } else { collisionText.setText('Try again'); } shapes.forEach(function (child) { child.destroy(); }); shapes = []; if (currentLevel == levels.length) { collisionText.setText('Good Job!\nAll levels completed!\nYou win :)'); LK.setScore(playerScore); LK.showGameOver(); return; } for (var i = 0; i < (levels[currentLevel] ? levels[currentLevel][1] : 0); i++) { var shape = game.addChild(new Shape()); shape.x = shape.width + Math.random() * (2048 - 2 * shape.width); shape.y = shape.height + Math.random() * (2732 - 2 * shape.height); shapes.push(shape); } isClicked = false; collisionsCount = 0; game.expandedCount = 1; if (currentLevel < levels.length) { levelText.setText('Level ' + (currentLevel + 1) + ' - Get ' + levels[currentLevel][0] + ' out of ' + levels[currentLevel][1] + ' shapes'); } else { levelText.setText('All levels completed!'); } return; } if (game.staticShape && game.staticShape._update_migrated) { game.staticShape._update_migrated(); } shapes.forEach(function (shape) { shape._move_migrated(); if (shape._update_migrated) { shape._update_migrated(); } game.children.forEach(function (child) { if (shape !== child && !shape.isCollided && child.isCollided && circlesCollide(shape, child)) { shape.explode(); collisionsCount++; game.expandedCount++; collisionText.setText('Shapes: ' + collisionsCount); } }); }); });
/****
* Classes
****/
var Shape = Container.expand(function () {
var self = Container.call(this);
console.log('Shape created');
var shapeGraphics;
shapeGraphics = LK.getAsset('circle', {
anchorX: 0.5,
anchorY: 0.5
});
self.updateColor = function () {
var h = self.colorIndex / 32;
var s = 0.8;
var v = 0.8;
self.color = hsvToRgb(h, s, v);
shapeGraphics.tint = self.color;
};
self.colorIndex = Math.floor(Math.random() * 32);
self.updateColor();
shapeGraphics.alpha = 0.5;
self.addChild(shapeGraphics);
var angle = Math.random() * Math.PI * 2;
var speed = 7;
self.vx = Math.cos(angle) * speed;
self.vy = Math.sin(angle) * speed;
self._move_migrated = function () {
if (!self.isCollided) {
self.x += self.vx;
self.y += self.vy;
if (self.x - self.width / 2 < 0 || self.x > 2048 - self.width / 2) {
self.vx = -self.vx;
}
if (self.y - self.height / 2 < 0 || self.y > 2732 - self.height / 2) {
self.vy = -self.vy;
}
} else {
self.vx = 0;
self.vy = 0;
self.isCollided = true;
self.scalingU = true;
}
};
self.scalingUp = false;
self.scalingDown = false;
var scaleUp2 = function scaleUp2() {
self.scalingUp = true;
};
self.explode = function () {
self.isCollided = true;
LK.setTimeout(scaleUp2, 1);
};
var scaleDown2 = function scaleDown2() {
self.scalingDown = true;
};
self._update_migrated = function () {
if (self.scalingUp) {
if (self.scale.x < 4) {
self.scale.x += 0.2;
self.scale.y += 0.2;
} else {
self.scalingUp = false;
LK.setTimeout(scaleDown2, 4000);
}
} else if (self.scalingDown) {
if (self.scale.x > 0.2) {
self.scale.x -= 0.2;
self.scale.y -= 0.2;
} else {
if (self.parent) {
self.parent.expandedCount--;
}
self.destroy();
}
}
};
});
var StaticShape = Container.expand(function () {
var self = Container.call(this);
self._update_migrated = function () {
if (self.scalingUp) {
if (self.scale.x < 4) {
self.scale.x += 0.08;
self.scale.y += 0.08;
} else {
self.scalingUp = false;
LK.setTimeout(scaleDown2, 5000);
}
} else if (self.scalingDown) {
if (self.scale.x > 0.4) {
self.scale.x -= 0.4;
self.scale.y -= 0.4;
} else {
if (self.parent) {
self.parent.expandedCount--;
}
self.destroy();
}
}
};
var shapeGraphics;
shapeGraphics = LK.getAsset('circle', {
anchorX: 0.5,
anchorY: 0.5
});
shapeGraphics.alpha = 0.5;
self.addChild(shapeGraphics);
self.isCollided = true;
self.scalingUp = true;
self.scalingDown = false;
self.scale.set(1, 1);
var scaleDown2 = function scaleDown2() {
console.log('StaticShape.scaleDown2 called');
self.scalingDown = true;
};
var update = function update() {
if (self.scalingUp) {
if (self.scale.x < 4) {
self.scale.x += 0.08;
self.scale.y += 0.08;
} else {
self.scalingUp = false;
LK.setTimeout(scaleDown2, 4000);
}
} else if (self.scalingDown) {
if (self.scale.x > 0.4) {
self.scale.x -= 0.4;
self.scale.y -= 0.4;
} else {
if (self.parent) {
self.parent.expandedCount--;
}
self.destroy();
}
}
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
var hsvToRgb = function hsvToRgb(h, s, v) {
var r, g, b;
var i = Math.floor(h * 6);
var f = h * 6 - i;
var p = v * (1 - s);
var q = v * (1 - f * s);
var t = v * (1 - (1 - f) * s);
switch (i % 6) {
case 0:
r = v, g = t, b = p;
break;
case 1:
r = q, g = v, b = p;
break;
case 2:
r = p, g = v, b = t;
break;
case 3:
r = p, g = q, b = v;
break;
case 4:
r = t, g = p, b = v;
break;
case 5:
r = v, g = p, b = q;
break;
}
return (r * 255 << 16) + (g * 255 << 8) + b * 255;
};
var circlesCollide = function circlesCollide(o1, o2) {
var dx = (o1.x - o2.x) * (o1.x - o2.x);
var dy = (o1.y - o2.y) * (o1.y - o2.y);
var radii = (o1.width + o2.width) / 2;
radii *= radii;
if (dx + dy < radii) {
return true;
} else {
return false;
}
};
game.expandedCount = 1;
game.setBackgroundColor('0xCCCCFF');
var currentLevel = 0;
var playerScore = 0;
var levels = [[1, 5], [3, 7], [6, 9], [8, 12], [10, 15], [15, 20], [18, 25], [25, 32], [30, 40], [35, 50], [50, 65], [75, 75]];
var shapes = [];
var levelText = new Text2('Level 1 - Get 1 out of 5 shapes', {
size: 80,
fill: "#ffffff",
align: 'center'
});
levelText.anchor.set(0.5, 0);
levelText.x = 0;
levelText.y = 50;
LK.gui.top.addChild(levelText);
var collisionsCount = 0;
var collisionText = new Text2('Shapes: ' + collisionsCount, {
size: 80,
fill: "#777777",
align: 'center'
});
collisionText.anchor.set(0.5, 0);
collisionText.x = 0;
collisionText.y = 150;
LK.gui.top.addChild(collisionText);
for (var i = 0; i < 5; i++) {
var shape = game.addChild(new Shape());
shape.x = shape.width + Math.random() * (2048 - 2 * shape.width);
shape.y = shape.height + Math.random() * (2732 - 2 * shape.height);
shapes.push(shape);
}
var isClicked = false;
game.staticShape = null;
game.on('down', function (x, y, obj) {
if (!isClicked) {
isClicked = true;
var event = obj;
var pos = game.toLocal(event.global);
game.staticShape = game.addChild(new StaticShape());
game.staticShape.x = pos.x - game.staticShape.width / 2;
game.staticShape.y = pos.y - game.staticShape.height / 2;
}
});
LK.on('tick', function () {
if (game.expandedCount == 0) {
if (collisionsCount >= levels[currentLevel][0]) {
collisionText.setText('Level Completed - now try this');
playerScore += collisionsCount;
currentLevel++;
} else {
collisionText.setText('Try again');
}
shapes.forEach(function (child) {
child.destroy();
});
shapes = [];
if (currentLevel == levels.length) {
collisionText.setText('Good Job!\nAll levels completed!\nYou win :)');
LK.setScore(playerScore);
LK.showGameOver();
return;
}
for (var i = 0; i < (levels[currentLevel] ? levels[currentLevel][1] : 0); i++) {
var shape = game.addChild(new Shape());
shape.x = shape.width + Math.random() * (2048 - 2 * shape.width);
shape.y = shape.height + Math.random() * (2732 - 2 * shape.height);
shapes.push(shape);
}
isClicked = false;
collisionsCount = 0;
game.expandedCount = 1;
if (currentLevel < levels.length) {
levelText.setText('Level ' + (currentLevel + 1) + ' - Get ' + levels[currentLevel][0] + ' out of ' + levels[currentLevel][1] + ' shapes');
} else {
levelText.setText('All levels completed!');
}
return;
}
if (game.staticShape && game.staticShape._update_migrated) {
game.staticShape._update_migrated();
}
shapes.forEach(function (shape) {
shape._move_migrated();
if (shape._update_migrated) {
shape._update_migrated();
}
game.children.forEach(function (child) {
if (shape !== child && !shape.isCollided && child.isCollided && circlesCollide(shape, child)) {
shape.explode();
collisionsCount++;
game.expandedCount++;
collisionText.setText('Shapes: ' + collisionsCount);
}
});
});
});
a white geometric square shape Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a white dot Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
flat white round disk Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
gif circle spinning animation Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.