User prompt
buat jangkauan peluru player 2x jauh
User prompt
reduce number of jar
User prompt
reduce number of jar. make jar broke after 3 time hit
User prompt
fix nusic background
User prompt
buat logika saat pindah level ninja dan platform bersama munculnya
User prompt
ninja bisa mati saat 5 kali diserang.
User prompt
buat satu di antar jar yang ada bisa melontar api ke bawah sebagai serangan
User prompt
add sound asset for jar
User prompt
buat jar bisa loncat loncat dan bergerak ke kanan dan ke kiri ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
karakter ninja bisa bolak balik imagenya
User prompt
pertajam gambar background
User prompt
add background asset
User prompt
buat ninja bisa di gerakn dengan di swipe kanan atau kiri
User prompt
buat seluruh platform otomatis bergerak random ke kanan atau ke kiri bolak balik ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
buat aturan bila seluruh guci hancur baru pindah level ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
buat naik level setelah guci pecah ditembak
User prompt
buat animasi guci pecah ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
buat guci guci antik di atas permukaan platform dan guci pecah saat diserang ↪💡 Consider importing and using the following plugins: @upit/tween.v1
Code edit (1 edits merged)
Please save this source code
User prompt
Ninja Sky Strike
Initial prompt
buat game random static platform. ninja vs evil terbang
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Enemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.speedX = (Math.random() - 0.5) * 3; self.speedY = (Math.random() - 0.5) * 3; self.health = 1; self.update = function () { self.x += self.speedX; self.y += self.speedY; // Bounce off screen edges if (self.x < 30 || self.x > 2018) { self.speedX *= -1; } if (self.y < 30 || self.y > 2702) { self.speedY *= -1; } }; return self; }); var Ninja = Container.expand(function () { var self = Container.call(this); var ninjaGraphics = self.attachAsset('ninja', { anchorX: 0.5, anchorY: 0.5 }); self.velocityY = 0; self.onGround = false; self.gravity = 0.8; self.jumpPower = -18; self.health = 3; self.attackCooldown = 0; self.update = function () { // Apply gravity if (!self.onGround) { self.velocityY += self.gravity; } self.y += self.velocityY; // Reset ground state self.onGround = false; // Check platform collisions for (var i = 0; i < platforms.length; i++) { var platform = platforms[i]; if (self.intersects(platform) && self.velocityY > 0) { var platformTop = platform.y - platform.height / 2; var ninjaBottom = self.y + self.height / 2; if (ninjaBottom > platformTop - 20) { self.y = platformTop - self.height / 2; self.velocityY = 0; self.onGround = true; break; } } } // Fall off screen check if (self.y > 2800) { LK.showGameOver(); } // Reduce attack cooldown if (self.attackCooldown > 0) { self.attackCooldown--; } }; self.jump = function () { if (self.onGround) { self.velocityY = self.jumpPower; self.onGround = false; LK.getSound('jump').play(); } }; self.attack = function (targetX, targetY) { if (self.attackCooldown <= 0) { var projectile = new Projectile(); projectile.x = self.x; projectile.y = self.y; var dx = targetX - self.x; var dy = targetY - self.y; var distance = Math.sqrt(dx * dx + dy * dy); projectile.speedX = dx / distance * 12; projectile.speedY = dy / distance * 12; projectiles.push(projectile); game.addChild(projectile); self.attackCooldown = 20; LK.getSound('attack').play(); } }; return self; }); var Platform = Container.expand(function () { var self = Container.call(this); var platformGraphics = self.attachAsset('platform', { anchorX: 0.5, anchorY: 0.5 }); return self; }); var Projectile = Container.expand(function () { var self = Container.call(this); var projectileGraphics = self.attachAsset('projectile', { anchorX: 0.5, anchorY: 0.5 }); self.speedX = 0; self.speedY = 0; self.lifetime = 0; self.update = function () { self.x += self.speedX; self.y += self.speedY; self.lifetime++; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87ceeb }); /**** * Game Code ****/ var ninja = new Ninja(); var platforms = []; var enemies = []; var projectiles = []; var enemySpawnTimer = 0; var difficultyTimer = 0; // Create score display var scoreTxt = new Text2('0', { size: 80, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Generate random platforms function generatePlatforms() { platforms = []; // Ground platform var groundPlatform = new Platform(); groundPlatform.x = 1024; groundPlatform.y = 2600; groundPlatform.width = 400; platforms.push(groundPlatform); game.addChild(groundPlatform); // Random platforms for (var i = 0; i < 8; i++) { var platform = new Platform(); platform.x = Math.random() * 1600 + 200; platform.y = 2400 - i * 250 - Math.random() * 100; platform.width = 150 + Math.random() * 100; platforms.push(platform); game.addChild(platform); } } function spawnEnemy() { var enemy = new Enemy(); // Spawn from random edge var side = Math.floor(Math.random() * 4); switch (side) { case 0: // Top enemy.x = Math.random() * 2048; enemy.y = -30; break; case 1: // Right enemy.x = 2078; enemy.y = Math.random() * 2732; break; case 2: // Bottom enemy.x = Math.random() * 2048; enemy.y = 2762; break; case 3: // Left enemy.x = -30; enemy.y = Math.random() * 2732; break; } enemies.push(enemy); game.addChild(enemy); } // Initialize game elements generatePlatforms(); ninja.x = 1024; ninja.y = 2500; game.addChild(ninja); // Touch controls game.down = function (x, y, obj) { // If touching near ninja, jump var dx = x - ninja.x; var dy = y - ninja.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < 150) { ninja.jump(); } else { // Attack in direction of touch ninja.attack(x, y); } }; game.update = function () { // Spawn enemies enemySpawnTimer++; difficultyTimer++; var spawnRate = Math.max(180 - Math.floor(difficultyTimer / 300), 60); if (enemySpawnTimer >= spawnRate) { spawnEnemy(); enemySpawnTimer = 0; } // Check projectile vs enemy collisions for (var p = projectiles.length - 1; p >= 0; p--) { var projectile = projectiles[p]; // Remove old projectiles if (projectile.lifetime > 180 || projectile.x < -50 || projectile.x > 2098 || projectile.y < -50 || projectile.y > 2782) { projectile.destroy(); projectiles.splice(p, 1); continue; } // Check enemy hits for (var e = enemies.length - 1; e >= 0; e--) { var enemy = enemies[e]; if (projectile.intersects(enemy)) { // Hit enemy LK.setScore(LK.getScore() + 10); scoreTxt.setText(LK.getScore()); LK.getSound('enemyHit').play(); LK.effects.flashObject(enemy, 0xffffff, 200); enemy.destroy(); enemies.splice(e, 1); projectile.destroy(); projectiles.splice(p, 1); break; } } } // Check ninja vs enemy collisions for (var e = enemies.length - 1; e >= 0; e--) { var enemy = enemies[e]; if (ninja.intersects(enemy)) { ninja.health--; LK.effects.flashObject(ninja, 0xff0000, 500); enemy.destroy(); enemies.splice(e, 1); if (ninja.health <= 0) { LK.showGameOver(); } } } // Keep ninja on screen horizontally if (ninja.x < 40) ninja.x = 40; if (ninja.x > 2008) ninja.x = 2008; };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,265 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Enemy = Container.expand(function () {
+ var self = Container.call(this);
+ var enemyGraphics = self.attachAsset('enemy', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speedX = (Math.random() - 0.5) * 3;
+ self.speedY = (Math.random() - 0.5) * 3;
+ self.health = 1;
+ self.update = function () {
+ self.x += self.speedX;
+ self.y += self.speedY;
+ // Bounce off screen edges
+ if (self.x < 30 || self.x > 2018) {
+ self.speedX *= -1;
+ }
+ if (self.y < 30 || self.y > 2702) {
+ self.speedY *= -1;
+ }
+ };
+ return self;
+});
+var Ninja = Container.expand(function () {
+ var self = Container.call(this);
+ var ninjaGraphics = self.attachAsset('ninja', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.velocityY = 0;
+ self.onGround = false;
+ self.gravity = 0.8;
+ self.jumpPower = -18;
+ self.health = 3;
+ self.attackCooldown = 0;
+ self.update = function () {
+ // Apply gravity
+ if (!self.onGround) {
+ self.velocityY += self.gravity;
+ }
+ self.y += self.velocityY;
+ // Reset ground state
+ self.onGround = false;
+ // Check platform collisions
+ for (var i = 0; i < platforms.length; i++) {
+ var platform = platforms[i];
+ if (self.intersects(platform) && self.velocityY > 0) {
+ var platformTop = platform.y - platform.height / 2;
+ var ninjaBottom = self.y + self.height / 2;
+ if (ninjaBottom > platformTop - 20) {
+ self.y = platformTop - self.height / 2;
+ self.velocityY = 0;
+ self.onGround = true;
+ break;
+ }
+ }
+ }
+ // Fall off screen check
+ if (self.y > 2800) {
+ LK.showGameOver();
+ }
+ // Reduce attack cooldown
+ if (self.attackCooldown > 0) {
+ self.attackCooldown--;
+ }
+ };
+ self.jump = function () {
+ if (self.onGround) {
+ self.velocityY = self.jumpPower;
+ self.onGround = false;
+ LK.getSound('jump').play();
+ }
+ };
+ self.attack = function (targetX, targetY) {
+ if (self.attackCooldown <= 0) {
+ var projectile = new Projectile();
+ projectile.x = self.x;
+ projectile.y = self.y;
+ var dx = targetX - self.x;
+ var dy = targetY - self.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ projectile.speedX = dx / distance * 12;
+ projectile.speedY = dy / distance * 12;
+ projectiles.push(projectile);
+ game.addChild(projectile);
+ self.attackCooldown = 20;
+ LK.getSound('attack').play();
+ }
+ };
+ return self;
+});
+var Platform = Container.expand(function () {
+ var self = Container.call(this);
+ var platformGraphics = self.attachAsset('platform', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ return self;
+});
+var Projectile = Container.expand(function () {
+ var self = Container.call(this);
+ var projectileGraphics = self.attachAsset('projectile', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speedX = 0;
+ self.speedY = 0;
+ self.lifetime = 0;
+ self.update = function () {
+ self.x += self.speedX;
+ self.y += self.speedY;
+ self.lifetime++;
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87ceeb
+});
+
+/****
+* Game Code
+****/
+var ninja = new Ninja();
+var platforms = [];
+var enemies = [];
+var projectiles = [];
+var enemySpawnTimer = 0;
+var difficultyTimer = 0;
+// Create score display
+var scoreTxt = new Text2('0', {
+ size: 80,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+// Generate random platforms
+function generatePlatforms() {
+ platforms = [];
+ // Ground platform
+ var groundPlatform = new Platform();
+ groundPlatform.x = 1024;
+ groundPlatform.y = 2600;
+ groundPlatform.width = 400;
+ platforms.push(groundPlatform);
+ game.addChild(groundPlatform);
+ // Random platforms
+ for (var i = 0; i < 8; i++) {
+ var platform = new Platform();
+ platform.x = Math.random() * 1600 + 200;
+ platform.y = 2400 - i * 250 - Math.random() * 100;
+ platform.width = 150 + Math.random() * 100;
+ platforms.push(platform);
+ game.addChild(platform);
+ }
+}
+function spawnEnemy() {
+ var enemy = new Enemy();
+ // Spawn from random edge
+ var side = Math.floor(Math.random() * 4);
+ switch (side) {
+ case 0:
+ // Top
+ enemy.x = Math.random() * 2048;
+ enemy.y = -30;
+ break;
+ case 1:
+ // Right
+ enemy.x = 2078;
+ enemy.y = Math.random() * 2732;
+ break;
+ case 2:
+ // Bottom
+ enemy.x = Math.random() * 2048;
+ enemy.y = 2762;
+ break;
+ case 3:
+ // Left
+ enemy.x = -30;
+ enemy.y = Math.random() * 2732;
+ break;
+ }
+ enemies.push(enemy);
+ game.addChild(enemy);
+}
+// Initialize game elements
+generatePlatforms();
+ninja.x = 1024;
+ninja.y = 2500;
+game.addChild(ninja);
+// Touch controls
+game.down = function (x, y, obj) {
+ // If touching near ninja, jump
+ var dx = x - ninja.x;
+ var dy = y - ninja.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance < 150) {
+ ninja.jump();
+ } else {
+ // Attack in direction of touch
+ ninja.attack(x, y);
+ }
+};
+game.update = function () {
+ // Spawn enemies
+ enemySpawnTimer++;
+ difficultyTimer++;
+ var spawnRate = Math.max(180 - Math.floor(difficultyTimer / 300), 60);
+ if (enemySpawnTimer >= spawnRate) {
+ spawnEnemy();
+ enemySpawnTimer = 0;
+ }
+ // Check projectile vs enemy collisions
+ for (var p = projectiles.length - 1; p >= 0; p--) {
+ var projectile = projectiles[p];
+ // Remove old projectiles
+ if (projectile.lifetime > 180 || projectile.x < -50 || projectile.x > 2098 || projectile.y < -50 || projectile.y > 2782) {
+ projectile.destroy();
+ projectiles.splice(p, 1);
+ continue;
+ }
+ // Check enemy hits
+ for (var e = enemies.length - 1; e >= 0; e--) {
+ var enemy = enemies[e];
+ if (projectile.intersects(enemy)) {
+ // Hit enemy
+ LK.setScore(LK.getScore() + 10);
+ scoreTxt.setText(LK.getScore());
+ LK.getSound('enemyHit').play();
+ LK.effects.flashObject(enemy, 0xffffff, 200);
+ enemy.destroy();
+ enemies.splice(e, 1);
+ projectile.destroy();
+ projectiles.splice(p, 1);
+ break;
+ }
+ }
+ }
+ // Check ninja vs enemy collisions
+ for (var e = enemies.length - 1; e >= 0; e--) {
+ var enemy = enemies[e];
+ if (ninja.intersects(enemy)) {
+ ninja.health--;
+ LK.effects.flashObject(ninja, 0xff0000, 500);
+ enemy.destroy();
+ enemies.splice(e, 1);
+ if (ninja.health <= 0) {
+ LK.showGameOver();
+ }
+ }
+ }
+ // Keep ninja on screen horizontally
+ if (ninja.x < 40) ninja.x = 40;
+ if (ninja.x > 2008) ninja.x = 2008;
+};
\ No newline at end of file
2d anime chibi style ninja hitam jepang. In-Game asset. 2d. High contrast. No shadows
2d anime image pemandangan gunung fuji jepang zaman kuno di kejauhan. wilayah hutan dan bukit bebatuan dari dekat. langit biru cerah. In-Game asset. 2d. High contrast. No shadows
2d anime chibi evil hitam jepang. In-Game asset. 2d. High contrast. No shadows
2d anime image tanah dan bebatuan. In-Game asset. 2d. High contrast. No shadows