User prompt
kule imlecin gittiği yöne dönsün. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
zombie çeşidi 6 olsun.
User prompt
alev oku isabet edince duman ve alev patlaması olsun. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
alev oku isabetlerinde patlama sesi olsun.
User prompt
ekrana dokunmadan ateş etmesin.
User prompt
üzerine dokunduğumuz düşmana ateş etsin .
User prompt
silahımızı ortadaki kuleye yerleştir.
User prompt
mermi hızını artır 3 kat
User prompt
kule ateşetsin
User prompt
silah menzilini 10 kat artır.
User prompt
kule silah menzilimizi 10 kat artır.
User prompt
Ekranda dokunduğumuz yere doğru silah kulemizden mermi atılsın..
User prompt
silahımız gelen zombilere, ekranda dokunduğumuz yere ateş etsin.
User prompt
6 tür zombi gelsin.
User prompt
Zombiler 6 çeşit olsun.
User prompt
100 bölüm oyun olsun.Her bölüm 5 dalga olsun .Her bölümde düşmanlarımız değişsin.
User prompt
silahımız dokunduğumuz düşmana dönsün. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
zoom iptal et
User prompt
Düşman kulemize yaklaştıkça silahımızın gücü artsın.
User prompt
silah kulemiz gelen düşmanlara dokundukça ateş etsin.
User prompt
uzaktan üzerimize gelen zombiler olsun.
User prompt
düşmanlar ekranın üstünden yürüyerek gelsin. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
karşımızda düşman olsun.Ekranın ortasından uzaklardan çıkarak silah kulemize doğru gelsin. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
silahımızın artı şeklinde hareket eden bir artıkıl ı olsun. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
zoom kaldır
/****
* Classes
****/
var SniperScope = Container.expand(function () {
var self = Container.call(this);
var scopeGraphics = self.attachAsset('scope', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 8,
scaleY: 8
});
var crosshairGraphics = self.attachAsset('crosshair', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.5,
scaleY: 0.5
});
self.lastIntersectingZombie = null;
self.shootCooldown = 0;
self.update = function () {
// Decrease shoot cooldown
if (self.shootCooldown > 0) {
self.shootCooldown--;
}
};
return self;
});
// Game variables
var Zombie = Container.expand(function (enemyType) {
var self = Container.call(this);
self.enemyType = enemyType || 'enemy';
var zombieGraphics = self.attachAsset(self.enemyType, {
anchorX: 0.5,
anchorY: 0.5
});
// Zombie properties - vary by enemy type
var speedMultiplier = 1;
var healthMultiplier = 1;
switch (self.enemyType) {
case 'soldier':
speedMultiplier = 1.2;
healthMultiplier = 1.5;
break;
case 'robot':
speedMultiplier = 0.8;
healthMultiplier = 2;
break;
case 'alien':
speedMultiplier = 1.5;
healthMultiplier = 1.2;
break;
}
self.speed = (2 + Math.random() * 3) * speedMultiplier; // Random speed between 2-5
self.health = Math.ceil(healthMultiplier);
self.maxHealth = self.health;
self.targetX = 1024; // Center of screen
self.targetY = 1366; // Center of screen
self.update = function () {
// Move towards player (center of screen)
var dx = self.targetX - self.x;
var dy = self.targetY - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 5) {
// Normalize and apply speed
self.x += dx / distance * self.speed;
self.y += dy / distance * self.speed;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
// Game variables
var zombies = [];
var score = 0;
var gameStarted = false;
var weaponPower = 1; // Base weapon power
var maxWeaponPower = 5; // Maximum weapon power
var currentLevel = 1;
var currentWave = 1;
var maxLevels = 100;
var maxWaves = 5;
var zombiesKilledThisWave = 0;
var zombiesNeededPerWave = 5;
var waveInProgress = false;
var enemyTypes = ['zombie', 'soldier', 'robot', 'alien'];
var currentEnemyType = 'zombie';
// Create battlefield background
var battlefield = game.addChild(LK.getAsset('background', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366
}));
// Create sniper scope
var scope = game.addChild(new SniperScope());
scope.x = 1024;
scope.y = 1366;
// Create score display
var scoreTxt = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0, 0);
scoreTxt.x = 50;
scoreTxt.y = 50;
LK.gui.topLeft.addChild(scoreTxt);
// Create level and wave display
var levelTxt = new Text2('Level: 1 Wave: 1', {
size: 50,
fill: 0xFFFFFF
});
levelTxt.anchor.set(0, 0);
levelTxt.x = 50;
levelTxt.y = 120;
LK.gui.topLeft.addChild(levelTxt);
// Function to start next wave
function startNextWave() {
waveInProgress = true;
zombiesKilledThisWave = 0;
// Determine enemy type based on level
var levelGroup = Math.floor((currentLevel - 1) / 25);
currentEnemyType = enemyTypes[Math.min(levelGroup, enemyTypes.length - 1)];
}
// Function to spawn enemy for current wave
function spawnEnemy() {
if (!waveInProgress) return;
var zombie = new Zombie(currentEnemyType);
// Spawn from random edges of the screen
var side = Math.floor(Math.random() * 4);
switch (side) {
case 0:
// Top
zombie.x = Math.random() * 2048;
zombie.y = -100;
break;
case 1:
// Right
zombie.x = 2148;
zombie.y = Math.random() * 2732;
break;
case 2:
// Bottom
zombie.x = Math.random() * 2048;
zombie.y = 2832;
break;
case 3:
// Left
zombie.x = -100;
zombie.y = Math.random() * 2732;
break;
}
zombie.lastX = zombie.x;
zombie.lastY = zombie.y;
zombie.lastIntersecting = false;
zombies.push(zombie);
game.addChild(zombie);
}
// Start first wave
startNextWave();
// Spawn enemies periodically
var spawnTimer = LK.setInterval(function () {
spawnEnemy();
}, 2000); // Spawn every 2 seconds
// Game event handlers
game.down = function (x, y, obj) {
// Check if clicked on a zombie
var hitZombie = false;
for (var i = zombies.length - 1; i >= 0; i--) {
var zombie = zombies[i];
var dx = zombie.x - x;
var dy = zombie.y - y;
var distance = Math.sqrt(dx * dx + dy * dy);
// Hit detection based on zombie size
var hitRadius = 40;
if (distance < hitRadius) {
// Hit! Create hit marker with size based on weapon power
var hitMarker = game.addChild(LK.getAsset('hitMarker', {
anchorX: 0.5,
anchorY: 0.5,
x: zombie.x,
y: zombie.y,
scaleX: weaponPower * 0.5,
scaleY: weaponPower * 0.5
}));
// Remove hit marker after short time
LK.setTimeout(function () {
hitMarker.destroy();
}, 200);
// Remove zombie
zombie.destroy();
zombies.splice(i, 1);
// Increase score based on weapon power
score += 10 * weaponPower;
zombiesKilledThisWave++;
scoreTxt.setText('Score: ' + score + ' | Power: ' + weaponPower);
levelTxt.setText('Level: ' + currentLevel + ' Wave: ' + currentWave);
hitZombie = true;
break;
}
}
};
// Main game update loop
game.update = function () {
// Check for automatic shooting when scope intersects with zombies
var currentIntersectingZombie = null;
for (var i = 0; i < zombies.length; i++) {
var zombie = zombies[i];
if (scope.intersects(zombie)) {
currentIntersectingZombie = zombie;
break;
}
}
// Calculate weapon power based on closest zombie distance
var closestDistance = Infinity;
for (var k = 0; k < zombies.length; k++) {
var zombie = zombies[k];
var dx = zombie.x - scope.x;
var dy = zombie.y - scope.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < closestDistance) {
closestDistance = distance;
}
}
// Update weapon power based on proximity (closer = more powerful)
if (closestDistance < 200) {
weaponPower = maxWeaponPower; // Maximum power when very close
} else if (closestDistance < 400) {
weaponPower = 4;
} else if (closestDistance < 600) {
weaponPower = 3;
} else if (closestDistance < 800) {
weaponPower = 2;
} else {
weaponPower = 1; // Base power when far
}
// Auto-shoot when intersecting with a zombie and cooldown is ready
if (currentIntersectingZombie && scope.shootCooldown <= 0) {
// Create hit marker with size based on weapon power
var hitMarker = game.addChild(LK.getAsset('hitMarker', {
anchorX: 0.5,
anchorY: 0.5,
x: currentIntersectingZombie.x,
y: currentIntersectingZombie.y,
scaleX: weaponPower * 0.5,
scaleY: weaponPower * 0.5
}));
// Remove hit marker after short time
LK.setTimeout(function () {
hitMarker.destroy();
}, 200);
// Play shooting sound
LK.getSound('shoot').play();
// Remove zombie from array and destroy
for (var j = zombies.length - 1; j >= 0; j--) {
if (zombies[j] === currentIntersectingZombie) {
currentIntersectingZombie.destroy();
zombies.splice(j, 1);
break;
}
}
// Increase score based on weapon power
score += 10 * weaponPower;
zombiesKilledThisWave++;
scoreTxt.setText('Score: ' + score + ' | Power: ' + weaponPower);
levelTxt.setText('Level: ' + currentLevel + ' Wave: ' + currentWave);
// Set cooldown to prevent rapid firing
scope.shootCooldown = 30; // 0.5 seconds at 60fps
}
// Update all zombies
for (var i = zombies.length - 1; i >= 0; i--) {
var zombie = zombies[i];
// Check if zombie reached center (player position)
var dx = zombie.x - 1024;
var dy = zombie.y - 1366;
var distanceToCenter = Math.sqrt(dx * dx + dy * dy);
if (distanceToCenter < 50) {
// Game over - zombie reached player
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
}
// Remove zombies that are too far (cleanup)
if (zombie.x < -200 || zombie.x > 2248 || zombie.y < -200 || zombie.y > 2932) {
zombie.destroy();
zombies.splice(i, 1);
}
}
// Check wave completion
if (waveInProgress && zombiesKilledThisWave >= zombiesNeededPerWave && zombies.length === 0) {
waveInProgress = false;
currentWave++;
// Check if completed all waves in level
if (currentWave > maxWaves) {
currentWave = 1;
currentLevel++;
zombiesNeededPerWave += 2; // Increase difficulty
}
// Check if completed all levels
if (currentLevel > maxLevels) {
LK.showYouWin();
return;
}
// Start next wave after short delay
LK.setTimeout(function () {
startNextWave();
}, 1000);
}
// Win condition - complete all 100 levels
if (currentLevel > maxLevels) {
LK.showYouWin();
}
}; ===================================================================
--- original.js
+++ change.js
@@ -1,10 +1,5 @@
/****
-* Plugins
-****/
-var tween = LK.import("@upit/tween.v1");
-
-/****
* Classes
****/
var SniperScope = Container.expand(function () {
var self = Container.call(this);
@@ -27,33 +22,38 @@
if (self.shootCooldown > 0) {
self.shootCooldown--;
}
};
- self.rotateToTarget = function (targetX, targetY) {
- // Calculate angle to target
- var dx = targetX - self.x;
- var dy = targetY - self.y;
- var targetRotation = Math.atan2(dy, dx);
- // Smooth rotation using tween
- tween(self, {
- rotation: targetRotation
- }, {
- duration: 200,
- easing: tween.easeOut
- });
- };
return self;
});
// Game variables
-var Zombie = Container.expand(function () {
+var Zombie = Container.expand(function (enemyType) {
var self = Container.call(this);
- var zombieGraphics = self.attachAsset('enemy', {
+ self.enemyType = enemyType || 'enemy';
+ var zombieGraphics = self.attachAsset(self.enemyType, {
anchorX: 0.5,
anchorY: 0.5
});
- // Zombie properties
- self.speed = 2 + Math.random() * 3; // Random speed between 2-5
- self.health = 1;
+ // Zombie properties - vary by enemy type
+ var speedMultiplier = 1;
+ var healthMultiplier = 1;
+ switch (self.enemyType) {
+ case 'soldier':
+ speedMultiplier = 1.2;
+ healthMultiplier = 1.5;
+ break;
+ case 'robot':
+ speedMultiplier = 0.8;
+ healthMultiplier = 2;
+ break;
+ case 'alien':
+ speedMultiplier = 1.5;
+ healthMultiplier = 1.2;
+ break;
+ }
+ self.speed = (2 + Math.random() * 3) * speedMultiplier; // Random speed between 2-5
+ self.health = Math.ceil(healthMultiplier);
+ self.maxHealth = self.health;
self.targetX = 1024; // Center of screen
self.targetY = 1366; // Center of screen
self.update = function () {
// Move towards player (center of screen)
@@ -84,8 +84,17 @@
var score = 0;
var gameStarted = false;
var weaponPower = 1; // Base weapon power
var maxWeaponPower = 5; // Maximum weapon power
+var currentLevel = 1;
+var currentWave = 1;
+var maxLevels = 100;
+var maxWaves = 5;
+var zombiesKilledThisWave = 0;
+var zombiesNeededPerWave = 5;
+var waveInProgress = false;
+var enemyTypes = ['zombie', 'soldier', 'robot', 'alien'];
+var currentEnemyType = 'zombie';
// Create battlefield background
var battlefield = game.addChild(LK.getAsset('background', {
anchorX: 0.5,
anchorY: 0.5,
@@ -104,11 +113,29 @@
scoreTxt.anchor.set(0, 0);
scoreTxt.x = 50;
scoreTxt.y = 50;
LK.gui.topLeft.addChild(scoreTxt);
-// Spawn zombies periodically
-var spawnTimer = LK.setInterval(function () {
- var zombie = new Zombie();
+// Create level and wave display
+var levelTxt = new Text2('Level: 1 Wave: 1', {
+ size: 50,
+ fill: 0xFFFFFF
+});
+levelTxt.anchor.set(0, 0);
+levelTxt.x = 50;
+levelTxt.y = 120;
+LK.gui.topLeft.addChild(levelTxt);
+// Function to start next wave
+function startNextWave() {
+ waveInProgress = true;
+ zombiesKilledThisWave = 0;
+ // Determine enemy type based on level
+ var levelGroup = Math.floor((currentLevel - 1) / 25);
+ currentEnemyType = enemyTypes[Math.min(levelGroup, enemyTypes.length - 1)];
+}
+// Function to spawn enemy for current wave
+function spawnEnemy() {
+ if (!waveInProgress) return;
+ var zombie = new Zombie(currentEnemyType);
// Spawn from random edges of the screen
var side = Math.floor(Math.random() * 4);
switch (side) {
case 0:
@@ -136,8 +163,14 @@
zombie.lastY = zombie.y;
zombie.lastIntersecting = false;
zombies.push(zombie);
game.addChild(zombie);
+}
+// Start first wave
+startNextWave();
+// Spawn enemies periodically
+var spawnTimer = LK.setInterval(function () {
+ spawnEnemy();
}, 2000); // Spawn every 2 seconds
// Game event handlers
game.down = function (x, y, obj) {
// Check if clicked on a zombie
@@ -149,10 +182,8 @@
var distance = Math.sqrt(dx * dx + dy * dy);
// Hit detection based on zombie size
var hitRadius = 40;
if (distance < hitRadius) {
- // Rotate weapon to target the touched zombie
- scope.rotateToTarget(zombie.x, zombie.y);
// Hit! Create hit marker with size based on weapon power
var hitMarker = game.addChild(LK.getAsset('hitMarker', {
anchorX: 0.5,
anchorY: 0.5,
@@ -169,9 +200,11 @@
zombie.destroy();
zombies.splice(i, 1);
// Increase score based on weapon power
score += 10 * weaponPower;
+ zombiesKilledThisWave++;
scoreTxt.setText('Score: ' + score + ' | Power: ' + weaponPower);
+ levelTxt.setText('Level: ' + currentLevel + ' Wave: ' + currentWave);
hitZombie = true;
break;
}
}
@@ -211,10 +244,8 @@
weaponPower = 1; // Base power when far
}
// Auto-shoot when intersecting with a zombie and cooldown is ready
if (currentIntersectingZombie && scope.shootCooldown <= 0) {
- // Rotate weapon to target the intersecting zombie
- scope.rotateToTarget(currentIntersectingZombie.x, currentIntersectingZombie.y);
// Create hit marker with size based on weapon power
var hitMarker = game.addChild(LK.getAsset('hitMarker', {
anchorX: 0.5,
anchorY: 0.5,
@@ -238,9 +269,11 @@
}
}
// Increase score based on weapon power
score += 10 * weaponPower;
+ zombiesKilledThisWave++;
scoreTxt.setText('Score: ' + score + ' | Power: ' + weaponPower);
+ levelTxt.setText('Level: ' + currentLevel + ' Wave: ' + currentWave);
// Set cooldown to prevent rapid firing
scope.shootCooldown = 30; // 0.5 seconds at 60fps
}
// Update all zombies
@@ -261,9 +294,29 @@
zombie.destroy();
zombies.splice(i, 1);
}
}
- // Win condition - survive long enough or kill enough zombies
- if (score >= 100) {
+ // Check wave completion
+ if (waveInProgress && zombiesKilledThisWave >= zombiesNeededPerWave && zombies.length === 0) {
+ waveInProgress = false;
+ currentWave++;
+ // Check if completed all waves in level
+ if (currentWave > maxWaves) {
+ currentWave = 1;
+ currentLevel++;
+ zombiesNeededPerWave += 2; // Increase difficulty
+ }
+ // Check if completed all levels
+ if (currentLevel > maxLevels) {
+ LK.showYouWin();
+ return;
+ }
+ // Start next wave after short delay
+ LK.setTimeout(function () {
+ startNextWave();
+ }, 1000);
+ }
+ // Win condition - complete all 100 levels
+ if (currentLevel > maxLevels) {
LK.showYouWin();
}
};
\ No newline at end of file
hareketli silah. In-Game asset. 2d. High contrast. No shadows
duman. In-Game asset. 2d. High contrast. No shadows
zombie. In-Game asset. 2d. High contrast. No shadows
dinazor. In-Game asset. 2d. High contrast. No shadows
kuş bakışı silahlı kule.. In-Game asset. 2d. High contrast. No shadows
dairesel mevzi.. In-Game asset. 2d. High contrast. No shadows
roket namlusu kuş bakışı ,üstten görünüm.. In-Game asset. 2d. High contrast. No shadows
patlama efekti alev duman. In-Game asset. 2d. High contrast. No shadows