/**** * 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}
};