User prompt
Te dije q le agas una animación al caminar al saltar y q cuando presione el botón de atacar ataque con la espada q tiene y al aserlo tenga una animación ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Y quiero q en ves de q ataque disparando ataque con la espada q tiene y que tenga una animación de caminar y de cuando ataca ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Quiero q le quites el fondo blanco a la imagen q puse para el hombre palo
User prompt
Mira quiero q cambias a los enemigos por un stickman rojo los stickmans son muñecos de palo osea una bolita la cabeza y el torso un palo largo y la manitas y los pies un palo más pequeño y aparte agregale animaciones y q ataquen al jugador con una espada ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Puedes hacer q los controles sean un poco más grandes y q dentro tenga un icono como un stickman saltando en el botón de salto y haci en el de derecha y izquierda
User prompt
Puedes hacer que la barra sea más visible
User prompt
Esta perfecto pero da saltos ilimitados quiero q arriba del personaje aya una barra q como la estamina pero q la barra este blanca cuando pueda dar un doble salto y q se ponga gris cuando ya haya dado el doble salto y para cargar el doble salto tenga q tocar el piso
User prompt
Sigue sin funcionar
User prompt
El botón de jump cuando lo presionó no hace la acción
User prompt
Quiero q me des un control diseñado para móviles
User prompt
Sigue sin aparecer nada
User prompt
No aparece nada cuando le doy a play
User prompt
Puedes seguir asiendo el código del juego ↪💡 Consider importing and using the following plugins: @upit/tween.v1
Code edit (1 edits merged)
Please save this source code
User prompt
Stickman Vs. Digital Warrior
Initial prompt
Quiero crear un videojuego plataformero en estilo pixel art, con estética retro pero moderna. El protagonista es un Stickman guerrero, ágil y con movimientos fluidos. El juego se centra en batallas rápidas, acción intensa y exploración de niveles llenos de enemigos, trampas y secretos. Se llama Stickman Vs., y ocurre en un universo digital futurista donde distintas dimensiones pixeladas están colapsando y los Stickman luchan por sobrevivir. Quiero que tenga: Niveles con plataformas, obstáculos y mecánicas únicas (como gravedad invertida, plataformas que desaparecen, etc.). Combate cuerpo a cuerpo y a distancia (puñetazos, espadas, rayos láser). Jefes épicos con ataques especiales. Estilo visual pixelado pero detallado, como si fuera un juego del futuro hecho en 16 bits. Puede ser para un jugador o con modo VS local.
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Boss = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('boss', {
anchorX: 0.5,
anchorY: 1.0
});
self.health = 500;
self.maxHealth = 500;
self.phase = 1;
self.attackTimer = 0;
self.moveTimer = 0;
self.direction = 1;
self.update = function () {
self.attackTimer++;
self.moveTimer++;
// Movement pattern
if (self.moveTimer > 60) {
if (Math.random() > 0.7) {
self.direction *= -1;
}
self.moveTimer = 0;
}
self.x += self.direction * 2;
// Keep boss on screen
if (self.x < 200) {
self.x = 200;
self.direction = 1;
}
if (self.x > 1848) {
self.x = 1848;
self.direction = -1;
}
// Attack patterns based on phase
if (self.phase === 1 && self.attackTimer > 90) {
self.basicAttack();
self.attackTimer = 0;
} else if (self.phase === 2 && self.attackTimer > 60) {
self.rapidFire();
self.attackTimer = 0;
}
// Phase transition
if (self.health < self.maxHealth * 0.5 && self.phase === 1) {
self.phase = 2;
LK.effects.flashObject(self, 0xff0000, 1000);
}
// Flip graphics
graphics.scaleX = self.direction;
};
self.basicAttack = function () {
for (var i = 0; i < 3; i++) {
var bullet = new EnemyBullet();
bullet.x = self.x;
bullet.y = self.y - 100;
var angle = (i - 1) * 0.5;
bullet.velocityX = Math.sin(angle) * 10;
bullet.velocityY = Math.cos(angle) * 10;
enemyBullets.push(bullet);
game.addChild(bullet);
}
};
self.rapidFire = function () {
for (var i = 0; i < 5; i++) {
var bullet = new EnemyBullet();
bullet.x = self.x + (i - 2) * 50;
bullet.y = self.y - 100;
bullet.velocityX = 0;
bullet.velocityY = 12;
enemyBullets.push(bullet);
game.addChild(bullet);
}
};
self.takeDamage = function (damage) {
self.health -= damage;
LK.effects.flashObject(self, 0xffffff, 100);
if (self.health <= 0) {
LK.setScore(LK.getScore() + 1000);
LK.showYouWin();
return true;
}
return false;
};
return self;
});
var Enemy = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 1.0
});
self.velocityX = 0;
self.velocityY = 0;
self.health = 50;
self.speed = 2;
self.shootTimer = 0;
self.direction = 1;
self.grounded = false;
self.update = function () {
// Apply gravity
self.velocityY += 0.8;
// AI movement
self.velocityX = self.speed * self.direction;
// Update position
self.x += self.velocityX;
self.y += self.velocityY;
// Shooting behavior
self.shootTimer++;
if (self.shootTimer > 120) {
// Shoot every 2 seconds
self.shoot();
self.shootTimer = 0;
}
// Flip graphics based on direction
graphics.scaleX = self.direction;
};
self.shoot = function () {
var bullet = new EnemyBullet();
bullet.x = self.x;
bullet.y = self.y - 40;
// Aim towards player
var dx = player.x - self.x;
var dy = player.y - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
bullet.velocityX = dx / distance * 8;
bullet.velocityY = dy / distance * 8;
enemyBullets.push(bullet);
game.addChild(bullet);
};
self.takeDamage = function (damage) {
self.health -= damage;
LK.effects.flashObject(self, 0xffffff, 100);
if (self.health <= 0) {
LK.setScore(LK.getScore() + 100);
return true; // Enemy is dead
}
return false;
};
return self;
});
var EnemyBullet = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('enemyBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.velocityX = 0;
self.velocityY = 0;
self.lifetime = 300; // 5 seconds
self.update = function () {
self.x += self.velocityX;
self.y += self.velocityY;
self.lifetime--;
};
return self;
});
var Platform = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('platform', {
anchorX: 0.5,
anchorY: 0.5
});
return self;
});
var PlayerBullet = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.velocityX = 0;
self.velocityY = 0;
self.lifetime = 180; // 3 seconds
self.update = function () {
self.x += self.velocityX;
self.y += self.velocityY;
self.lifetime--;
};
return self;
});
var PowerUp = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('powerup', {
anchorX: 0.5,
anchorY: 0.5
});
self.type = 'health'; // health, speed, damage
self.bobTimer = 0;
self.startY = 0;
self.update = function () {
self.bobTimer += 0.1;
self.y = self.startY + Math.sin(self.bobTimer) * 10;
graphics.rotation += 0.05;
};
self.collect = function () {
if (self.type === 'health') {
player.health = Math.min(player.health + 50, player.maxHealth);
}
LK.getSound('powerup').play();
LK.setScore(LK.getScore() + 50);
return true; // PowerUp is collected
};
return self;
});
var Stickman = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('stickman', {
anchorX: 0.5,
anchorY: 1.0
});
self.velocityX = 0;
self.velocityY = 0;
self.speed = 8;
self.jumpPower = -20;
self.health = 100;
self.maxHealth = 100;
self.grounded = false;
self.canShoot = true;
self.shootCooldown = 0;
self.facing = 1; // 1 = right, -1 = left
self.update = function () {
// Apply gravity
self.velocityY += 0.8;
// Update position
self.x += self.velocityX;
self.y += self.velocityY;
// Apply friction
self.velocityX *= 0.85;
// Update shoot cooldown
if (self.shootCooldown > 0) {
self.shootCooldown--;
}
if (self.shootCooldown <= 0) {
self.canShoot = true;
}
// Flip graphics based on facing direction
graphics.scaleX = self.facing;
};
self.jump = function () {
if (self.grounded) {
self.velocityY = self.jumpPower;
self.grounded = false;
LK.getSound('jump').play();
}
};
self.moveLeft = function () {
self.velocityX = -self.speed;
self.facing = -1;
};
self.moveRight = function () {
self.velocityX = self.speed;
self.facing = 1;
};
self.shoot = function () {
if (self.canShoot) {
var bullet = new PlayerBullet();
bullet.x = self.x + self.facing * 40;
bullet.y = self.y - 60;
bullet.velocityX = self.facing * 15;
playerBullets.push(bullet);
game.addChild(bullet);
self.canShoot = false;
self.shootCooldown = 15;
LK.getSound('shoot').play();
}
};
self.takeDamage = function (damage) {
self.health -= damage;
LK.effects.flashObject(self, 0xff0000, 200);
LK.getSound('hit').play();
if (self.health <= 0) {
LK.showGameOver();
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x111122
});
/****
* Game Code
****/
// Game variables
var player;
var platforms = [];
var enemies = [];
var boss = null;
var playerBullets = [];
var enemyBullets = [];
var powerUps = [];
var camera = {
x: 0,
y: 0
};
var level = 1;
var bossSpawned = false;
var leftPressed = false;
var rightPressed = false;
var jumpPressed = false;
var shootPressed = false;
// UI Elements
var healthBar = new Text2('Health: 100', {
size: 60,
fill: 0xFF0000
});
healthBar.anchor.set(0, 0);
LK.gui.topLeft.addChild(healthBar);
var scoreText = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreText.anchor.set(1, 0);
LK.gui.topRight.addChild(scoreText);
var levelText = new Text2('Level: 1', {
size: 60,
fill: 0x00FF00
});
levelText.anchor.set(0.5, 0);
LK.gui.top.addChild(levelText);
// Create player
player = new Stickman();
player.x = 1024;
player.y = 2000;
game.addChild(player);
// Create initial platforms
function createLevel() {
// Clear existing platforms and enemies
for (var i = platforms.length - 1; i >= 0; i--) {
platforms[i].destroy();
platforms.splice(i, 1);
}
for (var i = enemies.length - 1; i >= 0; i--) {
enemies[i].destroy();
enemies.splice(i, 1);
}
// Ground platforms
for (var i = 0; i < 6; i++) {
var platform = new Platform();
platform.x = i * 350 + 200;
platform.y = 2400;
platforms.push(platform);
game.addChild(platform);
}
// Mid-level platforms
for (var i = 0; i < 4; i++) {
var platform = new Platform();
platform.x = i * 500 + 300;
platform.y = 1800;
platforms.push(platform);
game.addChild(platform);
}
// Upper platforms
for (var i = 0; i < 3; i++) {
var platform = new Platform();
platform.x = i * 600 + 400;
platform.y = 1200;
platforms.push(platform);
game.addChild(platform);
}
// Create enemies
for (var i = 0; i < 3 + level; i++) {
var enemy = new Enemy();
enemy.x = 400 + i * 400;
enemy.y = 1750;
enemies.push(enemy);
game.addChild(enemy);
}
// Create power-ups
for (var i = 0; i < 2; i++) {
var powerUp = new PowerUp();
powerUp.x = 600 + i * 800;
powerUp.y = 1150;
powerUp.startY = powerUp.y;
powerUps.push(powerUp);
game.addChild(powerUp);
}
// Spawn boss at higher levels
if (level >= 3 && !bossSpawned) {
boss = new Boss();
boss.x = 1024;
boss.y = 800;
game.addChild(boss);
bossSpawned = true;
}
}
createLevel();
// Input handling
game.down = function (x, y, obj) {
if (x < 1024) {
if (y > 1366) {
jumpPressed = true;
} else {
leftPressed = true;
}
} else {
if (y > 1366) {
shootPressed = true;
} else {
rightPressed = true;
}
}
};
game.up = function (x, y, obj) {
leftPressed = false;
rightPressed = false;
jumpPressed = false;
shootPressed = false;
};
// Collision detection
function checkCollisions() {
// Player vs platforms
player.grounded = false;
for (var i = 0; i < platforms.length; i++) {
var platform = platforms[i];
if (player.intersects(platform) && player.velocityY > 0) {
if (player.y - 120 < platform.y - 20) {
player.y = platform.y - 20;
player.velocityY = 0;
player.grounded = true;
}
}
}
// Enemy vs platforms
for (var e = 0; e < enemies.length; e++) {
var enemy = enemies[e];
enemy.grounded = false;
for (var p = 0; p < platforms.length; p++) {
var platform = platforms[p];
if (enemy.intersects(platform) && enemy.velocityY > 0) {
if (enemy.y - 80 < platform.y - 20) {
enemy.y = platform.y - 20;
enemy.velocityY = 0;
enemy.grounded = true;
}
}
}
// Enemy AI: change direction at platform edges
if (enemy.grounded) {
var onPlatform = false;
for (var p = 0; p < platforms.length; p++) {
var platform = platforms[p];
if (Math.abs(enemy.x - platform.x) < 200 && Math.abs(enemy.y - platform.y) < 50) {
onPlatform = true;
// Check if enemy is near platform edge
if (enemy.direction === 1 && enemy.x > platform.x + 180) {
enemy.direction = -1;
} else if (enemy.direction === -1 && enemy.x < platform.x - 180) {
enemy.direction = 1;
}
break;
}
}
}
}
// Player bullets vs enemies
for (var b = playerBullets.length - 1; b >= 0; b--) {
var bullet = playerBullets[b];
for (var e = enemies.length - 1; e >= 0; e--) {
var enemy = enemies[e];
if (bullet.intersects(enemy)) {
if (enemy.takeDamage(25)) {
enemy.destroy();
enemies.splice(e, 1);
}
bullet.destroy();
playerBullets.splice(b, 1);
break;
}
}
// Player bullets vs boss
if (boss && bullet.intersects(boss)) {
if (boss.takeDamage(10)) {
boss.destroy();
boss = null;
// Progress to next level
level++;
bossSpawned = false;
createLevel();
}
bullet.destroy();
playerBullets.splice(b, 1);
}
}
// Enemy bullets vs player
for (var b = enemyBullets.length - 1; b >= 0; b--) {
var bullet = enemyBullets[b];
if (bullet.intersects(player)) {
player.takeDamage(10);
bullet.destroy();
enemyBullets.splice(b, 1);
}
}
// Player vs enemies (melee)
for (var e = 0; e < enemies.length; e++) {
var enemy = enemies[e];
if (player.intersects(enemy)) {
player.takeDamage(5);
}
}
// Player vs boss
if (boss && player.intersects(boss)) {
player.takeDamage(15);
}
// Player vs power-ups
for (var p = powerUps.length - 1; p >= 0; p--) {
var powerUp = powerUps[p];
if (player.intersects(powerUp)) {
if (powerUp.collect()) {
powerUp.destroy();
powerUps.splice(p, 1);
}
}
}
}
// Camera system
function updateCamera() {
camera.x = player.x - 1024;
camera.y = player.y - 1366;
// Clamp camera
camera.x = Math.max(0, Math.min(camera.x, 1024));
camera.y = Math.max(-1000, Math.min(camera.y, 1000));
game.x = -camera.x;
game.y = -camera.y;
}
// Clean up bullets
function cleanupBullets() {
// Player bullets
for (var i = playerBullets.length - 1; i >= 0; i--) {
var bullet = playerBullets[i];
if (bullet.lifetime <= 0 || bullet.x < -100 || bullet.x > 2148 || bullet.y < -100 || bullet.y > 2832) {
bullet.destroy();
playerBullets.splice(i, 1);
}
}
// Enemy bullets
for (var i = enemyBullets.length - 1; i >= 0; i--) {
var bullet = enemyBullets[i];
if (bullet.lifetime <= 0 || bullet.x < -100 || bullet.x > 2148 || bullet.y < -100 || bullet.y > 2832) {
bullet.destroy();
enemyBullets.splice(i, 1);
}
}
}
// Update UI
function updateUI() {
healthBar.setText('Health: ' + player.health);
scoreText.setText('Score: ' + LK.getScore());
levelText.setText('Level: ' + level);
}
// Main game loop
game.update = function () {
// Handle input
if (leftPressed) {
player.moveLeft();
}
if (rightPressed) {
player.moveRight();
}
if (jumpPressed && player.grounded) {
player.jump();
jumpPressed = false; // Prevent continuous jumping
}
if (shootPressed) {
player.shoot();
}
// Keep player on screen bounds
if (player.x < 50) player.x = 50;
if (player.x > 1998) player.x = 1998;
if (player.y > 2800) {
player.takeDamage(20); // Fall damage
player.x = 1024;
player.y = 2000;
player.velocityY = 0;
}
// Check collisions
checkCollisions();
// Update camera
updateCamera();
// Clean up bullets
cleanupBullets();
// Update UI
updateUI();
// Level progression
if (enemies.length === 0 && !boss && level < 3) {
level++;
createLevel();
}
};
// Play background music
LK.playMusic('bgmusic'); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,601 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Boss = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('boss', {
+ anchorX: 0.5,
+ anchorY: 1.0
+ });
+ self.health = 500;
+ self.maxHealth = 500;
+ self.phase = 1;
+ self.attackTimer = 0;
+ self.moveTimer = 0;
+ self.direction = 1;
+ self.update = function () {
+ self.attackTimer++;
+ self.moveTimer++;
+ // Movement pattern
+ if (self.moveTimer > 60) {
+ if (Math.random() > 0.7) {
+ self.direction *= -1;
+ }
+ self.moveTimer = 0;
+ }
+ self.x += self.direction * 2;
+ // Keep boss on screen
+ if (self.x < 200) {
+ self.x = 200;
+ self.direction = 1;
+ }
+ if (self.x > 1848) {
+ self.x = 1848;
+ self.direction = -1;
+ }
+ // Attack patterns based on phase
+ if (self.phase === 1 && self.attackTimer > 90) {
+ self.basicAttack();
+ self.attackTimer = 0;
+ } else if (self.phase === 2 && self.attackTimer > 60) {
+ self.rapidFire();
+ self.attackTimer = 0;
+ }
+ // Phase transition
+ if (self.health < self.maxHealth * 0.5 && self.phase === 1) {
+ self.phase = 2;
+ LK.effects.flashObject(self, 0xff0000, 1000);
+ }
+ // Flip graphics
+ graphics.scaleX = self.direction;
+ };
+ self.basicAttack = function () {
+ for (var i = 0; i < 3; i++) {
+ var bullet = new EnemyBullet();
+ bullet.x = self.x;
+ bullet.y = self.y - 100;
+ var angle = (i - 1) * 0.5;
+ bullet.velocityX = Math.sin(angle) * 10;
+ bullet.velocityY = Math.cos(angle) * 10;
+ enemyBullets.push(bullet);
+ game.addChild(bullet);
+ }
+ };
+ self.rapidFire = function () {
+ for (var i = 0; i < 5; i++) {
+ var bullet = new EnemyBullet();
+ bullet.x = self.x + (i - 2) * 50;
+ bullet.y = self.y - 100;
+ bullet.velocityX = 0;
+ bullet.velocityY = 12;
+ enemyBullets.push(bullet);
+ game.addChild(bullet);
+ }
+ };
+ self.takeDamage = function (damage) {
+ self.health -= damage;
+ LK.effects.flashObject(self, 0xffffff, 100);
+ if (self.health <= 0) {
+ LK.setScore(LK.getScore() + 1000);
+ LK.showYouWin();
+ return true;
+ }
+ return false;
+ };
+ return self;
+});
+var Enemy = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('enemy', {
+ anchorX: 0.5,
+ anchorY: 1.0
+ });
+ self.velocityX = 0;
+ self.velocityY = 0;
+ self.health = 50;
+ self.speed = 2;
+ self.shootTimer = 0;
+ self.direction = 1;
+ self.grounded = false;
+ self.update = function () {
+ // Apply gravity
+ self.velocityY += 0.8;
+ // AI movement
+ self.velocityX = self.speed * self.direction;
+ // Update position
+ self.x += self.velocityX;
+ self.y += self.velocityY;
+ // Shooting behavior
+ self.shootTimer++;
+ if (self.shootTimer > 120) {
+ // Shoot every 2 seconds
+ self.shoot();
+ self.shootTimer = 0;
+ }
+ // Flip graphics based on direction
+ graphics.scaleX = self.direction;
+ };
+ self.shoot = function () {
+ var bullet = new EnemyBullet();
+ bullet.x = self.x;
+ bullet.y = self.y - 40;
+ // Aim towards player
+ var dx = player.x - self.x;
+ var dy = player.y - self.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ bullet.velocityX = dx / distance * 8;
+ bullet.velocityY = dy / distance * 8;
+ enemyBullets.push(bullet);
+ game.addChild(bullet);
+ };
+ self.takeDamage = function (damage) {
+ self.health -= damage;
+ LK.effects.flashObject(self, 0xffffff, 100);
+ if (self.health <= 0) {
+ LK.setScore(LK.getScore() + 100);
+ return true; // Enemy is dead
+ }
+ return false;
+ };
+ return self;
+});
+var EnemyBullet = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('enemyBullet', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.velocityX = 0;
+ self.velocityY = 0;
+ self.lifetime = 300; // 5 seconds
+ self.update = function () {
+ self.x += self.velocityX;
+ self.y += self.velocityY;
+ self.lifetime--;
+ };
+ return self;
+});
+var Platform = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('platform', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ return self;
+});
+var PlayerBullet = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('bullet', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.velocityX = 0;
+ self.velocityY = 0;
+ self.lifetime = 180; // 3 seconds
+ self.update = function () {
+ self.x += self.velocityX;
+ self.y += self.velocityY;
+ self.lifetime--;
+ };
+ return self;
+});
+var PowerUp = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('powerup', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.type = 'health'; // health, speed, damage
+ self.bobTimer = 0;
+ self.startY = 0;
+ self.update = function () {
+ self.bobTimer += 0.1;
+ self.y = self.startY + Math.sin(self.bobTimer) * 10;
+ graphics.rotation += 0.05;
+ };
+ self.collect = function () {
+ if (self.type === 'health') {
+ player.health = Math.min(player.health + 50, player.maxHealth);
+ }
+ LK.getSound('powerup').play();
+ LK.setScore(LK.getScore() + 50);
+ return true; // PowerUp is collected
+ };
+ return self;
+});
+var Stickman = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('stickman', {
+ anchorX: 0.5,
+ anchorY: 1.0
+ });
+ self.velocityX = 0;
+ self.velocityY = 0;
+ self.speed = 8;
+ self.jumpPower = -20;
+ self.health = 100;
+ self.maxHealth = 100;
+ self.grounded = false;
+ self.canShoot = true;
+ self.shootCooldown = 0;
+ self.facing = 1; // 1 = right, -1 = left
+ self.update = function () {
+ // Apply gravity
+ self.velocityY += 0.8;
+ // Update position
+ self.x += self.velocityX;
+ self.y += self.velocityY;
+ // Apply friction
+ self.velocityX *= 0.85;
+ // Update shoot cooldown
+ if (self.shootCooldown > 0) {
+ self.shootCooldown--;
+ }
+ if (self.shootCooldown <= 0) {
+ self.canShoot = true;
+ }
+ // Flip graphics based on facing direction
+ graphics.scaleX = self.facing;
+ };
+ self.jump = function () {
+ if (self.grounded) {
+ self.velocityY = self.jumpPower;
+ self.grounded = false;
+ LK.getSound('jump').play();
+ }
+ };
+ self.moveLeft = function () {
+ self.velocityX = -self.speed;
+ self.facing = -1;
+ };
+ self.moveRight = function () {
+ self.velocityX = self.speed;
+ self.facing = 1;
+ };
+ self.shoot = function () {
+ if (self.canShoot) {
+ var bullet = new PlayerBullet();
+ bullet.x = self.x + self.facing * 40;
+ bullet.y = self.y - 60;
+ bullet.velocityX = self.facing * 15;
+ playerBullets.push(bullet);
+ game.addChild(bullet);
+ self.canShoot = false;
+ self.shootCooldown = 15;
+ LK.getSound('shoot').play();
+ }
+ };
+ self.takeDamage = function (damage) {
+ self.health -= damage;
+ LK.effects.flashObject(self, 0xff0000, 200);
+ LK.getSound('hit').play();
+ if (self.health <= 0) {
+ LK.showGameOver();
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x111122
+});
+
+/****
+* Game Code
+****/
+// Game variables
+var player;
+var platforms = [];
+var enemies = [];
+var boss = null;
+var playerBullets = [];
+var enemyBullets = [];
+var powerUps = [];
+var camera = {
+ x: 0,
+ y: 0
+};
+var level = 1;
+var bossSpawned = false;
+var leftPressed = false;
+var rightPressed = false;
+var jumpPressed = false;
+var shootPressed = false;
+// UI Elements
+var healthBar = new Text2('Health: 100', {
+ size: 60,
+ fill: 0xFF0000
+});
+healthBar.anchor.set(0, 0);
+LK.gui.topLeft.addChild(healthBar);
+var scoreText = new Text2('Score: 0', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+scoreText.anchor.set(1, 0);
+LK.gui.topRight.addChild(scoreText);
+var levelText = new Text2('Level: 1', {
+ size: 60,
+ fill: 0x00FF00
+});
+levelText.anchor.set(0.5, 0);
+LK.gui.top.addChild(levelText);
+// Create player
+player = new Stickman();
+player.x = 1024;
+player.y = 2000;
+game.addChild(player);
+// Create initial platforms
+function createLevel() {
+ // Clear existing platforms and enemies
+ for (var i = platforms.length - 1; i >= 0; i--) {
+ platforms[i].destroy();
+ platforms.splice(i, 1);
+ }
+ for (var i = enemies.length - 1; i >= 0; i--) {
+ enemies[i].destroy();
+ enemies.splice(i, 1);
+ }
+ // Ground platforms
+ for (var i = 0; i < 6; i++) {
+ var platform = new Platform();
+ platform.x = i * 350 + 200;
+ platform.y = 2400;
+ platforms.push(platform);
+ game.addChild(platform);
+ }
+ // Mid-level platforms
+ for (var i = 0; i < 4; i++) {
+ var platform = new Platform();
+ platform.x = i * 500 + 300;
+ platform.y = 1800;
+ platforms.push(platform);
+ game.addChild(platform);
+ }
+ // Upper platforms
+ for (var i = 0; i < 3; i++) {
+ var platform = new Platform();
+ platform.x = i * 600 + 400;
+ platform.y = 1200;
+ platforms.push(platform);
+ game.addChild(platform);
+ }
+ // Create enemies
+ for (var i = 0; i < 3 + level; i++) {
+ var enemy = new Enemy();
+ enemy.x = 400 + i * 400;
+ enemy.y = 1750;
+ enemies.push(enemy);
+ game.addChild(enemy);
+ }
+ // Create power-ups
+ for (var i = 0; i < 2; i++) {
+ var powerUp = new PowerUp();
+ powerUp.x = 600 + i * 800;
+ powerUp.y = 1150;
+ powerUp.startY = powerUp.y;
+ powerUps.push(powerUp);
+ game.addChild(powerUp);
+ }
+ // Spawn boss at higher levels
+ if (level >= 3 && !bossSpawned) {
+ boss = new Boss();
+ boss.x = 1024;
+ boss.y = 800;
+ game.addChild(boss);
+ bossSpawned = true;
+ }
+}
+createLevel();
+// Input handling
+game.down = function (x, y, obj) {
+ if (x < 1024) {
+ if (y > 1366) {
+ jumpPressed = true;
+ } else {
+ leftPressed = true;
+ }
+ } else {
+ if (y > 1366) {
+ shootPressed = true;
+ } else {
+ rightPressed = true;
+ }
+ }
+};
+game.up = function (x, y, obj) {
+ leftPressed = false;
+ rightPressed = false;
+ jumpPressed = false;
+ shootPressed = false;
+};
+// Collision detection
+function checkCollisions() {
+ // Player vs platforms
+ player.grounded = false;
+ for (var i = 0; i < platforms.length; i++) {
+ var platform = platforms[i];
+ if (player.intersects(platform) && player.velocityY > 0) {
+ if (player.y - 120 < platform.y - 20) {
+ player.y = platform.y - 20;
+ player.velocityY = 0;
+ player.grounded = true;
+ }
+ }
+ }
+ // Enemy vs platforms
+ for (var e = 0; e < enemies.length; e++) {
+ var enemy = enemies[e];
+ enemy.grounded = false;
+ for (var p = 0; p < platforms.length; p++) {
+ var platform = platforms[p];
+ if (enemy.intersects(platform) && enemy.velocityY > 0) {
+ if (enemy.y - 80 < platform.y - 20) {
+ enemy.y = platform.y - 20;
+ enemy.velocityY = 0;
+ enemy.grounded = true;
+ }
+ }
+ }
+ // Enemy AI: change direction at platform edges
+ if (enemy.grounded) {
+ var onPlatform = false;
+ for (var p = 0; p < platforms.length; p++) {
+ var platform = platforms[p];
+ if (Math.abs(enemy.x - platform.x) < 200 && Math.abs(enemy.y - platform.y) < 50) {
+ onPlatform = true;
+ // Check if enemy is near platform edge
+ if (enemy.direction === 1 && enemy.x > platform.x + 180) {
+ enemy.direction = -1;
+ } else if (enemy.direction === -1 && enemy.x < platform.x - 180) {
+ enemy.direction = 1;
+ }
+ break;
+ }
+ }
+ }
+ }
+ // Player bullets vs enemies
+ for (var b = playerBullets.length - 1; b >= 0; b--) {
+ var bullet = playerBullets[b];
+ for (var e = enemies.length - 1; e >= 0; e--) {
+ var enemy = enemies[e];
+ if (bullet.intersects(enemy)) {
+ if (enemy.takeDamage(25)) {
+ enemy.destroy();
+ enemies.splice(e, 1);
+ }
+ bullet.destroy();
+ playerBullets.splice(b, 1);
+ break;
+ }
+ }
+ // Player bullets vs boss
+ if (boss && bullet.intersects(boss)) {
+ if (boss.takeDamage(10)) {
+ boss.destroy();
+ boss = null;
+ // Progress to next level
+ level++;
+ bossSpawned = false;
+ createLevel();
+ }
+ bullet.destroy();
+ playerBullets.splice(b, 1);
+ }
+ }
+ // Enemy bullets vs player
+ for (var b = enemyBullets.length - 1; b >= 0; b--) {
+ var bullet = enemyBullets[b];
+ if (bullet.intersects(player)) {
+ player.takeDamage(10);
+ bullet.destroy();
+ enemyBullets.splice(b, 1);
+ }
+ }
+ // Player vs enemies (melee)
+ for (var e = 0; e < enemies.length; e++) {
+ var enemy = enemies[e];
+ if (player.intersects(enemy)) {
+ player.takeDamage(5);
+ }
+ }
+ // Player vs boss
+ if (boss && player.intersects(boss)) {
+ player.takeDamage(15);
+ }
+ // Player vs power-ups
+ for (var p = powerUps.length - 1; p >= 0; p--) {
+ var powerUp = powerUps[p];
+ if (player.intersects(powerUp)) {
+ if (powerUp.collect()) {
+ powerUp.destroy();
+ powerUps.splice(p, 1);
+ }
+ }
+ }
+}
+// Camera system
+function updateCamera() {
+ camera.x = player.x - 1024;
+ camera.y = player.y - 1366;
+ // Clamp camera
+ camera.x = Math.max(0, Math.min(camera.x, 1024));
+ camera.y = Math.max(-1000, Math.min(camera.y, 1000));
+ game.x = -camera.x;
+ game.y = -camera.y;
+}
+// Clean up bullets
+function cleanupBullets() {
+ // Player bullets
+ for (var i = playerBullets.length - 1; i >= 0; i--) {
+ var bullet = playerBullets[i];
+ if (bullet.lifetime <= 0 || bullet.x < -100 || bullet.x > 2148 || bullet.y < -100 || bullet.y > 2832) {
+ bullet.destroy();
+ playerBullets.splice(i, 1);
+ }
+ }
+ // Enemy bullets
+ for (var i = enemyBullets.length - 1; i >= 0; i--) {
+ var bullet = enemyBullets[i];
+ if (bullet.lifetime <= 0 || bullet.x < -100 || bullet.x > 2148 || bullet.y < -100 || bullet.y > 2832) {
+ bullet.destroy();
+ enemyBullets.splice(i, 1);
+ }
+ }
+}
+// Update UI
+function updateUI() {
+ healthBar.setText('Health: ' + player.health);
+ scoreText.setText('Score: ' + LK.getScore());
+ levelText.setText('Level: ' + level);
+}
+// Main game loop
+game.update = function () {
+ // Handle input
+ if (leftPressed) {
+ player.moveLeft();
+ }
+ if (rightPressed) {
+ player.moveRight();
+ }
+ if (jumpPressed && player.grounded) {
+ player.jump();
+ jumpPressed = false; // Prevent continuous jumping
+ }
+ if (shootPressed) {
+ player.shoot();
+ }
+ // Keep player on screen bounds
+ if (player.x < 50) player.x = 50;
+ if (player.x > 1998) player.x = 1998;
+ if (player.y > 2800) {
+ player.takeDamage(20); // Fall damage
+ player.x = 1024;
+ player.y = 2000;
+ player.velocityY = 0;
+ }
+ // Check collisions
+ checkCollisions();
+ // Update camera
+ updateCamera();
+ // Clean up bullets
+ cleanupBullets();
+ // Update UI
+ updateUI();
+ // Level progression
+ if (enemies.length === 0 && !boss && level < 3) {
+ level++;
+ createLevel();
+ }
+};
+// Play background music
+LK.playMusic('bgmusic');
\ No newline at end of file
Crea un personaje estilo pixel art, un guerrero simple y fácil de animar. No debe tener manos ni piernas visibles, solo un cuerpo principal con forma redonda u ovalada. El diseño debe sugerir que es un guerrero usando colores llamativos, ojos brillantes o una armadura pixelada pegada al cuerpo. Puede tener una espada flotando al lado o en la espalda como decoración. Debe verse como un personaje de videojuego, pero sin partes que necesiten animación compleja.. In-Game asset. 2d. High contrast. No shadows
Diseña una espada estilo pixel art, sencilla pero llamativa. Debe ser fácil de animar o colocar junto a un personaje. El mango debe ser corto y simple, y la hoja puede ser recta o con un brillo digital. Usa colores llamativos como azul neón, rojo fuego o plateado con detalles pixelados. El diseño debe parecer futurista o mágico, como si fuera un arma especial de un guerrero digital.. In-Game asset. 2d. High contrast. No shadows