User prompt
delete obstacles
User prompt
deleye obstacles
User prompt
karakter tıklanılan yere gitmesin
User prompt
powerup 50 puan getirsin
User prompt
mermi assetini ters çevir
User prompt
mermi assetini giden yöne yönlendir
User prompt
mermiyi gideceği yöne yönlendir
User prompt
mermi tıklanan yere gitsin
Code edit (1 edits merged)
Please save this source code
User prompt
Arcade Frenzy
Initial prompt
arcade
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Bullet class var Bullet = Container.expand(function () { var self = Container.call(this); var bulletSprite = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); // Target coordinates for the bullet self.targetX = null; self.targetY = null; self.speed = 48; // pixels per frame, positive value self.dirX = 0; self.dirY = -1; self.setTarget = function (tx, ty) { // Calculate direction vector var dx = tx - self.x; var dy = ty - self.y; var len = Math.sqrt(dx * dx + dy * dy); if (len > 0) { self.dirX = dx / len; self.dirY = dy / len; } else { self.dirX = 0; self.dirY = -1; } self.targetX = tx; self.targetY = ty; }; self.update = function () { // Move in direction self.x += self.dirX * self.speed; self.y += self.dirY * self.speed; }; return self; }); // Enemy class var Enemy = Container.expand(function () { var self = Container.call(this); var enemySprite = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.radius = enemySprite.width * 0.5; self.speed = 8 + Math.random() * 8; self.dir = Math.random() < 0.5 ? -1 : 1; self.xSpeed = self.dir * (4 + Math.random() * 6); self.update = function () { self.y += self.speed; self.x += self.xSpeed; // Bounce off walls if (self.x < self.radius) { self.x = self.radius; self.xSpeed *= -1; } if (self.x > 2048 - self.radius) { self.x = 2048 - self.radius; self.xSpeed *= -1; } }; return self; }); // Obstacle class var Obstacle = Container.expand(function () { var self = Container.call(this); var obsSprite = self.attachAsset('obstacle', { anchorX: 0.5, anchorY: 0.5 }); self.width = obsSprite.width; self.height = obsSprite.height; self.speed = 12 + Math.random() * 8; self.update = function () { self.y += self.speed; }; return self; }); // Player class var Player = Container.expand(function () { var self = Container.call(this); var playerSprite = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.radius = playerSprite.width * 0.5; self.lives = 3; self.invincible = false; self.invincibleTicks = 0; self.shootCooldown = 0; self.update = function () { if (self.invincible) { self.invincibleTicks--; if (self.invincibleTicks <= 0) { self.invincible = false; playerSprite.alpha = 1; } else { // Flicker effect playerSprite.alpha = LK.ticks % 10 < 5 ? 0.4 : 1; } } if (self.shootCooldown > 0) self.shootCooldown--; }; // Called when player is hit self.hit = function () { if (self.invincible) return; self.lives--; self.invincible = true; self.invincibleTicks = 90; // 1.5 seconds playerSprite.alpha = 0.4; LK.effects.flashObject(self, 0xff0000, 500); LK.getSound('hit').play(); }; // Called when player picks up a powerup self.powerup = function () { self.invincible = true; self.invincibleTicks = 180; // 3 seconds playerSprite.alpha = 0.4; LK.getSound('powerup').play(); }; return self; }); // Powerup class var Powerup = Container.expand(function () { var self = Container.call(this); var puSprite = self.attachAsset('powerup', { anchorX: 0.5, anchorY: 0.5 }); self.radius = puSprite.width * 0.5; self.speed = 10; self.update = function () { self.y += self.speed; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x181818 }); /**** * Game Code ****/ // Game state variables // Player character: blue box // Enemy: red ellipse // Obstacle: orange box // Bullet: yellow box // Powerup: green ellipse // Sound effects // Music var player; var bullets = []; var enemies = []; var obstacles = []; var powerups = []; var dragNode = null; var lastTouch = { x: 0, y: 0 }; var scoreTxt, livesTxt; var spawnTick = 0; var difficulty = 1; var gameOver = false; // UI scoreTxt = new Text2('0', { size: 120, fill: "#fff" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); livesTxt = new Text2('♥♥♥', { size: 90, fill: 0xFF5252 }); livesTxt.anchor.set(1, 0); LK.gui.topRight.addChild(livesTxt); // Start music LK.playMusic('arcadebg'); // Create player player = new Player(); player.x = 2048 / 2; player.y = 2732 - 350; game.addChild(player); // Helper: update lives display function updateLives() { var s = ''; for (var i = 0; i < player.lives; i++) s += '♥'; livesTxt.setText(s); } // Helper: spawn enemy function spawnEnemy() { var e = new Enemy(); e.x = 200 + Math.random() * (2048 - 400); e.y = -100; enemies.push(e); game.addChild(e); } // Helper: spawn obstacle function spawnObstacle() { var o = new Obstacle(); o.x = 200 + Math.random() * (2048 - 400); o.y = -60; obstacles.push(o); game.addChild(o); } // Helper: spawn powerup function spawnPowerup() { var p = new Powerup(); p.x = 200 + Math.random() * (2048 - 400); p.y = -80; powerups.push(p); game.addChild(p); } // Touch controls: drag player game.down = function (x, y, obj) { // Don't allow drag from top left 100x100 if (x < 100 && y < 100) return; if (player && !gameOver) { dragNode = player; lastTouch.x = x; lastTouch.y = y; } }; game.move = function (x, y, obj) { if (dragNode && !gameOver) { // Clamp to game area var px = Math.max(player.radius, Math.min(2048 - player.radius, x)); var py = Math.max(player.radius, Math.min(2732 - player.radius, y)); player.x = px; player.y = py; lastTouch.x = x; lastTouch.y = y; } }; game.up = function (x, y, obj) { dragNode = null; }; // Tap to shoot (anywhere except top left 100x100) game.on('down', function (x, y, obj) { if (x < 100 && y < 100) return; if (player && !gameOver && player.shootCooldown <= 0) { var b = new Bullet(); b.x = player.x; b.y = player.y - player.radius - 20; b.setTarget(x, y); // Set bullet direction toward tap bullets.push(b); game.addChild(b); player.shootCooldown = 12; // 0.2s LK.getSound('shoot').play(); } }); // Main game loop game.update = function () { if (gameOver) return; // Increase difficulty over time if (LK.ticks % 600 === 0 && difficulty < 10) { difficulty++; } // Player update player.update(); // Spawn logic spawnTick++; if (spawnTick % Math.max(60 - difficulty * 4, 20) === 0) { if (Math.random() < 0.6) spawnEnemy();else spawnObstacle(); } if (spawnTick % 300 === 0 && Math.random() < 0.5) { spawnPowerup(); } // Bullets for (var i = bullets.length - 1; i >= 0; i--) { var b = bullets[i]; b.update(); if (b.y < -60) { b.destroy(); bullets.splice(i, 1); continue; } // Bullet hits enemy for (var j = enemies.length - 1; j >= 0; j--) { var e = enemies[j]; if (b.intersects(e)) { LK.setScore(LK.getScore() + 10); scoreTxt.setText(LK.getScore()); LK.getSound('enemyDown').play(); e.destroy(); enemies.splice(j, 1); b.destroy(); bullets.splice(i, 1); break; } } } // Enemies for (var i = enemies.length - 1; i >= 0; i--) { var e = enemies[i]; e.update(); if (e.y > 2732 + 100) { e.destroy(); enemies.splice(i, 1); continue; } // Enemy hits player if (e.intersects(player)) { if (!player.invincible) { player.hit(); updateLives(); if (player.lives <= 0) { gameOver = true; LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); return; } } e.destroy(); enemies.splice(i, 1); } } // Obstacles for (var i = obstacles.length - 1; i >= 0; i--) { var o = obstacles[i]; o.update(); if (o.y > 2732 + 60) { o.destroy(); obstacles.splice(i, 1); continue; } // Obstacle hits player if (o.intersects(player)) { if (!player.invincible) { player.hit(); updateLives(); if (player.lives <= 0) { gameOver = true; LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); return; } } o.destroy(); obstacles.splice(i, 1); } } // Powerups for (var i = powerups.length - 1; i >= 0; i--) { var p = powerups[i]; p.update(); if (p.y > 2732 + 80) { p.destroy(); powerups.splice(i, 1); continue; } // Powerup hits player if (p.intersects(player)) { player.powerup(); p.destroy(); powerups.splice(i, 1); } } }; // Score display scoreTxt.setText(LK.getScore()); updateLives();
===================================================================
--- original.js
+++ change.js
@@ -12,11 +12,33 @@
var bulletSprite = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
- self.speed = -32;
+ // Target coordinates for the bullet
+ self.targetX = null;
+ self.targetY = null;
+ self.speed = 48; // pixels per frame, positive value
+ self.dirX = 0;
+ self.dirY = -1;
+ self.setTarget = function (tx, ty) {
+ // Calculate direction vector
+ var dx = tx - self.x;
+ var dy = ty - self.y;
+ var len = Math.sqrt(dx * dx + dy * dy);
+ if (len > 0) {
+ self.dirX = dx / len;
+ self.dirY = dy / len;
+ } else {
+ self.dirX = 0;
+ self.dirY = -1;
+ }
+ self.targetX = tx;
+ self.targetY = ty;
+ };
self.update = function () {
- self.y += self.speed;
+ // Move in direction
+ self.x += self.dirX * self.speed;
+ self.y += self.dirY * self.speed;
};
return self;
});
// Enemy class
@@ -128,16 +150,16 @@
/****
* Game Code
****/
-// Music
-// Sound effects
-// Powerup: green ellipse
-// Bullet: yellow box
-// Obstacle: orange box
-// Enemy: red ellipse
-// Player character: blue box
// Game state variables
+// Player character: blue box
+// Enemy: red ellipse
+// Obstacle: orange box
+// Bullet: yellow box
+// Powerup: green ellipse
+// Sound effects
+// Music
var player;
var bullets = [];
var enemies = [];
var obstacles = [];
@@ -231,8 +253,9 @@
if (player && !gameOver && player.shootCooldown <= 0) {
var b = new Bullet();
b.x = player.x;
b.y = player.y - player.radius - 20;
+ b.setTarget(x, y); // Set bullet direction toward tap
bullets.push(b);
game.addChild(b);
player.shootCooldown = 12; // 0.2s
LK.getSound('shoot').play();
soldier pixel. In-Game asset. 2d. High contrast. No shadows
pixel ammo. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
pixel zombie character. In-Game asset. 2d. High contrast. No shadows
pixel brick wall. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Red zombie pixel. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
blood pixel. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
pixel shotgun. In-Game asset. 2d. High contrast. No shadows