User prompt
scoreboard koy düşman öldürdükçe artsın karakter ölünce sıfırlansın ve
User prompt
durduk yere ölüyorum fixle
User prompt
ana karakter patlamalardan ve üstünde doğan düşmanlardan etilenmesin ve her düşman patlamasın arada random olarak çıksın
User prompt
git gide düşmanları hızlandır ve toplu düşman yerlerinde bir düşman öldüğü zaman patlayıp etrafındakileri de patlatsın ana karakterimizi de tek vuruşta ölecek şekilde ayarlama biraz daha kaçabilecek canımız olsun ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
ateş hızıyla düşmanlar doğru orantılı olacak
User prompt
hala ateş edildikçe canları azamıyor düşmanların
User prompt
oyun çöktü bu kadar fazla düşman yapma
User prompt
düşmanların hızını ilk başlangıçta düşür sonradan da her ölen bir düşman sonunda yeni +1 düşman spawn olup karakteri kovalamaya başlasın. Bu durum ilerledikçe mermilerin atış hızı yavaş yavaş hızlanacak ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
düşmanların canı %100 ile başlayacak her mermi isabet ettiğinde %25 azlacak
User prompt
mermi isabet ettikçe canı azalsın isityorum isabet ediyor canları gitmiyor
User prompt
mermi isabet edince düşmanın canı azalmıyor
User prompt
ateş edildikçe ateş edilen düşmanın canı azamaya başlaşın ilk mermi dokunmasından sonra ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
düşmanlar farklı yerlerden gelecek ve ana karakter en yakına ateş edecek merminin gittiğini de efekt olarak görmek istiyorum ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
yakın uzak farket etmez silahla ateş edecek ana karakter ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
düşmanlara ateş edecek ana karakter ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
düşmanlar üstümüze gelmeye devam edecek sadece otomatik düşmanlara ateş edecek ve ateş efekti çıkacak onlar da bize ateş etsin ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
bir de otomatik ateş etsin her kaçtığımızda ve düşmanlar da aynı yerden gelmek yerine random hareket etsin ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
tamam mouse la hareket ettirmek yerine bastığımız yere gitsin ↪💡 Consider importing and using the following plugins: @upit/tween.v1
Code edit (1 edits merged)
Please save this source code
User prompt
Arena Clash PvP
Initial prompt
Basit bir 2D web tabanlı arena PvP oyunu yap. Oyuncular yukarı, aşağı, sola, sağa hareket edebilsin. Her oyuncunun canı olsun. Saldırı yapabilsinler. Biri ölünce birkaç saniye sonra yeniden doğsun. Oyun HTML5 ve JavaScript ile tarayıcıda çalışsın.
/**** * 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 }); var healthBarBg = self.attachAsset('healthBarBg', { anchorX: 0.5, anchorY: 0.5, x: 0, y: -60 }); var healthBar = self.attachAsset('healthBar', { anchorX: 0.5, anchorY: 0.5, x: 0, y: -60 }); self.maxHealth = 100; self.health = 100; self.speed = 6; self.attackRange = 100; self.attackDamage = 20; self.attackCooldown = 0; self.isRespawning = false; self.respawnTimer = 0; self.aiTimer = 0; self.targetX = 0; self.targetY = 0; self.takeDamage = function (damage) { if (self.isRespawning) return; self.health -= damage; if (self.health < 0) self.health = 0; self.updateHealthBar(); // Flash red when taking damage tween(enemyGraphics, { tint: 0xFF0000 }, { duration: 200, onFinish: function onFinish() { tween(enemyGraphics, { tint: 0xFFFFFF }, { duration: 200 }); } }); if (self.health <= 0) { self.die(); } LK.getSound('hit').play(); }; self.updateHealthBar = function () { var healthPercent = self.health / self.maxHealth; healthBar.scaleX = healthPercent; if (healthPercent > 0.6) { healthBar.tint = 0x00FF00; } else if (healthPercent > 0.3) { healthBar.tint = 0xFFFF00; } else { healthBar.tint = 0xFF0000; } }; self.die = function () { self.isRespawning = true; self.respawnTimer = 180; // 3 seconds at 60fps enemyGraphics.alpha = 0.3; healthBar.visible = false; healthBarBg.visible = false; }; self.respawn = function () { self.health = self.maxHealth; self.isRespawning = false; self.respawnTimer = 0; enemyGraphics.alpha = 1; healthBar.visible = true; healthBarBg.visible = true; self.updateHealthBar(); // Respawn at random position self.x = 300 + Math.random() * 1400; self.y = 400 + Math.random() * 1800; LK.getSound('respawn').play(); }; self.attack = function () { if (self.attackCooldown > 0 || self.isRespawning) return; self.attackCooldown = 90; // 1.5 second cooldown // Create attack effect var attackEffect = LK.getAsset('attackEffect', { anchorX: 0.5, anchorY: 0.5 }); attackEffect.x = self.x; attackEffect.y = self.y; attackEffect.alpha = 0.7; attackEffect.tint = 0xFF4444; game.addChild(attackEffect); // Scale and fade out attack effect tween(attackEffect, { scaleX: 1.5, scaleY: 1.5, alpha: 0 }, { duration: 300, onFinish: function onFinish() { attackEffect.destroy(); } }); // Check for hits on player if (!player.isRespawning) { var distance = Math.sqrt(Math.pow(player.x - self.x, 2) + Math.pow(player.y - self.y, 2)); if (distance <= self.attackRange) { player.takeDamage(self.attackDamage); } } LK.getSound('attack').play(); }; self.update = function () { if (self.attackCooldown > 0) { self.attackCooldown--; } if (self.isRespawning) { self.respawnTimer--; if (self.respawnTimer <= 0) { self.respawn(); } return; } // Random AI - move randomly and attack when close to player self.aiTimer++; if (self.aiTimer >= 60) { // Update AI every 1 second self.aiTimer = 0; // Choose random direction and distance var angle = Math.random() * Math.PI * 2; var distance = 100 + Math.random() * 200; // Random distance between 100-300 self.targetX = self.x + Math.cos(angle) * distance; self.targetY = self.y + Math.sin(angle) * distance; // Keep targets in bounds self.targetX = Math.max(150, Math.min(1898, self.targetX)); self.targetY = Math.max(150, Math.min(2582, self.targetY)); } // Check if close to player for attack if (!player.isRespawning) { var dx = player.x - self.x; var dy = player.y - self.y; var playerDistance = Math.sqrt(dx * dx + dy * dy); if (playerDistance <= self.attackRange) { // Attack if close enough to player self.attack(); } } // Move towards target if (self.targetX !== self.x) { var moveX = self.targetX - self.x; if (Math.abs(moveX) > self.speed) { self.x += moveX > 0 ? self.speed : -self.speed; } else { self.x = self.targetX; } } if (self.targetY !== self.y) { var moveY = self.targetY - self.y; if (Math.abs(moveY) > self.speed) { self.y += moveY > 0 ? self.speed : -self.speed; } else { self.y = self.targetY; } } // Keep enemy in bounds if (self.x < 150) self.x = 150; if (self.x > 1898) self.x = 1898; if (self.y < 150) self.y = 150; if (self.y > 2582) self.y = 2582; }; return self; }); var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); var healthBarBg = self.attachAsset('healthBarBg', { anchorX: 0.5, anchorY: 0.5, x: 0, y: -60 }); var healthBar = self.attachAsset('healthBar', { anchorX: 0.5, anchorY: 0.5, x: 0, y: -60 }); self.maxHealth = 100; self.health = 100; self.speed = 8; self.attackRange = 100; self.attackDamage = 25; self.attackCooldown = 0; self.isRespawning = false; self.respawnTimer = 0; self.takeDamage = function (damage) { if (self.isRespawning) return; self.health -= damage; if (self.health < 0) self.health = 0; self.updateHealthBar(); // Flash red when taking damage tween(playerGraphics, { tint: 0xFF0000 }, { duration: 200, onFinish: function onFinish() { tween(playerGraphics, { tint: 0xFFFFFF }, { duration: 200 }); } }); if (self.health <= 0) { self.die(); } LK.getSound('hit').play(); }; self.updateHealthBar = function () { var healthPercent = self.health / self.maxHealth; healthBar.scaleX = healthPercent; if (healthPercent > 0.6) { healthBar.tint = 0x00FF00; } else if (healthPercent > 0.3) { healthBar.tint = 0xFFFF00; } else { healthBar.tint = 0xFF0000; } }; self.die = function () { self.isRespawning = true; self.respawnTimer = 180; // 3 seconds at 60fps playerGraphics.alpha = 0.3; healthBar.visible = false; healthBarBg.visible = false; }; self.respawn = function () { self.health = self.maxHealth; self.isRespawning = false; self.respawnTimer = 0; playerGraphics.alpha = 1; healthBar.visible = true; healthBarBg.visible = true; self.updateHealthBar(); // Respawn at random position self.x = 300 + Math.random() * 1400; self.y = 400 + Math.random() * 1800; LK.getSound('respawn').play(); }; self.attack = function () { if (self.attackCooldown > 0 || self.isRespawning) return; self.attackCooldown = 60; // 1 second cooldown // Create attack effect var attackEffect = LK.getAsset('attackEffect', { anchorX: 0.5, anchorY: 0.5 }); attackEffect.x = self.x; attackEffect.y = self.y; attackEffect.alpha = 0.7; game.addChild(attackEffect); // Scale and fade out attack effect tween(attackEffect, { scaleX: 1.5, scaleY: 1.5, alpha: 0 }, { duration: 300, onFinish: function onFinish() { attackEffect.destroy(); } }); // Check for hits on enemies for (var i = 0; i < enemies.length; i++) { var enemy = enemies[i]; if (!enemy.isRespawning) { var distance = Math.sqrt(Math.pow(enemy.x - self.x, 2) + Math.pow(enemy.y - self.y, 2)); if (distance <= self.attackRange) { enemy.takeDamage(self.attackDamage); } } } LK.getSound('attack').play(); }; self.update = function () { if (self.attackCooldown > 0) { self.attackCooldown--; } if (self.isRespawning) { self.respawnTimer--; if (self.respawnTimer <= 0) { self.respawn(); } } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2C3E50 }); /**** * Game Code ****/ // Create arena background var arena = game.addChild(LK.getAsset('arena', { anchorX: 0.5, anchorY: 0.5 })); arena.x = 2048 / 2; arena.y = 2732 / 2; // Game variables var player; var enemies = []; var moveUp = false; var moveDown = false; var moveLeft = false; var moveRight = false; var targetX = 0; var targetY = 0; var isMovingToTarget = false; // Create player player = game.addChild(new Player()); player.x = 500; player.y = 1000; // Create enemies for (var i = 0; i < 3; i++) { var enemy = game.addChild(new Enemy()); enemy.x = 800 + i * 300; enemy.y = 800 + i * 200; enemy.targetX = enemy.x; enemy.targetY = enemy.y; enemies.push(enemy); } // UI Elements var instructionText = new Text2('Tap anywhere to move and attack', { size: 40, fill: 0xFFFFFF }); instructionText.anchor.set(0.5, 0); LK.gui.top.addChild(instructionText); instructionText.y = 100; var dragNode = null; var lastTouchTime = 0; // Touch controls game.down = function (x, y, obj) { if (player.isRespawning) return; // Keep target position in bounds targetX = Math.max(150, Math.min(1898, x)); targetY = Math.max(150, Math.min(2582, y)); // Stop any current movement tween tween.stop(player, { x: true, y: true }); // Calculate distance for duration (closer = faster) var distance = Math.sqrt(Math.pow(targetX - player.x, 2) + Math.pow(targetY - player.y, 2)); var duration = Math.max(200, Math.min(1000, distance * 2)); // 200ms to 1000ms based on distance isMovingToTarget = true; // Tween player to target position tween(player, { x: targetX, y: targetY }, { duration: duration, easing: tween.easeOut, onFinish: function onFinish() { isMovingToTarget = false; // Automatically attack when reaching target position player.attack(); } }); }; game.move = function (x, y, obj) { // No drag movement needed - player moves via tween to clicked position }; game.up = function (x, y, obj) { // No action needed - player auto-attacks when moving }; // Main game loop game.update = function () { // Update all game objects player.update(); for (var i = 0; i < enemies.length; i++) { enemies[i].update(); } };
===================================================================
--- original.js
+++ change.js
@@ -132,25 +132,30 @@
self.respawn();
}
return;
}
- // Simple AI - move towards player and attack when close
+ // Random AI - move randomly and attack when close to player
self.aiTimer++;
- if (self.aiTimer >= 30) {
- // Update AI every 0.5 seconds
+ if (self.aiTimer >= 60) {
+ // Update AI every 1 second
self.aiTimer = 0;
- if (!player.isRespawning) {
- var dx = player.x - self.x;
- var dy = player.y - self.y;
- var distance = Math.sqrt(dx * dx + dy * dy);
- if (distance > self.attackRange) {
- // Move towards player
- self.targetX = self.x + dx / distance * self.speed * 5;
- self.targetY = self.y + dy / distance * self.speed * 5;
- } else {
- // Attack if close enough
- self.attack();
- }
+ // Choose random direction and distance
+ var angle = Math.random() * Math.PI * 2;
+ var distance = 100 + Math.random() * 200; // Random distance between 100-300
+ self.targetX = self.x + Math.cos(angle) * distance;
+ self.targetY = self.y + Math.sin(angle) * distance;
+ // Keep targets in bounds
+ self.targetX = Math.max(150, Math.min(1898, self.targetX));
+ self.targetY = Math.max(150, Math.min(2582, self.targetY));
+ }
+ // Check if close to player for attack
+ if (!player.isRespawning) {
+ var dx = player.x - self.x;
+ var dy = player.y - self.y;
+ var playerDistance = Math.sqrt(dx * dx + dy * dy);
+ if (playerDistance <= self.attackRange) {
+ // Attack if close enough to player
+ self.attack();
}
}
// Move towards target
if (self.targetX !== self.x) {
@@ -379,17 +384,18 @@
duration: duration,
easing: tween.easeOut,
onFinish: function onFinish() {
isMovingToTarget = false;
+ // Automatically attack when reaching target position
+ player.attack();
}
});
};
game.move = function (x, y, obj) {
// No drag movement needed - player moves via tween to clicked position
};
game.up = function (x, y, obj) {
- // Attack when releasing touch
- player.attack();
+ // No action needed - player auto-attacks when moving
};
// Main game loop
game.update = function () {
// Update all game objects
bullet. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Face. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
face. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
green hearth. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Grey gound . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat