/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Alien = Container.expand(function () {
var self = Container.call(this);
var alienGraphics = self.attachAsset('alien', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.update = function () {
self.y += self.speed;
};
return self;
});
var Banana = Container.expand(function () {
var self = Container.call(this);
var bananaGraphics = self.attachAsset('banana', {
anchorX: 0.5,
anchorY: 0.5
});
return self;
});
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -12;
self.update = function () {
self.y += self.speed;
};
return self;
});
var Meteor = Container.expand(function () {
var self = Container.call(this);
var meteorGraphics = self.attachAsset('meteor', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.update = function () {
self.y += self.speed;
};
return self;
});
var StartMenu = Container.expand(function () {
var self = Container.call(this);
var backgroundGraphics = self.attachAsset('startMenuBackground', {
x: 0,
y: 0
});
var titleText = new Text2('BANANA METEOR DEFENSE', {
size: 120,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 2048 / 2;
titleText.y = 2732 / 2 - 200;
self.addChild(titleText);
var playButton = new Text2('PLAY', {
size: 100,
fill: 0x00FF00
});
playButton.anchor.set(0.5, 0.5);
playButton.x = 2048 / 2;
playButton.y = 2732 / 2 + 100;
self.addChild(playButton);
playButton.down = function (x, y, obj) {
LK.stopMusic();
startGame();
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
var spaceBackground = game.attachAsset('spaceBackground', {
x: 0,
y: 0
});
var banana = game.addChild(new Banana());
banana.x = 2048 / 2;
banana.y = 2732 - 150;
var scoreTxt = new Text2('Score: 0', {
size: 80,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var bullets = [];
var meteors = [];
var aliens = [];
var meteorsPassed = 0;
var gameStarted = false;
var meteorSpawnTimer = 0;
var meteorSpawnInterval = 90;
var alienSpawnTimer = 0;
var alienSpawnInterval = 120;
var startMenu = null;
function startGame() {
if (startMenu) {
startMenu.destroy();
startMenu = null;
}
gameStarted = true;
}
function showStartMenu() {
gameStarted = false;
startMenu = game.addChild(new StartMenu());
LK.playMusic('startMenuMusic');
}
// Show start menu when game loads
showStartMenu();
function spawnMeteor() {
var meteor = new Meteor();
meteor.x = Math.random() * (2048 - 100) + 50;
meteor.y = -50;
meteor.lastY = meteor.y;
meteors.push(meteor);
game.addChild(meteor);
}
function spawnAlien() {
var alien = new Alien();
alien.x = Math.random() * (2048 - 100) + 50;
alien.y = -50;
alien.lastY = alien.y; //{alien_spawn}
aliens.push(alien);
game.addChild(alien);
} //{alien_spawn_end}
function shootBullet() {
if (!gameStarted) return;
var bullet = new Bullet();
bullet.x = banana.x;
bullet.y = banana.y - 60;
bullet.lastY = bullet.y;
bullets.push(bullet);
game.addChild(bullet);
LK.getSound('shoot').play();
}
game.down = function (x, y, obj) {
shootBullet();
};
game.move = function (x, y, obj) {
if (!gameStarted) return;
banana.x = x;
// Keep banana within screen bounds
if (banana.x < 40) banana.x = 40;
if (banana.x > 2048 - 40) banana.x = 2048 - 40;
};
game.update = function () {
if (!gameStarted) return;
meteorSpawnTimer++;
if (meteorSpawnTimer >= meteorSpawnInterval) {
spawnMeteor();
meteorSpawnTimer = 0;
if (meteorSpawnInterval > 30) {
meteorSpawnInterval -= 0.5;
}
}
alienSpawnTimer++;
if (alienSpawnTimer >= alienSpawnInterval) {
spawnAlien();
alienSpawnTimer = 0;
if (alienSpawnInterval > 60) {
alienSpawnInterval -= 0.5;
} //{alien_interval}
} //{alien_interval_end}
for (var i = bullets.length - 1; i >= 0; i--) {
var bullet = bullets[i];
if (bullet.lastY === undefined) bullet.lastY = bullet.y;
if (bullet.lastY >= -30 && bullet.y < -30) {
bullet.destroy();
bullets.splice(i, 1);
continue;
}
for (var j = meteors.length - 1; j >= 0; j--) {
var meteor = meteors[j];
if (bullet.intersects(meteor)) {
LK.setScore(LK.getScore() + 1);
scoreTxt.setText('Score: ' + LK.getScore());
LK.getSound('meteorDestroy').play();
LK.effects.flashObject(meteor, 0xFF4500, 300);
bullet.destroy();
bullets.splice(i, 1);
meteor.destroy();
meteors.splice(j, 1);
break;
}
}
for (var a = aliens.length - 1; a >= 0; a--) {
var alien = aliens[a];
if (bullet.intersects(alien)) {
LK.setScore(LK.getScore() + 2);
scoreTxt.setText('Score: ' + LK.getScore());
LK.getSound('alienDestroy').play();
LK.effects.flashObject(alien, 0xFF4500, 300);
bullet.destroy(); //{alien_bullet}
bullets.splice(i, 1); //{alien_bullet2}
alien.destroy(); //{alien_bullet3}
aliens.splice(a, 1);
break;
} //{alien_bullet4}
} //{alien_bullet5}
if (bullets[i]) {
bullet.lastY = bullet.y;
}
}
for (var k = meteors.length - 1; k >= 0; k--) {
var meteor = meteors[k];
if (meteor.lastY === undefined) meteor.lastY = meteor.y;
if (meteor.lastY <= 2732 && meteor.y > 2732) {
meteorsPassed++;
meteor.destroy();
meteors.splice(k, 1);
if (meteorsPassed >= 20) {
gameStarted = false;
LK.playMusic('gameOverMusic', {
loop: false
});
LK.setTimeout(function () {
LK.showGameOver();
}, 1000);
}
continue;
}
meteor.lastY = meteor.y;
}
for (var l = aliens.length - 1; l >= 0; l--) {
var alien = aliens[l];
if (alien.lastY === undefined) alien.lastY = alien.y;
if (alien.lastY <= 2732 && alien.y > 2732) {
meteorsPassed++;
alien.destroy(); //{alien_passed}
aliens.splice(l, 1);
if (meteorsPassed >= 20) {
gameStarted = false; //{alien_passed2}
LK.playMusic('gameOverMusic', {
loop: false
}); //{alien_passed3}
LK.setTimeout(function () {
LK.showGameOver();
}, 1000);
} //{alien_passed4}
continue; //{alien_passed5}
} //{alien_passed6}
alien.lastY = alien.y; //{alien_passed7}
} //{alien_passed8}
}; /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Alien = Container.expand(function () {
var self = Container.call(this);
var alienGraphics = self.attachAsset('alien', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.update = function () {
self.y += self.speed;
};
return self;
});
var Banana = Container.expand(function () {
var self = Container.call(this);
var bananaGraphics = self.attachAsset('banana', {
anchorX: 0.5,
anchorY: 0.5
});
return self;
});
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -12;
self.update = function () {
self.y += self.speed;
};
return self;
});
var Meteor = Container.expand(function () {
var self = Container.call(this);
var meteorGraphics = self.attachAsset('meteor', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.update = function () {
self.y += self.speed;
};
return self;
});
var StartMenu = Container.expand(function () {
var self = Container.call(this);
var backgroundGraphics = self.attachAsset('startMenuBackground', {
x: 0,
y: 0
});
var titleText = new Text2('BANANA METEOR DEFENSE', {
size: 120,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 2048 / 2;
titleText.y = 2732 / 2 - 200;
self.addChild(titleText);
var playButton = new Text2('PLAY', {
size: 100,
fill: 0x00FF00
});
playButton.anchor.set(0.5, 0.5);
playButton.x = 2048 / 2;
playButton.y = 2732 / 2 + 100;
self.addChild(playButton);
playButton.down = function (x, y, obj) {
LK.stopMusic();
startGame();
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
var spaceBackground = game.attachAsset('spaceBackground', {
x: 0,
y: 0
});
var banana = game.addChild(new Banana());
banana.x = 2048 / 2;
banana.y = 2732 - 150;
var scoreTxt = new Text2('Score: 0', {
size: 80,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var bullets = [];
var meteors = [];
var aliens = [];
var meteorsPassed = 0;
var gameStarted = false;
var meteorSpawnTimer = 0;
var meteorSpawnInterval = 90;
var alienSpawnTimer = 0;
var alienSpawnInterval = 120;
var startMenu = null;
function startGame() {
if (startMenu) {
startMenu.destroy();
startMenu = null;
}
gameStarted = true;
}
function showStartMenu() {
gameStarted = false;
startMenu = game.addChild(new StartMenu());
LK.playMusic('startMenuMusic');
}
// Show start menu when game loads
showStartMenu();
function spawnMeteor() {
var meteor = new Meteor();
meteor.x = Math.random() * (2048 - 100) + 50;
meteor.y = -50;
meteor.lastY = meteor.y;
meteors.push(meteor);
game.addChild(meteor);
}
function spawnAlien() {
var alien = new Alien();
alien.x = Math.random() * (2048 - 100) + 50;
alien.y = -50;
alien.lastY = alien.y; //{alien_spawn}
aliens.push(alien);
game.addChild(alien);
} //{alien_spawn_end}
function shootBullet() {
if (!gameStarted) return;
var bullet = new Bullet();
bullet.x = banana.x;
bullet.y = banana.y - 60;
bullet.lastY = bullet.y;
bullets.push(bullet);
game.addChild(bullet);
LK.getSound('shoot').play();
}
game.down = function (x, y, obj) {
shootBullet();
};
game.move = function (x, y, obj) {
if (!gameStarted) return;
banana.x = x;
// Keep banana within screen bounds
if (banana.x < 40) banana.x = 40;
if (banana.x > 2048 - 40) banana.x = 2048 - 40;
};
game.update = function () {
if (!gameStarted) return;
meteorSpawnTimer++;
if (meteorSpawnTimer >= meteorSpawnInterval) {
spawnMeteor();
meteorSpawnTimer = 0;
if (meteorSpawnInterval > 30) {
meteorSpawnInterval -= 0.5;
}
}
alienSpawnTimer++;
if (alienSpawnTimer >= alienSpawnInterval) {
spawnAlien();
alienSpawnTimer = 0;
if (alienSpawnInterval > 60) {
alienSpawnInterval -= 0.5;
} //{alien_interval}
} //{alien_interval_end}
for (var i = bullets.length - 1; i >= 0; i--) {
var bullet = bullets[i];
if (bullet.lastY === undefined) bullet.lastY = bullet.y;
if (bullet.lastY >= -30 && bullet.y < -30) {
bullet.destroy();
bullets.splice(i, 1);
continue;
}
for (var j = meteors.length - 1; j >= 0; j--) {
var meteor = meteors[j];
if (bullet.intersects(meteor)) {
LK.setScore(LK.getScore() + 1);
scoreTxt.setText('Score: ' + LK.getScore());
LK.getSound('meteorDestroy').play();
LK.effects.flashObject(meteor, 0xFF4500, 300);
bullet.destroy();
bullets.splice(i, 1);
meteor.destroy();
meteors.splice(j, 1);
break;
}
}
for (var a = aliens.length - 1; a >= 0; a--) {
var alien = aliens[a];
if (bullet.intersects(alien)) {
LK.setScore(LK.getScore() + 2);
scoreTxt.setText('Score: ' + LK.getScore());
LK.getSound('alienDestroy').play();
LK.effects.flashObject(alien, 0xFF4500, 300);
bullet.destroy(); //{alien_bullet}
bullets.splice(i, 1); //{alien_bullet2}
alien.destroy(); //{alien_bullet3}
aliens.splice(a, 1);
break;
} //{alien_bullet4}
} //{alien_bullet5}
if (bullets[i]) {
bullet.lastY = bullet.y;
}
}
for (var k = meteors.length - 1; k >= 0; k--) {
var meteor = meteors[k];
if (meteor.lastY === undefined) meteor.lastY = meteor.y;
if (meteor.lastY <= 2732 && meteor.y > 2732) {
meteorsPassed++;
meteor.destroy();
meteors.splice(k, 1);
if (meteorsPassed >= 20) {
gameStarted = false;
LK.playMusic('gameOverMusic', {
loop: false
});
LK.setTimeout(function () {
LK.showGameOver();
}, 1000);
}
continue;
}
meteor.lastY = meteor.y;
}
for (var l = aliens.length - 1; l >= 0; l--) {
var alien = aliens[l];
if (alien.lastY === undefined) alien.lastY = alien.y;
if (alien.lastY <= 2732 && alien.y > 2732) {
meteorsPassed++;
alien.destroy(); //{alien_passed}
aliens.splice(l, 1);
if (meteorsPassed >= 20) {
gameStarted = false; //{alien_passed2}
LK.playMusic('gameOverMusic', {
loop: false
}); //{alien_passed3}
LK.setTimeout(function () {
LK.showGameOver();
}, 1000);
} //{alien_passed4}
continue; //{alien_passed5}
} //{alien_passed6}
alien.lastY = alien.y; //{alien_passed7}
} //{alien_passed8}
};