Code edit (1 edits merged)
Please save this source code
User prompt
Jump & Shoot Adventure
Initial prompt
Quiero un juego de plataformas donde el jugador corra, salte su pico, el camino debe tener enemigos, obstaculos, que dismunuyen las 10 vidas que debe tener el jugador, para destruir los enemigos, el jugador debe lanzar peloticas para defenderse y avanzar. La mision es tocar una mesa para pasar al siguiente nivel. Me gustaria que la plataforma sea variada y larga, con colores vistosos y con efectos cuando se ataque un enemigo y una voz que anuncie que el jugador esta herido.
/****
* 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);
}
}
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,290 @@
-/****
+/****
+* 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: 0x000000
-});
\ No newline at end of file
+ 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);
+ }
+ }
+};
\ No newline at end of file
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!