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;
// 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) {
return 6 + (wave - 1) * 1.2;
}
function getEnemiesPerWave(wave) {
return 5 + (wave - 1) * 2;
}
// 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(CENTER_X, CENTER_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");
spawnTimer = LK.setInterval(function () {
if (enemiesSpawned < enemiesPerWave) {
spawnEnemy();
}
if (enemiesSpawned >= enemiesPerWave) {
LK.clearInterval(spawnTimer);
}
}, 600 - Math.min(400, (wave - 1) * 40));
}
// 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) {
var dx = enemy.x - CENTER_X;
var dy = enemy.y - CENTER_Y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist < 90) {
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
@@ -1,6 +1,343 @@
-/****
+/****
+* 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: 0x000000
-});
\ No newline at end of file
+ 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;
+// 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) {
+ return 6 + (wave - 1) * 1.2;
+}
+function getEnemiesPerWave(wave) {
+ return 5 + (wave - 1) * 2;
+}
+// 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(CENTER_X, CENTER_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");
+ spawnTimer = LK.setInterval(function () {
+ if (enemiesSpawned < enemiesPerWave) {
+ spawnEnemy();
+ }
+ if (enemiesSpawned >= enemiesPerWave) {
+ LK.clearInterval(spawnTimer);
+ }
+ }, 600 - Math.min(400, (wave - 1) * 40));
+}
+// 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) {
+ var dx = enemy.x - CENTER_X;
+ var dy = enemy.y - CENTER_Y;
+ var dist = Math.sqrt(dx * dx + dy * dy);
+ if (dist < 90) {
+ 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();
\ No newline at end of file