/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.update = function () {
self.x += self.speed;
};
return self;
});
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 1.0
});
self.speed = -2;
self.update = function () {
self.x += self.speed;
};
return self;
});
var Obstacle = Container.expand(function () {
var self = Container.call(this);
var obstacleGraphics = self.attachAsset('obstacle', {
anchorX: 0.5,
anchorY: 1.0
});
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 1.0
});
self.velocityY = 0;
self.onGround = false;
self.jumpSpeed = -25;
self.gravity = 1.2;
self.speed = 3;
self.update = function () {
// Apply gravity
self.velocityY += self.gravity;
self.y += self.velocityY;
// Move forward automatically
self.x += self.speed;
// Check ground collision
if (self.y >= groundY) {
self.y = groundY;
self.velocityY = 0;
self.onGround = true;
} else {
self.onGround = false;
}
};
self.jump = function () {
if (self.onGround) {
self.velocityY = self.jumpSpeed;
self.onGround = false;
}
};
return self;
});
var Table = Container.expand(function () {
var self = Container.call(this);
var tableGraphics = self.attachAsset('table', {
anchorX: 0.5,
anchorY: 1.0
});
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
var player;
var bullets = [];
var enemies = [];
var obstacles = [];
var table;
var platform;
var lives = 10;
var currentLevel = 1;
var groundY = 2500;
var cameraX = 0;
var levelComplete = false;
// UI Elements
var livesText = new Text2('Lives: 10', {
size: 80,
fill: 0xFFFFFF
});
livesText.anchor.set(0, 0);
LK.gui.topLeft.addChild(livesText);
var levelText = new Text2('Level 1', {
size: 80,
fill: 0xFFFFFF
});
levelText.anchor.set(0.5, 0);
LK.gui.top.addChild(levelText);
// Initialize level
function initializeLevel() {
// Clear existing elements
bullets = [];
enemies = [];
obstacles = [];
// Create platform
platform = game.addChild(LK.getAsset('platform', {
anchorX: 0,
anchorY: 1.0,
x: 0,
y: groundY + 50
}));
// Create player
player = game.addChild(new Player());
player.x = 200;
player.y = groundY;
// Create enemies at various positions
for (var i = 0; i < 5 + currentLevel; i++) {
var enemy = game.addChild(new Enemy());
enemy.x = 800 + i * 400 + Math.random() * 200;
enemy.y = groundY;
enemies.push(enemy);
}
// Create obstacles
for (var i = 0; i < 3 + currentLevel; i++) {
var obstacle = game.addChild(new Obstacle());
obstacle.x = 600 + i * 500 + Math.random() * 300;
obstacle.y = groundY;
obstacles.push(obstacle);
}
// Create table at end of level
table = game.addChild(new Table());
table.x = 3000 + currentLevel * 1000;
table.y = groundY;
cameraX = 0;
levelComplete = false;
// Update level text
levelText.setText('Level ' + currentLevel);
}
// Touch controls
game.down = function (x, y, obj) {
// Jump on touch
if (player && !levelComplete) {
player.jump();
// Shoot bullet
var bullet = game.addChild(new Bullet());
bullet.x = player.x + 40;
bullet.y = player.y - 40;
bullets.push(bullet);
LK.getSound('shoot').play();
}
};
// Camera follow player
function updateCamera() {
if (player) {
cameraX = player.x - 400;
if (cameraX < 0) cameraX = 0;
game.x = -cameraX;
}
}
// Damage player
function damagePlayer() {
lives--;
livesText.setText('Lives: ' + lives);
LK.getSound('damage').play();
// Flash player red
if (player) {
LK.effects.flashObject(player, 0xff0000, 500);
}
if (lives <= 0) {
LK.showGameOver();
}
}
// Complete level
function completeLevel() {
if (!levelComplete) {
levelComplete = true;
currentLevel++;
// Flash screen green
LK.effects.flashScreen(0x00ff00, 1000);
// Restart level after delay
LK.setTimeout(function () {
// Clear all objects
if (player) player.destroy();
for (var i = 0; i < bullets.length; i++) {
bullets[i].destroy();
}
for (var i = 0; i < enemies.length; i++) {
enemies[i].destroy();
}
for (var i = 0; i < obstacles.length; i++) {
obstacles[i].destroy();
}
if (table) table.destroy();
if (platform) platform.destroy();
initializeLevel();
}, 1500);
}
}
// Initialize first level
initializeLevel();
game.update = function () {
if (levelComplete) return;
// Update camera
updateCamera();
// Check bullet collisions with enemies
for (var i = bullets.length - 1; i >= 0; i--) {
var bullet = bullets[i];
var bulletHit = false;
// Check if bullet is off screen
if (bullet.x > cameraX + 2200) {
bullet.destroy();
bullets.splice(i, 1);
continue;
}
// Check enemy collisions
for (var j = enemies.length - 1; j >= 0; j--) {
var enemy = enemies[j];
if (bullet.intersects(enemy)) {
// Enemy destroyed
LK.effects.flashObject(enemy, 0xffff00, 300);
LK.getSound('hit').play();
enemy.destroy();
enemies.splice(j, 1);
bullet.destroy();
bullets.splice(i, 1);
bulletHit = true;
break;
}
}
}
// Check player collisions with enemies
if (player) {
for (var i = enemies.length - 1; i >= 0; i--) {
var enemy = enemies[i];
if (player.intersects(enemy)) {
damagePlayer();
enemy.destroy();
enemies.splice(i, 1);
}
}
// Check player collisions with obstacles
for (var i = 0; i < obstacles.length; i++) {
var obstacle = obstacles[i];
if (player.intersects(obstacle)) {
damagePlayer();
// Push player back
player.x -= 20;
break;
}
}
// Check if player reached table
if (table && player.intersects(table)) {
completeLevel();
}
// Check if player fell off screen
if (player.y > groundY + 500) {
damagePlayer();
player.x = 200;
player.y = groundY;
player.velocityY = 0;
}
}
// Remove enemies that are too far behind
for (var i = enemies.length - 1; i >= 0; i--) {
var enemy = enemies[i];
if (enemy.x < cameraX - 200) {
enemy.destroy();
enemies.splice(i, 1);
}
}
}; /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.update = function () {
self.x += self.speed;
};
return self;
});
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 1.0
});
self.speed = -2;
self.update = function () {
self.x += self.speed;
};
return self;
});
var Obstacle = Container.expand(function () {
var self = Container.call(this);
var obstacleGraphics = self.attachAsset('obstacle', {
anchorX: 0.5,
anchorY: 1.0
});
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 1.0
});
self.velocityY = 0;
self.onGround = false;
self.jumpSpeed = -25;
self.gravity = 1.2;
self.speed = 3;
self.update = function () {
// Apply gravity
self.velocityY += self.gravity;
self.y += self.velocityY;
// Move forward automatically
self.x += self.speed;
// Check ground collision
if (self.y >= groundY) {
self.y = groundY;
self.velocityY = 0;
self.onGround = true;
} else {
self.onGround = false;
}
};
self.jump = function () {
if (self.onGround) {
self.velocityY = self.jumpSpeed;
self.onGround = false;
}
};
return self;
});
var Table = Container.expand(function () {
var self = Container.call(this);
var tableGraphics = self.attachAsset('table', {
anchorX: 0.5,
anchorY: 1.0
});
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
var player;
var bullets = [];
var enemies = [];
var obstacles = [];
var table;
var platform;
var lives = 10;
var currentLevel = 1;
var groundY = 2500;
var cameraX = 0;
var levelComplete = false;
// UI Elements
var livesText = new Text2('Lives: 10', {
size: 80,
fill: 0xFFFFFF
});
livesText.anchor.set(0, 0);
LK.gui.topLeft.addChild(livesText);
var levelText = new Text2('Level 1', {
size: 80,
fill: 0xFFFFFF
});
levelText.anchor.set(0.5, 0);
LK.gui.top.addChild(levelText);
// Initialize level
function initializeLevel() {
// Clear existing elements
bullets = [];
enemies = [];
obstacles = [];
// Create platform
platform = game.addChild(LK.getAsset('platform', {
anchorX: 0,
anchorY: 1.0,
x: 0,
y: groundY + 50
}));
// Create player
player = game.addChild(new Player());
player.x = 200;
player.y = groundY;
// Create enemies at various positions
for (var i = 0; i < 5 + currentLevel; i++) {
var enemy = game.addChild(new Enemy());
enemy.x = 800 + i * 400 + Math.random() * 200;
enemy.y = groundY;
enemies.push(enemy);
}
// Create obstacles
for (var i = 0; i < 3 + currentLevel; i++) {
var obstacle = game.addChild(new Obstacle());
obstacle.x = 600 + i * 500 + Math.random() * 300;
obstacle.y = groundY;
obstacles.push(obstacle);
}
// Create table at end of level
table = game.addChild(new Table());
table.x = 3000 + currentLevel * 1000;
table.y = groundY;
cameraX = 0;
levelComplete = false;
// Update level text
levelText.setText('Level ' + currentLevel);
}
// Touch controls
game.down = function (x, y, obj) {
// Jump on touch
if (player && !levelComplete) {
player.jump();
// Shoot bullet
var bullet = game.addChild(new Bullet());
bullet.x = player.x + 40;
bullet.y = player.y - 40;
bullets.push(bullet);
LK.getSound('shoot').play();
}
};
// Camera follow player
function updateCamera() {
if (player) {
cameraX = player.x - 400;
if (cameraX < 0) cameraX = 0;
game.x = -cameraX;
}
}
// Damage player
function damagePlayer() {
lives--;
livesText.setText('Lives: ' + lives);
LK.getSound('damage').play();
// Flash player red
if (player) {
LK.effects.flashObject(player, 0xff0000, 500);
}
if (lives <= 0) {
LK.showGameOver();
}
}
// Complete level
function completeLevel() {
if (!levelComplete) {
levelComplete = true;
currentLevel++;
// Flash screen green
LK.effects.flashScreen(0x00ff00, 1000);
// Restart level after delay
LK.setTimeout(function () {
// Clear all objects
if (player) player.destroy();
for (var i = 0; i < bullets.length; i++) {
bullets[i].destroy();
}
for (var i = 0; i < enemies.length; i++) {
enemies[i].destroy();
}
for (var i = 0; i < obstacles.length; i++) {
obstacles[i].destroy();
}
if (table) table.destroy();
if (platform) platform.destroy();
initializeLevel();
}, 1500);
}
}
// Initialize first level
initializeLevel();
game.update = function () {
if (levelComplete) return;
// Update camera
updateCamera();
// Check bullet collisions with enemies
for (var i = bullets.length - 1; i >= 0; i--) {
var bullet = bullets[i];
var bulletHit = false;
// Check if bullet is off screen
if (bullet.x > cameraX + 2200) {
bullet.destroy();
bullets.splice(i, 1);
continue;
}
// Check enemy collisions
for (var j = enemies.length - 1; j >= 0; j--) {
var enemy = enemies[j];
if (bullet.intersects(enemy)) {
// Enemy destroyed
LK.effects.flashObject(enemy, 0xffff00, 300);
LK.getSound('hit').play();
enemy.destroy();
enemies.splice(j, 1);
bullet.destroy();
bullets.splice(i, 1);
bulletHit = true;
break;
}
}
}
// Check player collisions with enemies
if (player) {
for (var i = enemies.length - 1; i >= 0; i--) {
var enemy = enemies[i];
if (player.intersects(enemy)) {
damagePlayer();
enemy.destroy();
enemies.splice(i, 1);
}
}
// Check player collisions with obstacles
for (var i = 0; i < obstacles.length; i++) {
var obstacle = obstacles[i];
if (player.intersects(obstacle)) {
damagePlayer();
// Push player back
player.x -= 20;
break;
}
}
// Check if player reached table
if (table && player.intersects(table)) {
completeLevel();
}
// Check if player fell off screen
if (player.y > groundY + 500) {
damagePlayer();
player.x = 200;
player.y = groundY;
player.velocityY = 0;
}
}
// Remove enemies that are too far behind
for (var i = enemies.length - 1; i >= 0; i--) {
var enemy = enemies[i];
if (enemy.x < cameraX - 200) {
enemy.destroy();
enemies.splice(i, 1);
}
}
};
Modern App Store icon, high definition, square with rounded corners, for a game titled "Jump & Shoot Adventure" and with the description "Run, jump and shoot through colorful platforms! Defeat enemies with bouncing balls, avoid obstacles, and reach the table to advance levels. You have 10 lives to complete your mission!". No text on icon!
Fullscreen modern App Store landscape banner, 16:9, high definition, for a game titled "Jump & Shoot Adventure" and with the description "Run, jump and shoot through colorful platforms! Defeat enemies with bouncing balls, avoid obstacles, and reach the table to advance levels. You have 10 lives to complete your mission!". No text on banner!