User prompt
puede disparar en las direcciones hacia el frente y en diagonal hacia arriba
User prompt
el jugador puede disparar en diagonal hacia arriba
User prompt
el jugador esta en la esquina izquierda abajo de la pantalla
Code edit (1 edits merged)
Please save this source code
User prompt
Side Shooter Defense
Initial prompt
un juego donde le jugador esta en la izquierda de la pantalla y tiene que disparar a los enemigos que aparecen de la derecha de la pantalla
/****
* 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.lastX = undefined;
self.lastY = undefined;
self.directionX = 1; // Default horizontal direction
self.directionY = 0; // Default no vertical movement
self.update = function () {
if (self.lastX === undefined) self.lastX = self.x;
if (self.lastY === undefined) self.lastY = self.y;
self.x += self.speed * self.directionX;
self.y += self.speed * self.directionY;
self.lastX = self.x;
self.lastY = self.y;
};
return self;
});
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -3;
self.lastX = undefined;
self.update = function () {
if (self.lastX === undefined) self.lastX = self.x;
self.x += self.speed;
// Check if enemy reached left side (transition detection)
if (self.lastX > 0 && self.x <= 0) {
// Enemy reached left side - game over
LK.effects.flashScreen(0xFF0000, 1000);
LK.showGameOver();
}
self.lastX = self.x;
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.shootCooldown = 0;
self.update = function () {
if (self.shootCooldown > 0) {
self.shootCooldown--;
}
};
self.canShoot = function () {
return self.shootCooldown <= 0;
};
self.shoot = function () {
if (self.canShoot()) {
self.shootCooldown = 10; // 10 frames cooldown
return true;
}
return false;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a2e
});
/****
* Game Code
****/
var player = new Player();
var enemies = [];
var bullets = [];
var enemySpawnTimer = 0;
var enemySpawnRate = 120; // Start spawning every 2 seconds (120 frames)
var difficultyTimer = 0;
// Position player in bottom-left corner of screen
player.x = 150;
player.y = 2732 - 150; // Near bottom with some margin
game.addChild(player);
// Create score display
var scoreTxt = new Text2('0', {
size: 100,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
scoreTxt.setText(LK.getScore());
// Tap to shoot
game.down = function (x, y, obj) {
if (player.shoot()) {
var bullet = new Bullet();
bullet.x = player.x + 40; // Spawn slightly ahead of player
bullet.y = player.y - 40; // Spawn slightly above player
bullet.lastX = bullet.x;
bullet.lastY = bullet.y;
// Determine shooting direction based on tap position
if (y < player.y) {
// Tap above player - shoot diagonally upward
bullet.directionX = 1;
bullet.directionY = -0.6;
} else {
// Tap at or below player - shoot horizontally
bullet.directionX = 1;
bullet.directionY = 0;
}
bullets.push(bullet);
game.addChild(bullet);
LK.getSound('shoot').play();
}
};
game.update = function () {
// Update enemy spawn timer and difficulty
enemySpawnTimer++;
difficultyTimer++;
// Increase difficulty every 10 seconds (600 frames)
if (difficultyTimer % 600 === 0 && enemySpawnRate > 30) {
enemySpawnRate -= 10; // Spawn enemies more frequently
}
// Spawn enemies
if (enemySpawnTimer >= enemySpawnRate) {
var enemy = new Enemy();
enemy.x = 2048 + 30; // Spawn just off right edge
enemy.y = Math.random() * (2732 - 200) + 100; // Random Y position with margins
enemy.lastX = enemy.x;
enemies.push(enemy);
game.addChild(enemy);
enemySpawnTimer = 0;
}
// Update and check bullets
for (var i = bullets.length - 1; i >= 0; i--) {
var bullet = bullets[i];
// Remove bullets that go off screen
if (bullet.x > 2048 + 50 || bullet.y < -50) {
bullet.destroy();
bullets.splice(i, 1);
continue;
}
// Check bullet vs enemy collisions
var bulletHit = false;
for (var j = enemies.length - 1; j >= 0; j--) {
var enemy = enemies[j];
if (bullet.intersects(enemy)) {
// Bullet hit enemy
LK.setScore(LK.getScore() + 10);
scoreTxt.setText(LK.getScore());
// Visual feedback
tween(enemy, {
scaleX: 1.5,
scaleY: 1.5,
alpha: 0
}, {
duration: 200,
onFinish: function onFinish() {
if (enemy.parent) {
enemy.destroy();
}
}
});
enemies.splice(j, 1);
bullet.destroy();
bullets.splice(i, 1);
bulletHit = true;
LK.getSound('hit').play();
break;
}
}
if (bulletHit) continue;
}
// Update and check enemies
for (var k = enemies.length - 1; k >= 0; k--) {
var enemy = enemies[k];
// Check if enemy collides with player
if (enemy.intersects(player)) {
LK.effects.flashScreen(0xFF0000, 1000);
LK.showGameOver();
return;
}
}
};
// Play background music
LK.playMusic('bgmusic'); ===================================================================
--- original.js
+++ change.js
@@ -14,13 +14,15 @@
});
self.speed = 8;
self.lastX = undefined;
self.lastY = undefined;
+ self.directionX = 1; // Default horizontal direction
+ self.directionY = 0; // Default no vertical movement
self.update = function () {
if (self.lastX === undefined) self.lastX = self.x;
if (self.lastY === undefined) self.lastY = self.y;
- self.x += self.speed;
- self.y -= self.speed * 0.6; // Move diagonally upward
+ self.x += self.speed * self.directionX;
+ self.y += self.speed * self.directionY;
self.lastX = self.x;
self.lastY = self.y;
};
return self;
@@ -106,8 +108,18 @@
bullet.x = player.x + 40; // Spawn slightly ahead of player
bullet.y = player.y - 40; // Spawn slightly above player
bullet.lastX = bullet.x;
bullet.lastY = bullet.y;
+ // Determine shooting direction based on tap position
+ if (y < player.y) {
+ // Tap above player - shoot diagonally upward
+ bullet.directionX = 1;
+ bullet.directionY = -0.6;
+ } else {
+ // Tap at or below player - shoot horizontally
+ bullet.directionX = 1;
+ bullet.directionY = 0;
+ }
bullets.push(bullet);
game.addChild(bullet);
LK.getSound('shoot').play();
}
tommy vercetti de gta vice city hecho con pixeles apuntando con un rifle de asalto m4 con la perspcetiva lateral. In-Game asset. 2d. High contrast. No shadows
un mafioso italiano usando un m4 con la perspectiva lateral de cuerpo completo In-Game asset. 2d. High contrast. No shadows
un pandillero mexicano apuntando con un SMG con la perspectiva lateral. In-Game asset. 2d. High contrast. No shadows de cuerpo completo
un pandillero negro con camisa azul oscuro y pantalon blanco usando una escopeta con la perspectiva lateral de cuerpo completo. In-Game asset. 2d. High contrast. No shadows
chaleco antibalas. In-Game asset. 2d. High contrast. No shadows
corazon verde dibujado. In-Game asset. 2d. High contrast. No shadows
escopeta dibujada. In-Game asset. 2d. High contrast. No shadows
claude speed de gta 3 apuntando con una ak47 desde una perspectiva lateral de cuerpo completo In-Game asset. 2d. High contrast. No shadows
las letras play con un color celeste y rosa combinados con una cursiva In-Game asset. 2d. High contrast. No shadows con contorno negro
letras que dicen seleccion de personaje con un color rosa y un color celeste y con contorno azul y rosa cursiva. In-Game asset. 2d. High contrast. No shadows
las letras vidas con un color rosa y azul con contorno rosa y azul combinados hechos con pixeles. In-Game asset. 2d. High contrast. No shadows
una mansion con piso rojo vista completa y totalmente desde arriba y desde dentro con una escalera grande igual que la de scarface la pelicula y pasillos a los lados. In-Game asset. 2d. High contrast. No shadows
no va a tener ese brazo especificamente
un motociclista vestido de negro apuntando con una smg de cuerpo completo con perspectiva lateral In-Game asset. 2d. High contrast. No shadows sin casco y sin moto
letras de color rosa y azul y con cursiva que digan vice city wars. In-Game asset. 2d. High contrast. No shadows
un hombre usando una chaqueta negra pantalones azules disparando un ak47. In-Game asset. 2d. High contrast. No shadows con la perspectiva lateral de cuerpo completo
letras de color rosa que dicen seleccion de personaje en cursiva y con contorno blanco