User prompt
Ortaya da ana karakteri köy yani bizi düşmanlar bize gelmeye çalışsın
User prompt
Ve ilk dalgalarda düşman sayısı daha az olsun sonradan artsın
User prompt
İlk turlarda yavaş gelsin düşmanlar sonra hızlansın
Code edit (1 edits merged)
Please save this source code
User prompt
Keskin Nişancı: Birinci Şahıs Savunma
Initial prompt
Keskin nişancı oyunu yap düşmanlar gelsin onlara ateş edelim ve birinci şahıstan oynansın
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Crosshair class var Crosshair = Container.expand(function () { var self = Container.call(this); var cross = self.attachAsset('crosshair', { anchorX: 0.5, anchorY: 0.5 }); cross.alpha = 0.5; // Muzzle flash var muzzle = self.attachAsset('muzzle', { anchorX: 0.5, anchorY: 0.5, x: 0, y: 0 }); muzzle.visible = false; // Show muzzle flash self.flash = function () { muzzle.visible = true; muzzle.alpha = 1; tween(muzzle, { alpha: 0 }, { duration: 120, easing: tween.linear, onFinish: function onFinish() { muzzle.visible = false; } }); }; 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 }); // Speed and direction self.speed = 6; self.dx = 0; self.dy = 0; self.radius = enemySprite.width * 0.5; // For hit detection self.isAlive = true; // For wave/difficulty self.wave = 1; // Set movement vector towards center self.setTarget = function (tx, ty) { var dx = tx - self.x; var dy = ty - self.y; var dist = Math.sqrt(dx * dx + dy * dy); if (dist === 0) { self.dx = 0; self.dy = self.speed; } else { self.dx = dx / dist * self.speed; self.dy = dy / dist * self.speed; } }; // Called every tick self.update = function () { if (!self.isAlive) return; self.x += self.dx; self.y += self.dy; }; // Flash when hit self.flash = function () { tween(self, { alpha: 0.2 }, { duration: 60, easing: tween.linear, onFinish: function onFinish() { tween(self, { alpha: 1 }, { duration: 120, easing: tween.linear }); } }); }; // Destroy enemy self.kill = function () { self.isAlive = false; self.visible = false; self.destroy(); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x181c1f }); /**** * Game Code ****/ // Background music // Miss sound // Enemy destroyed sound // Shot sound // Muzzle flash: Ellipse, orange // Crosshair: Box, yellow // Enemy: Ellipse, red // Game area var GAME_W = 2048; var GAME_H = 2732; // Center point var CENTER_X = GAME_W / 2; var CENTER_Y = GAME_H / 2; // Main character (village) at center var village = LK.getAsset('character', { anchorX: 0.5, anchorY: 0.5, x: CENTER_X, y: CENTER_Y }); game.addChild(village); // Score display var scoreTxt = new Text2('0', { size: 120, fill: "#fff" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Wave display var waveTxt = new Text2('1. Dalga', { size: 70, fill: 0xFFE066 }); waveTxt.anchor.set(0.5, 0); LK.gui.top.addChild(waveTxt); waveTxt.y = 120; // Crosshair var crosshair = new Crosshair(); game.addChild(crosshair); crosshair.x = CENTER_X; crosshair.y = CENTER_Y; // Enemy array var enemies = []; // For drag/aim var isAiming = false; // Game state var wave = 1; var enemiesPerWave = 5; var enemiesSpawned = 0; var enemiesKilled = 0; var waveInProgress = false; var spawnTimer = null; var nextWaveTimeout = null; var gameOver = false; // Difficulty scaling function getEnemySpeed(wave) { // Early waves are slow, then speed up more after wave 5 if (wave <= 3) { return 5 + (wave - 1) * 0.8; } else if (wave <= 7) { return 7 + (wave - 4) * 1.5; } else { return 13 + (wave - 8) * 2.2; } } function getEnemiesPerWave(wave) { // Early waves: fewer enemies, then increase more rapidly if (wave <= 2) { return 4 + (wave - 1) * 1; // 4, 5 } else if (wave <= 5) { return 6 + (wave - 3) * 2; // 6, 8, 10 } else if (wave <= 8) { return 12 + (wave - 6) * 3; // 12, 15, 18 } else { return 22 + (wave - 9) * 4; // 22, 26, 30, ... } } // Spawn enemy at random edge, moving toward center function spawnEnemy() { var edge = Math.floor(Math.random() * 4); // 0:top, 1:right, 2:bottom, 3:left var ex, ey; var margin = 120; if (edge === 0) { // top ex = margin + Math.random() * (GAME_W - 2 * margin); ey = -100; } else if (edge === 1) { // right ex = GAME_W + 100; ey = margin + Math.random() * (GAME_H - 2 * margin); } else if (edge === 2) { // bottom ex = margin + Math.random() * (GAME_W - 2 * margin); ey = GAME_H + 100; } else { // left ex = -100; ey = margin + Math.random() * (GAME_H - 2 * margin); } var enemy = new Enemy(); enemy.x = ex; enemy.y = ey; enemy.speed = getEnemySpeed(wave); enemy.wave = wave; enemy.setTarget(village.x, village.y); enemies.push(enemy); game.addChild(enemy); enemiesSpawned++; } // Start a wave function startWave() { waveInProgress = true; enemiesPerWave = getEnemiesPerWave(wave); enemiesSpawned = 0; enemiesKilled = 0; waveTxt.setText(wave + ". Dalga"); // Calculate spawn interval: slow at first, then faster var spawnInterval; if (wave <= 3) { spawnInterval = 700 - (wave - 1) * 100; } else if (wave <= 7) { spawnInterval = 400 - (wave - 4) * 40; } else { spawnInterval = 240 - (wave - 8) * 20; } spawnInterval = Math.max(100, spawnInterval); spawnTimer = LK.setInterval(function () { if (enemiesSpawned < enemiesPerWave) { spawnEnemy(); } if (enemiesSpawned >= enemiesPerWave) { LK.clearInterval(spawnTimer); } }, spawnInterval); } // End wave, start next after delay function endWave() { waveInProgress = false; nextWaveTimeout = LK.setTimeout(function () { wave++; startWave(); }, 1200); } // Reset game state function resetGame() { for (var i = enemies.length - 1; i >= 0; i--) { enemies[i].kill(); enemies.splice(i, 1); } wave = 1; LK.setScore(0); scoreTxt.setText('0'); waveTxt.setText('1. Dalga'); gameOver = false; if (spawnTimer) LK.clearInterval(spawnTimer); if (nextWaveTimeout) LK.clearTimeout(nextWaveTimeout); startWave(); } // Check if enemy reached center (game over) function checkEnemyReachedCenter(enemy) { // Use intersects to check if enemy reached the village if (enemy.intersects(village)) { return true; } return false; } // Check if point (x, y) hits enemy (circle hitbox) function isHit(enemy, x, y) { var dx = enemy.x - x; var dy = enemy.y - y; var r = enemy.radius * 0.95; return dx * dx + dy * dy <= r * r; } // Handle shooting function shootAt(x, y) { if (gameOver) return; crosshair.flash(); LK.getSound('shot').play(); // Find closest enemy under crosshair var hitEnemy = null; var minDist = 99999; for (var i = 0; i < enemies.length; i++) { var enemy = enemies[i]; if (!enemy.isAlive) continue; if (isHit(enemy, x, y)) { var dx = enemy.x - x; var dy = enemy.y - y; var dist = dx * dx + dy * dy; if (dist < minDist) { minDist = dist; hitEnemy = enemy; } } } if (hitEnemy) { hitEnemy.flash(); hitEnemy.kill(); LK.getSound('enemyDown').play(); LK.setScore(LK.getScore() + 1); scoreTxt.setText(LK.getScore()); enemiesKilled++; // Remove from array for (var j = 0; j < enemies.length; j++) { if (enemies[j] === hitEnemy) { enemies.splice(j, 1); break; } } // If all enemies killed, end wave if (enemiesKilled >= enemiesPerWave && enemiesSpawned >= enemiesPerWave) { endWave(); } } else { LK.getSound('miss').play(); } } // Move crosshair with drag/tap function handleMove(x, y, obj) { if (gameOver) return; // Clamp inside game area var nx = Math.max(60, Math.min(GAME_W - 60, x)); var ny = Math.max(60, Math.min(GAME_H - 60, y)); crosshair.x = nx; crosshair.y = ny; } game.move = handleMove; // Touch down: aim and shoot game.down = function (x, y, obj) { if (gameOver) return; isAiming = true; handleMove(x, y, obj); shootAt(crosshair.x, crosshair.y); }; game.up = function (x, y, obj) { isAiming = false; }; // Main update loop game.update = function () { if (gameOver) return; // Update enemies for (var i = enemies.length - 1; i >= 0; i--) { var enemy = enemies[i]; enemy.update(); if (!enemy.isAlive) continue; // Check if reached center if (checkEnemyReachedCenter(enemy)) { // Game over gameOver = true; LK.effects.flashScreen(0xff0000, 900); LK.showGameOver(); return; } } }; // Start music LK.playMusic('bgmusic', { fade: { start: 0, end: 1, duration: 800 } }); // Start game resetGame();
===================================================================
--- original.js
+++ change.js
@@ -121,8 +121,16 @@
var GAME_H = 2732;
// Center point
var CENTER_X = GAME_W / 2;
var CENTER_Y = GAME_H / 2;
+// Main character (village) at center
+var village = LK.getAsset('character', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: CENTER_X,
+ y: CENTER_Y
+});
+game.addChild(village);
// Score display
var scoreTxt = new Text2('0', {
size: 120,
fill: "#fff"
@@ -204,9 +212,9 @@
enemy.x = ex;
enemy.y = ey;
enemy.speed = getEnemySpeed(wave);
enemy.wave = wave;
- enemy.setTarget(CENTER_X, CENTER_Y);
+ enemy.setTarget(village.x, village.y);
enemies.push(enemy);
game.addChild(enemy);
enemiesSpawned++;
}
@@ -260,12 +268,10 @@
startWave();
}
// Check if enemy reached center (game over)
function checkEnemyReachedCenter(enemy) {
- var dx = enemy.x - CENTER_X;
- var dy = enemy.y - CENTER_Y;
- var dist = Math.sqrt(dx * dx + dy * dy);
- if (dist < 90) {
+ // Use intersects to check if enemy reached the village
+ if (enemy.intersects(village)) {
return true;
}
return false;
}