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 Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('attackEffect', {
anchorX: 0.5,
anchorY: 0.5
});
bulletGraphics.scaleX = 0.5;
bulletGraphics.scaleY = 0.5;
self.speed = 15;
self.targetX = 0;
self.targetY = 0;
self.damage = 0;
self.isPlayerBullet = true;
self.update = function () {
var dx = self.targetX - self.x;
var dy = self.targetY - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < self.speed) {
// Hit target - check for direct collision with enemies/player
if (self.isPlayerBullet) {
// Check collision with all enemies
for (var i = 0; i < enemies.length; i++) {
if (!enemies[i].isRespawning && self.intersects(enemies[i])) {
enemies[i].takeDamage(self.damage);
self.destroy();
return;
}
}
} else {
// Enemy bullet hitting player
if (!player.isRespawning && self.intersects(player)) {
player.takeDamage(self.damage);
self.destroy();
return;
}
}
// If no collision but reached target, destroy bullet
self.destroy();
return;
}
// Move towards target
var moveX = dx / distance * self.speed;
var moveY = dy / distance * self.speed;
self.x += moveX;
self.y += moveY;
// Remove if out of bounds
if (self.x < 0 || self.x > 2048 || self.y < 0 || self.y > 2732) {
self.destroy();
}
};
return self;
});
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;
// Each bullet hit reduces health by 25%
self.health -= 25;
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
if (!player.isRespawning) {
// Create bullet projectile towards player
var bullet = game.addChild(new Bullet());
bullet.x = self.x;
bullet.y = self.y;
bullet.targetX = player.x;
bullet.targetY = player.y;
bullet.damage = self.attackDamage;
bullet.isPlayerBullet = false;
bullets.push(bullet);
}
// 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;
attackEffect.scaleX = 0.8;
attackEffect.scaleY = 0.8;
game.addChild(attackEffect);
// Scale and fade out attack effect
tween(attackEffect, {
scaleX: 1.2,
scaleY: 1.2,
alpha: 0
}, {
duration: 200,
onFinish: function onFinish() {
attackEffect.destroy();
}
});
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;
}
// Chase player AI - move towards player and attack when close
if (!player.isRespawning) {
var dx = player.x - self.x;
var dy = player.y - self.y;
var playerDistance = Math.sqrt(dx * dx + dy * dy);
// Move towards player
if (playerDistance > self.speed) {
var moveX = dx / playerDistance * self.speed;
var moveY = dy / playerDistance * self.speed;
self.x += moveX;
self.y += moveY;
}
// Attack if close enough to player
if (playerDistance <= self.attackRange) {
self.attack();
}
}
// 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
// Find closest enemy
var closestEnemy = null;
var closestDistance = Infinity;
for (var i = 0; i < enemies.length; i++) {
if (!enemies[i].isRespawning) {
var distance = Math.sqrt(Math.pow(enemies[i].x - self.x, 2) + Math.pow(enemies[i].y - self.y, 2));
if (distance < closestDistance) {
closestDistance = distance;
closestEnemy = enemies[i];
}
}
}
if (closestEnemy) {
// Create bullet projectile
var bullet = game.addChild(new Bullet());
bullet.x = self.x;
bullet.y = self.y;
bullet.targetX = closestEnemy.x;
bullet.targetY = closestEnemy.y;
bullet.damage = self.attackDamage;
bullet.isPlayerBullet = true;
bullets.push(bullet);
// Create muzzle flash 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 = 0x4499FF;
attackEffect.scaleX = 0.8;
attackEffect.scaleY = 0.8;
game.addChild(attackEffect);
// Scale and fade out attack effect
tween(attackEffect, {
scaleX: 1.2,
scaleY: 1.2,
alpha: 0
}, {
duration: 200,
onFinish: function onFinish() {
attackEffect.destroy();
}
});
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;
}
// Auto-attack enemies regardless of distance
if (self.attackCooldown <= 0) {
for (var i = 0; i < enemies.length; i++) {
var enemy = enemies[i];
if (!enemy.isRespawning) {
self.attack();
break; // Only attack one enemy per frame
}
}
}
};
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 bullets = [];
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 from random edge positions
for (var i = 0; i < 3; i++) {
var enemy = game.addChild(new Enemy());
// Spawn from random edge
var edge = Math.floor(Math.random() * 4);
if (edge === 0) {
// Top edge
enemy.x = 150 + Math.random() * 1748;
enemy.y = 150;
} else if (edge === 1) {
// Right edge
enemy.x = 1898;
enemy.y = 150 + Math.random() * 2432;
} else if (edge === 2) {
// Bottom edge
enemy.x = 150 + Math.random() * 1748;
enemy.y = 2582;
} else {
// Left edge
enemy.x = 150;
enemy.y = 150 + Math.random() * 2432;
}
enemy.targetX = enemy.x;
enemy.targetY = enemy.y;
enemies.push(enemy);
}
// UI Elements
var instructionText = new Text2('Tap to move - Auto attack enemies nearby', {
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;
}
});
};
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();
}
// Update bullets and clean up destroyed ones
for (var i = bullets.length - 1; i >= 0; i--) {
var bullet = bullets[i];
if (bullet.destroyed) {
bullets.splice(i, 1);
} else {
bullet.update();
}
}
}; ===================================================================
--- original.js
+++ change.js
@@ -86,19 +86,13 @@
self.respawnTimer = 0;
self.aiTimer = 0;
self.targetX = 0;
self.targetY = 0;
- self.hasBeenHit = false;
self.takeDamage = function (damage) {
if (self.isRespawning) return;
- // Mark as hit and start taking damage after first hit
- if (!self.hasBeenHit) {
- self.hasBeenHit = true;
- } else {
- // Only reduce health after first hit
- self.health -= damage;
- if (self.health < 0) self.health = 0;
- }
+ // Each bullet hit reduces health by 25%
+ self.health -= 25;
+ if (self.health < 0) self.health = 0;
self.updateHealthBar();
// Flash red when taking damage
tween(enemyGraphics, {
tint: 0xFF0000
@@ -138,9 +132,8 @@
self.respawn = function () {
self.health = self.maxHealth;
self.isRespawning = false;
self.respawnTimer = 0;
- self.hasBeenHit = false;
enemyGraphics.alpha = 1;
healthBar.visible = true;
healthBarBg.visible = true;
self.updateHealthBar();
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