/****
* Classes
****/
var Bomb = Container.expand(function () {
var self = Container.call(this);
var bombGraphics = self.attachAsset('healthBar', {
anchorX: 0.5,
anchorY: 0.5
});
bombGraphics.scale.x *= 1.5;
bombGraphics.scale.y *= 1.5;
bombGraphics.tint = 0xffff00; // Yellow color for bomb
self.speed = 12;
self.targetX = 0;
self.targetY = 0;
self.directionX = 0;
self.directionY = 0;
self.setTarget = function (x, y) {
self.targetX = x;
self.targetY = y;
var deltaX = x - self.x;
var deltaY = y - self.y;
var distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
self.directionX = deltaX / distance * self.speed;
self.directionY = deltaY / distance * self.speed;
};
self._move_migrated = function () {
self.x += self.directionX;
self.y += self.directionY;
if (self.x > 2148 || self.x < -100 || self.y > 2832 || self.y < -100) {
self.destroy();
}
};
});
var Explosion = Container.expand(function () {
var self = Container.call(this);
var explosionGraphics = self.attachAsset('explosion', {
anchorX: 0.5,
anchorY: 0.5
});
explosionGraphics.scale.x *= 2;
explosionGraphics.scale.y *= 2;
self.duration = 30;
self.tick = function () {
self.duration--;
if (self.duration <= 0) {
self.destroy();
}
};
});
var FastCloud = Container.expand(function () {
var self = Container.call(this);
var cloudGraphics = self.attachAsset('cloud', {
anchorX: 0.5,
anchorY: 0.5
});
cloudGraphics.scale.x *= 6;
cloudGraphics.scale.y *= 6;
self.speed = (Math.random() * 3 + 1) * 6;
self._move_migrated = function () {
self.x -= self.speed;
if (self.x <= -cloudGraphics.width) {
self.x = 2048 + cloudGraphics.width;
self.y = Math.random() * 2732;
}
};
});
var HeroMissile = Container.expand(function () {
var self = Container.call(this);
var missileGraphics = self.attachAsset('missile', {
anchorX: 0.5,
anchorY: 0.5
});
missileGraphics.scale.x *= 2;
missileGraphics.scale.y *= 2;
missileGraphics.tint = 0x00ff00;
self.speed = 15;
self._move_migrated = function () {
self.x += self.speed;
if (self.x > 2148) {
self.destroy();
}
};
});
var MediumCloud = Container.expand(function () {
var self = Container.call(this);
var cloudGraphics = self.attachAsset('cloud', {
anchorX: 0.5,
anchorY: 0.5
});
cloudGraphics.scale.x *= 4;
cloudGraphics.scale.y *= 4;
self.speed = (Math.random() * 2 + 1) * 4;
self._move_migrated = function () {
self.x -= self.speed;
if (self.x <= -cloudGraphics.width) {
self.x = 2048 + cloudGraphics.width;
self.y = Math.random() * 2732;
}
};
});
var SlowCloud = Container.expand(function () {
var self = Container.call(this);
var cloudGraphics = self.attachAsset('cloud', {
anchorX: 0.5,
anchorY: 0.5
});
cloudGraphics.scale.x *= 2;
cloudGraphics.scale.y *= 2;
self.speed = (Math.random() * 1 + 1) * 2;
self._move_migrated = function () {
self.x -= self.speed;
if (self.x <= -cloudGraphics.width) {
self.x = 2048 + cloudGraphics.width;
self.y = Math.random() * 2732;
}
};
});
var Superman = Container.expand(function () {
var self = Container.call(this);
var supermanGraphics = self.attachAsset('superman', {
anchorX: 0.5,
anchorY: 0.5
});
self.hitCount = 0;
self._move_migrated = function (x, y) {
self.x = x;
self.y = y;
};
});
var Target = Container.expand(function () {
var self = Container.call(this);
var targetGraphics = self.attachAsset('missile', {
anchorX: 0.5,
anchorY: 0.5
});
targetGraphics.scale.x *= 3;
targetGraphics.scale.y *= 3;
self.speed = 8;
self.lastX = undefined;
self._move_migrated = function () {
if (self.lastX === undefined) self.lastX = self.x;
self.x -= self.speed;
if (self.x < -100) {
self.destroy();
}
self.lastX = self.x;
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
game.setBackgroundColor(0x0000ff);
var gameStarted = false;
var startText = new Text2('START', {
size: 150,
fill: '#ffffff'
});
startText.anchor.set(0.5, 0.5);
startText.x = 2048 / 2;
startText.y = 2732 / 2;
game.addChild(startText);
var clouds = [];
for (var i = 0; i < 3; i++) {
var slowCloud = new SlowCloud();
slowCloud.x = Math.random() * 2048;
slowCloud.y = Math.random() * 2732;
clouds.push(slowCloud);
game.addChild(slowCloud);
}
for (var i = 0; i < 3; i++) {
var mediumCloud = new MediumCloud();
mediumCloud.x = Math.random() * 2048;
mediumCloud.y = Math.random() * 2732;
clouds.push(mediumCloud);
game.addChild(mediumCloud);
}
for (var i = 0; i < 3; i++) {
var fastCloud = new FastCloud();
fastCloud.x = Math.random() * 2048;
fastCloud.y = Math.random() * 2732;
clouds.push(fastCloud);
game.addChild(fastCloud);
}
var superman = game.addChild(new Superman());
var targets = [];
var bombs = [];
superman.x = 200;
superman.y = 2732 / 2;
var isGameOver = false;
var tickOffset = 0;
var gameDuration = 0;
var score = 0;
var scoreText = new Text2('Score: 0', {
size: 100,
fill: '#ffffff'
});
scoreText.anchor.set(0, 0);
scoreText.x = 50;
scoreText.y = 50;
game.addChild(scoreText);
var gameDurationText = new Text2('0', {
size: 150,
fill: '#ffffff'
});
gameDurationText.anchor.set(.5, 0);
LK.gui.top.addChild(gameDurationText);
LK.on('tick', function () {
if (!gameStarted) {
return;
}
if (isGameOver) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
// Move and cleanup bombs
for (var b = bombs.length - 1; b >= 0; b--) {
if (bombs[b]) {
bombs[b]._move_migrated();
if (bombs[b].x > 2148 || bombs[b].x < -100 || bombs[b].y > 2832 || bombs[b].y < -100) {
bombs[b].destroy();
bombs.splice(b, 1);
}
}
}
// Check bomb-target collisions
for (var b = bombs.length - 1; b >= 0; b--) {
if (bombs[b]) {
for (var t = targets.length - 1; t >= 0; t--) {
if (targets[t] && bombs[b].intersects(targets[t])) {
// Create explosion at collision point
var explosion = new Explosion();
explosion.x = targets[t].x;
explosion.y = targets[t].y;
game.addChild(explosion);
// Destroy bomb and target
bombs[b].destroy();
targets[t].destroy();
bombs.splice(b, 1);
targets.splice(t, 1);
// Increase score
score += 10;
scoreText.setText('Score: ' + score);
break;
}
}
}
}
// Move and cleanup targets
for (var a = targets.length - 1; a >= 0; a--) {
if (targets[a]) {
targets[a]._move_migrated();
if (targets[a].x < -100) {
targets[a].destroy();
targets.splice(a, 1);
}
}
}
// Check if targets reach superman (game over condition)
for (var e = targets.length - 1; e >= 0; e--) {
if (targets[e] && superman.intersects(targets[e])) {
isGameOver = true;
}
}
clouds.forEach(function (cloud) {
cloud._move_migrated();
});
if (tickOffset++ % 60 == 0) {
gameDuration++;
gameDurationText.setText(gameDuration);
}
// Spawn targets more frequently as game progresses
var spawnRate = Math.max(Math.floor((45 - gameDuration * 2) * 1.45), Math.floor(15 * 1.45));
if (tickOffset % spawnRate == 0) {
var newTarget = new Target();
newTarget.x = 2148;
newTarget.y = Math.random() * 2732;
newTarget.lastX = newTarget.x;
targets.push(newTarget);
game.addChild(newTarget);
}
game.children.forEach(function (child) {
if (child instanceof Explosion) {
child.tick();
}
});
});
var dragNode = null;
game.on('down', function (x, y, obj) {
if (!gameStarted) {
gameStarted = true;
startText.visible = false;
}
if (gameStarted) {
// Throw bomb towards tap location
var bomb = new Bomb();
bomb.x = superman.x;
bomb.y = superman.y;
bomb.setTarget(x, y);
bombs.push(bomb);
game.addChild(bomb);
}
dragNode = superman;
});
function handleMove(obj) {
if (!gameStarted) {
return;
}
var event = obj.event;
var pos = game.toLocal(event.global);
if (dragNode) {
dragNode._move_migrated(pos.x, pos.y);
}
}
game.on('move', function (x, y, obj) {
obj.event = obj;
handleMove(obj);
});
game.on('up', function (x, y, obj) {
dragNode = null;
}); /****
* Classes
****/
var Bomb = Container.expand(function () {
var self = Container.call(this);
var bombGraphics = self.attachAsset('healthBar', {
anchorX: 0.5,
anchorY: 0.5
});
bombGraphics.scale.x *= 1.5;
bombGraphics.scale.y *= 1.5;
bombGraphics.tint = 0xffff00; // Yellow color for bomb
self.speed = 12;
self.targetX = 0;
self.targetY = 0;
self.directionX = 0;
self.directionY = 0;
self.setTarget = function (x, y) {
self.targetX = x;
self.targetY = y;
var deltaX = x - self.x;
var deltaY = y - self.y;
var distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
self.directionX = deltaX / distance * self.speed;
self.directionY = deltaY / distance * self.speed;
};
self._move_migrated = function () {
self.x += self.directionX;
self.y += self.directionY;
if (self.x > 2148 || self.x < -100 || self.y > 2832 || self.y < -100) {
self.destroy();
}
};
});
var Explosion = Container.expand(function () {
var self = Container.call(this);
var explosionGraphics = self.attachAsset('explosion', {
anchorX: 0.5,
anchorY: 0.5
});
explosionGraphics.scale.x *= 2;
explosionGraphics.scale.y *= 2;
self.duration = 30;
self.tick = function () {
self.duration--;
if (self.duration <= 0) {
self.destroy();
}
};
});
var FastCloud = Container.expand(function () {
var self = Container.call(this);
var cloudGraphics = self.attachAsset('cloud', {
anchorX: 0.5,
anchorY: 0.5
});
cloudGraphics.scale.x *= 6;
cloudGraphics.scale.y *= 6;
self.speed = (Math.random() * 3 + 1) * 6;
self._move_migrated = function () {
self.x -= self.speed;
if (self.x <= -cloudGraphics.width) {
self.x = 2048 + cloudGraphics.width;
self.y = Math.random() * 2732;
}
};
});
var HeroMissile = Container.expand(function () {
var self = Container.call(this);
var missileGraphics = self.attachAsset('missile', {
anchorX: 0.5,
anchorY: 0.5
});
missileGraphics.scale.x *= 2;
missileGraphics.scale.y *= 2;
missileGraphics.tint = 0x00ff00;
self.speed = 15;
self._move_migrated = function () {
self.x += self.speed;
if (self.x > 2148) {
self.destroy();
}
};
});
var MediumCloud = Container.expand(function () {
var self = Container.call(this);
var cloudGraphics = self.attachAsset('cloud', {
anchorX: 0.5,
anchorY: 0.5
});
cloudGraphics.scale.x *= 4;
cloudGraphics.scale.y *= 4;
self.speed = (Math.random() * 2 + 1) * 4;
self._move_migrated = function () {
self.x -= self.speed;
if (self.x <= -cloudGraphics.width) {
self.x = 2048 + cloudGraphics.width;
self.y = Math.random() * 2732;
}
};
});
var SlowCloud = Container.expand(function () {
var self = Container.call(this);
var cloudGraphics = self.attachAsset('cloud', {
anchorX: 0.5,
anchorY: 0.5
});
cloudGraphics.scale.x *= 2;
cloudGraphics.scale.y *= 2;
self.speed = (Math.random() * 1 + 1) * 2;
self._move_migrated = function () {
self.x -= self.speed;
if (self.x <= -cloudGraphics.width) {
self.x = 2048 + cloudGraphics.width;
self.y = Math.random() * 2732;
}
};
});
var Superman = Container.expand(function () {
var self = Container.call(this);
var supermanGraphics = self.attachAsset('superman', {
anchorX: 0.5,
anchorY: 0.5
});
self.hitCount = 0;
self._move_migrated = function (x, y) {
self.x = x;
self.y = y;
};
});
var Target = Container.expand(function () {
var self = Container.call(this);
var targetGraphics = self.attachAsset('missile', {
anchorX: 0.5,
anchorY: 0.5
});
targetGraphics.scale.x *= 3;
targetGraphics.scale.y *= 3;
self.speed = 8;
self.lastX = undefined;
self._move_migrated = function () {
if (self.lastX === undefined) self.lastX = self.x;
self.x -= self.speed;
if (self.x < -100) {
self.destroy();
}
self.lastX = self.x;
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
game.setBackgroundColor(0x0000ff);
var gameStarted = false;
var startText = new Text2('START', {
size: 150,
fill: '#ffffff'
});
startText.anchor.set(0.5, 0.5);
startText.x = 2048 / 2;
startText.y = 2732 / 2;
game.addChild(startText);
var clouds = [];
for (var i = 0; i < 3; i++) {
var slowCloud = new SlowCloud();
slowCloud.x = Math.random() * 2048;
slowCloud.y = Math.random() * 2732;
clouds.push(slowCloud);
game.addChild(slowCloud);
}
for (var i = 0; i < 3; i++) {
var mediumCloud = new MediumCloud();
mediumCloud.x = Math.random() * 2048;
mediumCloud.y = Math.random() * 2732;
clouds.push(mediumCloud);
game.addChild(mediumCloud);
}
for (var i = 0; i < 3; i++) {
var fastCloud = new FastCloud();
fastCloud.x = Math.random() * 2048;
fastCloud.y = Math.random() * 2732;
clouds.push(fastCloud);
game.addChild(fastCloud);
}
var superman = game.addChild(new Superman());
var targets = [];
var bombs = [];
superman.x = 200;
superman.y = 2732 / 2;
var isGameOver = false;
var tickOffset = 0;
var gameDuration = 0;
var score = 0;
var scoreText = new Text2('Score: 0', {
size: 100,
fill: '#ffffff'
});
scoreText.anchor.set(0, 0);
scoreText.x = 50;
scoreText.y = 50;
game.addChild(scoreText);
var gameDurationText = new Text2('0', {
size: 150,
fill: '#ffffff'
});
gameDurationText.anchor.set(.5, 0);
LK.gui.top.addChild(gameDurationText);
LK.on('tick', function () {
if (!gameStarted) {
return;
}
if (isGameOver) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
// Move and cleanup bombs
for (var b = bombs.length - 1; b >= 0; b--) {
if (bombs[b]) {
bombs[b]._move_migrated();
if (bombs[b].x > 2148 || bombs[b].x < -100 || bombs[b].y > 2832 || bombs[b].y < -100) {
bombs[b].destroy();
bombs.splice(b, 1);
}
}
}
// Check bomb-target collisions
for (var b = bombs.length - 1; b >= 0; b--) {
if (bombs[b]) {
for (var t = targets.length - 1; t >= 0; t--) {
if (targets[t] && bombs[b].intersects(targets[t])) {
// Create explosion at collision point
var explosion = new Explosion();
explosion.x = targets[t].x;
explosion.y = targets[t].y;
game.addChild(explosion);
// Destroy bomb and target
bombs[b].destroy();
targets[t].destroy();
bombs.splice(b, 1);
targets.splice(t, 1);
// Increase score
score += 10;
scoreText.setText('Score: ' + score);
break;
}
}
}
}
// Move and cleanup targets
for (var a = targets.length - 1; a >= 0; a--) {
if (targets[a]) {
targets[a]._move_migrated();
if (targets[a].x < -100) {
targets[a].destroy();
targets.splice(a, 1);
}
}
}
// Check if targets reach superman (game over condition)
for (var e = targets.length - 1; e >= 0; e--) {
if (targets[e] && superman.intersects(targets[e])) {
isGameOver = true;
}
}
clouds.forEach(function (cloud) {
cloud._move_migrated();
});
if (tickOffset++ % 60 == 0) {
gameDuration++;
gameDurationText.setText(gameDuration);
}
// Spawn targets more frequently as game progresses
var spawnRate = Math.max(Math.floor((45 - gameDuration * 2) * 1.45), Math.floor(15 * 1.45));
if (tickOffset % spawnRate == 0) {
var newTarget = new Target();
newTarget.x = 2148;
newTarget.y = Math.random() * 2732;
newTarget.lastX = newTarget.x;
targets.push(newTarget);
game.addChild(newTarget);
}
game.children.forEach(function (child) {
if (child instanceof Explosion) {
child.tick();
}
});
});
var dragNode = null;
game.on('down', function (x, y, obj) {
if (!gameStarted) {
gameStarted = true;
startText.visible = false;
}
if (gameStarted) {
// Throw bomb towards tap location
var bomb = new Bomb();
bomb.x = superman.x;
bomb.y = superman.y;
bomb.setTarget(x, y);
bombs.push(bomb);
game.addChild(bomb);
}
dragNode = superman;
});
function handleMove(obj) {
if (!gameStarted) {
return;
}
var event = obj.event;
var pos = game.toLocal(event.global);
if (dragNode) {
dragNode._move_migrated(pos.x, pos.y);
}
}
game.on('move', function (x, y, obj) {
obj.event = obj;
handleMove(obj);
});
game.on('up', function (x, y, obj) {
dragNode = null;
});
A sky with clouds, tileable Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
An explosion Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a puffy white cloud Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pumkin bomb. In-Game asset. 2d. High contrast. No shadows
flying pixel art green goblin. In-Game asset. 2d. High contrast. No shadows
flying pixel art hero. In-Game asset. 2d. High contrast. No shadows