User prompt
oyuncuya can ekle
User prompt
bu şekilde değil daha güçlü powerup özellikleri ekle oyunucuyu çok güçlü yapmalı
User prompt
powerupa en az 50 farklı özellik ekle bunların çalışanları kalsın çalışmayanı ekleme
User prompt
ekrana çıkan yazıları biraz küçült
User prompt
bir hata var düşmana görsel olarak eklenen can düşman ölünce ekranda kalıyor
User prompt
düşmanlara özellik ekle ve düşmanlara can ekle
User prompt
powerup lardan ne aldığımızı yaz daha fazla powerup özelliği ekle ve daha eğlenceli bir oyun yap
User prompt
Please fix the bug: 'TypeError: tween.to is not a function' in or related to this line: 'tween.to(eventPopupTxt, {' Line Number: 286 ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Please fix the bug: 'TypeError: tween.to is not a function' in or related to this line: 'tween.to(eventPopupTxt, {' Line Number: 286
User prompt
eğlenceli bir oyun yap
User prompt
oyun sonsuz olsun
User prompt
powerı assete de ekle
User prompt
can barı ekle
User prompt
power ekle
User prompt
kullanıcı dosttu olsun profesyonel ol
User prompt
kontroller kullanıcı dostu olsun
User prompt
otamatik ateş etsin oyuncu
User prompt
oyuncu haraktet etmiyor
User prompt
haraktet etmiyor
Code edit (1 edits merged)
Please save this source code
User prompt
AI Arena: Yapay Zeka Savaşları
Initial prompt
yapay zekayla 2d oyun hakkında profesyonel fikir veren bir oyun yap
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Düşman karakteri (AI)
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGfx = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.radius = enemyGfx.width * 0.5;
self.type = 1;
self.speed = 3 + Math.random() * 2;
self.dir = Math.random() * Math.PI * 2;
self.shootCooldown = 60 + Math.floor(Math.random() * 60);
self.targetX = 0;
self.targetY = 0;
self.maxHealth = 3 + Math.floor(Math.random() * 2); // 3-4 can
self.health = self.maxHealth;
self.takeDamage = function (amount) {
self.health -= amount;
LK.effects.flashObject(self, 0xffff00, 200);
if (self.health <= 0) {
// Destroy health bar if exists
if (self._healthBar) {
self._healthBar.destroy();
self._healthBar = null;
}
self.destroy();
// Skor boost varsa 2 puan ver
if (player._scoreBoost && player._scoreBoost > 0) {
score += 2;
} else {
score++;
}
updateScoreAndLevel();
if (score > 0 && score % 10 === 0) {
increaseDifficulty();
}
// Remove from enemies array in main loop
self._shouldRemove = true;
}
};
self.update = function () {
if (self._frozen && self._frozen > 0) {
// Donmuşsa titret
self.x += Math.sin(self._frozen) * 2;
self.y += Math.cos(self._frozen) * 2;
return;
}
// Basit AI: Oyuncuya doğru hareket et
var dx = player.x - self.x;
var dy = player.y - self.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist > 1) {
self.x += dx / dist * self.speed;
self.y += dy / dist * self.speed;
}
// Ateş etme
if (self.shootCooldown > 0) {
self.shootCooldown--;
} else {
self.shootCooldown = 90 + Math.floor(Math.random() * 60);
spawnEnemyBullet(self.x, self.y, player.x, player.y);
}
};
return self;
});
// Düşman karakteri 2 (dairesel hareket, elips)
var Enemy2 = Container.expand(function () {
var self = Container.call(this);
var enemyGfx = self.attachAsset('enemy2', {
anchorX: 0.5,
anchorY: 0.5
});
self.radius = enemyGfx.width * 0.5;
self.type = 2;
self.angle = Math.random() * Math.PI * 2;
self.centerX = 1024 + (Math.random() - 0.5) * 600;
self.centerY = 1366 + (Math.random() - 0.5) * 800;
self.orbitRadius = 400 + Math.random() * 200;
self.speed = 0.012 + Math.random() * 0.008;
self.shootCooldown = 120 + Math.floor(Math.random() * 60);
self.maxHealth = 4 + Math.floor(Math.random() * 2); // 4-5 can
self.health = self.maxHealth;
self.takeDamage = function (amount) {
self.health -= amount;
LK.effects.flashObject(self, 0xffff00, 200);
if (self.health <= 0) {
// Destroy health bar if exists
if (self._healthBar) {
self._healthBar.destroy();
self._healthBar = null;
}
self.destroy();
if (player._scoreBoost && player._scoreBoost > 0) {
score += 2;
} else {
score++;
}
updateScoreAndLevel();
if (score > 0 && score % 10 === 0) {
increaseDifficulty();
}
self._shouldRemove = true;
}
};
self.update = function () {
if (self._frozen && self._frozen > 0) {
self.x += Math.sin(self._frozen) * 2;
self.y += Math.cos(self._frozen) * 2;
return;
}
self.angle += self.speed;
self.x = self.centerX + Math.cos(self.angle) * self.orbitRadius;
self.y = self.centerY + Math.sin(self.angle) * self.orbitRadius;
// Ateş etme
if (self.shootCooldown > 0) {
self.shootCooldown--;
} else {
self.shootCooldown = 120 + Math.floor(Math.random() * 60);
spawnEnemyBullet(self.x, self.y, player.x, player.y);
}
};
return self;
});
// Düşman karakteri 3 (rastgele zıplama, mor kutu)
var Enemy3 = Container.expand(function () {
var self = Container.call(this);
var enemyGfx = self.attachAsset('enemy3', {
anchorX: 0.5,
anchorY: 0.5
});
self.radius = enemyGfx.width * 0.5;
self.type = 3;
self.jumpTimer = 60 + Math.floor(Math.random() * 60);
self.targetX = 200 + Math.random() * 1648;
self.targetY = 200 + Math.random() * 2332;
self.speed = 12 + Math.random() * 6;
self.shootCooldown = 100 + Math.floor(Math.random() * 60);
self.maxHealth = 2 + Math.floor(Math.random() * 2); // 2-3 can
self.health = self.maxHealth;
self.takeDamage = function (amount) {
self.health -= amount;
LK.effects.flashObject(self, 0xffff00, 200);
if (self.health <= 0) {
// Destroy health bar if exists
if (self._healthBar) {
self._healthBar.destroy();
self._healthBar = null;
}
self.destroy();
if (player._scoreBoost && player._scoreBoost > 0) {
score += 2;
} else {
score++;
}
updateScoreAndLevel();
if (score > 0 && score % 10 === 0) {
increaseDifficulty();
}
self._shouldRemove = true;
}
};
self.update = function () {
if (self._frozen && self._frozen > 0) {
self.x += Math.sin(self._frozen) * 2;
self.y += Math.cos(self._frozen) * 2;
return;
}
self.jumpTimer--;
if (self.jumpTimer <= 0) {
self.targetX = 200 + Math.random() * 1648;
self.targetY = 200 + Math.random() * 2332;
self.jumpTimer = 60 + Math.floor(Math.random() * 60);
}
var dx = self.targetX - self.x;
var dy = self.targetY - self.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist > 1) {
self.x += dx / dist * self.speed;
self.y += dy / dist * self.speed;
}
// Ateş etme
if (self.shootCooldown > 0) {
self.shootCooldown--;
} else {
self.shootCooldown = 100 + Math.floor(Math.random() * 60);
spawnEnemyBullet(self.x, self.y, player.x, player.y);
}
};
return self;
});
// Düşman mermisi
var EnemyBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGfx = self.attachAsset('enemyBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.radius = bulletGfx.width * 0.5;
self.vx = 0;
self.vy = 0;
self.update = function () {
self.x += self.vx;
self.y += self.vy;
};
return self;
});
// Oyuncu karakteri
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGfx = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.radius = playerGfx.width * 0.5;
self.shootCooldown = 0;
self.update = function () {
if (self.shootCooldown > 0) self.shootCooldown--;
};
return self;
});
// Oyuncu mermisi
var PlayerBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGfx = self.attachAsset('playerBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.radius = bulletGfx.width * 0.5;
self.vx = 0;
self.vy = 0;
self.update = function () {
self.x += self.vx;
self.y += self.vy;
};
return self;
});
// Güçlendirici (PowerUp) kutusu
var PowerUp = Container.expand(function () {
var self = Container.call(this);
var powerGfx = self.attachAsset('powerUp', {
anchorX: 0.5,
anchorY: 0.5
});
self.radius = powerGfx.width * 0.5;
self.type = "power";
// Rastgele bir powerup tipi seç
var effects = ["rapid",
// Hızlı ateş
"shield",
// Kalkan
"heal",
// Can doldur
"freeze",
// Düşmanları dondur
"multi",
// Çoklu atış
"scoreBoost" // Skor çarpanı
];
self.effect = effects[Math.floor(Math.random() * effects.length)];
self.update = function () {
// Hafifçe döndür
powerGfx.rotation += 0.08;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x181818
});
/****
* Game Code
****/
// Global değişkenler
// Oyuncu karakteri (mavi kutu)
// Düşman (kırmızı kutu)
// Düşman 2 (yeşil elips)
// Düşman 3 (mor kutu)
// Oyuncu mermisi (sarı kutu)
// Düşman mermisi (turuncu kutu)
// Vurulma efekti için ses
var player;
var enemies = [];
var playerBullets = [];
var enemyBullets = [];
var powerUps = [];
var powerActive = false;
var powerTimer = 0;
var dragNode = null;
var lastPlayerPos = {
x: 0,
y: 0
};
var score = 0;
var level = 1;
var gameTick = 0;
var spawnTimer = 0;
var isGameOver = false;
// Can barı değişkenleri
var playerMaxHealth = 5;
var playerHealth = playerMaxHealth;
// Can barı GUI
var healthTxt = new Text2('Can: ' + playerHealth, {
size: 70,
fill: 0xFF4444
});
healthTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(healthTxt);
healthTxt.y = 180;
// PowerUp oluşturucu
function spawnPowerUp() {
var p = new PowerUp();
// Güvenli alan içinde rastgele konum
p.x = 200 + Math.random() * 1648;
p.y = 200 + Math.random() * 2332;
powerUps.push(p);
game.addChild(p);
}
// Skor ve seviye göstergesi
var scoreTxt = new Text2('Skor: 0', {
size: 90,
fill: "#fff"
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var levelTxt = new Text2('Seviye: 1', {
size: 60,
fill: "#fff"
});
levelTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(levelTxt);
levelTxt.y = 100;
// Eğlenceli: Arena event popup
var eventPopupTxt = new Text2('', {
size: 120,
fill: 0xFFFA00,
font: "Impact"
});
eventPopupTxt.anchor.set(0.5, 0.5);
eventPopupTxt.visible = false;
LK.gui.center.addChild(eventPopupTxt);
// Arena event popup fonksiyonu
function showArenaEventPopup(msg) {
eventPopupTxt.setText(msg);
eventPopupTxt.visible = true;
eventPopupTxt.alpha = 1;
tween(eventPopupTxt, {
alpha: 0
}, {
duration: 1200,
onFinish: function onFinish() {
eventPopupTxt.visible = false;
}
});
}
// Oyuncu oluştur
player = new Player();
game.addChild(player);
player.x = 2048 / 2;
player.y = 2732 / 2;
// Düşman oluşturucu
function spawnEnemy() {
var t = Math.random();
var e;
if (t < 0.4) {
e = new Enemy();
} else if (t < 0.7) {
e = new Enemy2();
} else {
e = new Enemy3();
}
// Rastgele kenardan başlat
var edge = Math.floor(Math.random() * 4);
if (edge === 0) {
// üst
e.x = 200 + Math.random() * 1648;
e.y = -100;
} else if (edge === 1) {
// sağ
e.x = 2148;
e.y = 200 + Math.random() * 2332;
} else if (edge === 2) {
// alt
e.x = 200 + Math.random() * 1648;
e.y = 2832;
} else {
// sol
e.x = -100;
e.y = 200 + Math.random() * 2332;
}
enemies.push(e);
game.addChild(e);
}
// Düşman mermisi oluşturucu
function spawnEnemyBullet(sx, sy, tx, ty) {
var b = new EnemyBullet();
b.x = sx;
b.y = sy;
var dx = tx - sx;
var dy = ty - sy;
var dist = Math.sqrt(dx * dx + dy * dy);
var speed = 18 + level * 2;
b.vx = dx / dist * speed;
b.vy = dy / dist * speed;
enemyBullets.push(b);
game.addChild(b);
}
// Oyuncu mermisi oluşturucu
function spawnPlayerBullet(sx, sy, tx, ty) {
var b = new PlayerBullet();
b.x = sx;
b.y = sy;
var dx = tx - sx;
var dy = ty - sy;
var dist = Math.sqrt(dx * dx + dy * dy);
var speed = 32;
b.vx = dx / dist * speed;
b.vy = dy / dist * speed;
playerBullets.push(b);
game.addChild(b);
LK.getSound('shoot').play();
}
// Skor ve seviye güncelle
function updateScoreAndLevel() {
scoreTxt.setText('Skor: ' + score);
levelTxt.setText('Seviye: ' + level);
healthTxt.setText('Can: ' + playerHealth);
}
// Oyun zorluğunu artır
function increaseDifficulty() {
level++;
updateScoreAndLevel();
}
// Oyun bitti
function gameOver() {
if (isGameOver) return;
isGameOver = true;
LK.effects.flashScreen(0xff0000, 1000);
LK.getSound('hit').play();
LK.showGameOver();
}
// Oyun kazandı
function youWin() {
LK.showYouWin();
}
// Sürükleme ve ateş etme
function handleMove(x, y, obj) {
if (dragNode) {
// Hareket farkını uygula
var dx = x - lastPlayerPos.x;
var dy = y - lastPlayerPos.y;
dragNode.x += dx;
dragNode.y += dy;
// Kullanıcı dostu: Oyuncunun ekran dışına çıkmasını engelle
var minX = dragNode.radius + 20;
var maxX = 2048 - dragNode.radius - 20;
var minY = dragNode.radius + 20;
var maxY = 2732 - dragNode.radius - 20;
if (dragNode.x < minX) dragNode.x = minX;
if (dragNode.x > maxX) dragNode.x = maxX;
if (dragNode.y < minY) dragNode.y = minY;
if (dragNode.y > maxY) dragNode.y = maxY;
lastPlayerPos.x = x;
lastPlayerPos.y = y;
}
}
// Oyun alanı dışı kontrolü
function isOutOfBounds(obj) {
return obj.x < -200 || obj.x > 2248 || obj.y < -200 || obj.y > 2932;
}
// Oyun ana döngüsü
game.update = function () {
if (isGameOver) return;
gameTick++;
// Eğlenceli: Rastgele arena olayları (ör: meteor yağmuru, bonus yağmuru, düşman dondurma)
// Her 15 saniyede bir rastgele bir olay tetiklenebilir
if (gameTick % 900 === 0 && gameTick > 0) {
var eventType = Math.floor(Math.random() * 3);
if (eventType === 0) {
// Meteor yağmuru: 10 hızlı mermi yukarıdan aşağıya düşer
for (var m = 0; m < 10; m++) {
var b = new EnemyBullet();
b.x = 200 + Math.random() * 1648;
b.y = -80 - m * 60;
b.vx = 0;
b.vy = 32 + Math.random() * 8;
enemyBullets.push(b);
game.addChild(b);
}
// Kısa efekt
LK.effects.flashScreen(0xffa500, 400);
showArenaEventPopup("Meteor Yağmuru!");
} else if (eventType === 1) {
// Bonus yağmuru: 5 powerUp birden düşer
for (var p = 0; p < 5; p++) {
var pu = new PowerUp();
pu.x = 200 + Math.random() * 1648;
pu.y = 200 + Math.random() * 2332;
powerUps.push(pu);
game.addChild(pu);
}
LK.effects.flashScreen(0x00ffcc, 400);
showArenaEventPopup("Bonus Yağmuru!");
} else if (eventType === 2) {
// Düşmanlar 3 saniye donar
for (var i = 0; i < enemies.length; i++) {
enemies[i]._frozen = 180; // 3 saniye
}
LK.effects.flashScreen(0x66ccff, 400);
showArenaEventPopup("Düşmanlar Dondu!");
}
}
// Düşmanları dondurma efekti uygula
for (var i = 0; i < enemies.length; i++) {
if (enemies[i]._frozen && enemies[i]._frozen > 0) {
enemies[i]._frozen--;
continue; // update çağrılmasın, düşman hareket etmesin
}
}
// Oyuncu update
player.update();
// Otomatik ateş etme (her 10 frame'de bir, power-up varsa daha hızlı)
var shootInterval = powerActive ? 4 : 10;
if (!isGameOver && gameTick % shootInterval === 0 && enemies.length > 0) {
// En yakın düşmanı bul
var minDist = Infinity;
var targetEnemy = null;
for (var i = 0; i < enemies.length; i++) {
var e = enemies[i];
var dx = e.x - player.x;
var dy = e.y - player.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist < minDist) {
minDist = dist;
targetEnemy = e;
}
}
if (targetEnemy) {
// Çoklu atış powerup'ı varsa 3 mermi ateşle
if (player._multiShot && player._multiShot > 0) {
for (var s = -1; s <= 1; s++) {
var angle = Math.atan2(targetEnemy.y - player.y, targetEnemy.x - player.x) + s * 0.18;
var tx = player.x + Math.cos(angle) * 1000;
var ty = player.y + Math.sin(angle) * 1000;
spawnPlayerBullet(player.x, player.y, tx, ty);
}
} else {
spawnPlayerBullet(player.x, player.y, targetEnemy.x, targetEnemy.y);
}
}
}
// Düşman update
for (var i = enemies.length - 1; i >= 0; i--) {
var e = enemies[i];
e.update();
// Can barı çizimi (her düşmanın üstünde)
if (!e._healthBar) {
e._healthBar = new Text2('', {
size: 38,
fill: 0xFF4444
});
e._healthBar.anchor.set(0.5, 1);
game.addChild(e._healthBar);
}
if (typeof e.health !== "undefined" && typeof e.maxHealth !== "undefined") {
e._healthBar.setText("♥" + e.health + "/" + e.maxHealth);
e._healthBar.x = e.x;
e._healthBar.y = e.y - e.radius - 10;
e._healthBar.visible = true;
} else {
e._healthBar.visible = false;
}
// Çarpışma: oyuncu & düşman
if (player.intersects(e)) {
if (player._shield && player._shield > 0) {
// Kalkan varsa hasar alma, kalkanı kaldır
player._shield = 0;
LK.effects.flashObject(player, 0x00ffff, 400);
showArenaEventPopup("Kalkan Kırıldı!");
} else {
playerHealth--;
updateScoreAndLevel();
LK.effects.flashObject(player, 0xff4444, 400);
if (playerHealth <= 0) {
gameOver();
return;
}
}
// Düşmanı yok et, can azalınca
if (typeof e.takeDamage === "function") {
e.takeDamage(e.health); // Tüm canı gitmeli
if (e._shouldRemove) {
if (e._healthBar) {
e._healthBar.destroy();
}
enemies.splice(i, 1);
continue;
}
} else {
e.destroy();
if (e._healthBar) {
e._healthBar.destroy();
}
enemies.splice(i, 1);
continue;
}
}
// Düşman oyun dışıysa sil
if (isOutOfBounds(e)) {
if (e._healthBar) {
e._healthBar.destroy();
}
e.destroy();
enemies.splice(i, 1);
}
}
// Oyuncu mermisi update
for (var i = playerBullets.length - 1; i >= 0; i--) {
var b = playerBullets[i];
b.update();
var hit = false;
// Düşmanlara çarpma
for (var j = enemies.length - 1; j >= 0; j--) {
var e = enemies[j];
if (b.intersects(e)) {
LK.getSound('hit').play();
if (typeof e.takeDamage === "function") {
e.takeDamage(1);
if (e._shouldRemove) {
enemies.splice(j, 1);
}
}
hit = true;
break;
}
}
if (hit || isOutOfBounds(b)) {
b.destroy();
playerBullets.splice(i, 1);
}
}
// Düşman mermisi update
for (var i = enemyBullets.length - 1; i >= 0; i--) {
var b = enemyBullets[i];
b.update();
// Oyuncuya çarpma
if (b.intersects(player)) {
if (player._shield && player._shield > 0) {
// Kalkan varsa hasar alma, kalkanı kaldır
player._shield = 0;
LK.effects.flashObject(player, 0x00ffff, 400);
showArenaEventPopup("Kalkan Kırıldı!");
} else {
playerHealth--;
updateScoreAndLevel();
LK.effects.flashObject(player, 0xff4444, 400);
if (playerHealth <= 0) {
b.destroy();
enemyBullets.splice(i, 1);
gameOver();
return;
}
}
b.destroy();
enemyBullets.splice(i, 1);
continue;
}
if (isOutOfBounds(b)) {
b.destroy();
enemyBullets.splice(i, 1);
}
}
// PowerUp update ve çarpışma
for (var i = powerUps.length - 1; i >= 0; i--) {
var p = powerUps[i];
p.update();
if (player.intersects(p)) {
// PowerUp alındı
var effect = p.effect;
var popupMsg = "";
if (effect === "rapid") {
powerActive = true;
powerTimer = 600; // 10 saniye (60 FPS)
popupMsg = "Hızlı Ateş!";
} else if (effect === "shield") {
player._shield = 1; // 1 vuruşluk kalkan
popupMsg = "Kalkan!";
} else if (effect === "heal") {
playerHealth = Math.min(playerHealth + 2, playerMaxHealth);
updateScoreAndLevel();
popupMsg = "Can +2!";
} else if (effect === "freeze") {
for (var j = 0; j < enemies.length; j++) {
enemies[j]._frozen = 180; // 3 saniye
}
popupMsg = "Düşmanlar Dondu!";
} else if (effect === "multi") {
player._multiShot = 180; // 3 saniye çoklu atış
popupMsg = "Çoklu Atış!";
} else if (effect === "scoreBoost") {
player._scoreBoost = 600; // 10 saniye skor çarpanı
popupMsg = "Skor x2!";
}
LK.effects.flashObject(player, 0x00ffcc, 400);
showArenaEventPopup("PowerUp: " + popupMsg);
p.destroy();
powerUps.splice(i, 1);
} else if (isOutOfBounds(p)) {
p.destroy();
powerUps.splice(i, 1);
}
}
// PowerUp etkisi süresi
if (powerActive) {
powerTimer--;
if (powerTimer <= 0) {
powerActive = false;
}
}
// Shield süresi yok, tek vuruşluk. MultiShot ve ScoreBoost sürelerini azalt
if (player._multiShot && player._multiShot > 0) {
player._multiShot--;
if (player._multiShot <= 0) player._multiShot = 0;
}
if (player._scoreBoost && player._scoreBoost > 0) {
player._scoreBoost--;
if (player._scoreBoost <= 0) player._scoreBoost = 0;
}
// PowerUp spawn (her 12 saniyede bir)
if (gameTick % 720 === 0 && !powerActive) {
spawnPowerUp();
}
// Düşman spawn
var spawnInterval = Math.max(60 - level * 2, 20);
if (gameTick % spawnInterval === 0) {
spawnEnemy();
}
};
// Sürükleme başlat
game.down = function (x, y, obj) {
// Oyuncuya tıklanırsa sürükle
var px = player.x,
py = player.y;
var dx = x - px,
dy = y - py;
var dist = Math.sqrt(dx * dx + dy * dy);
// Kullanıcı dostu: Oyuncunun üstüne dokunulduysa sürüklemeye başla, yoksa ateş et
if (dist < player.radius + 60) {
// daha geniş alan, daha kolay sürükleme
dragNode = player;
lastPlayerPos.x = x;
lastPlayerPos.y = y;
// Sürükleme başladığında ateş etme, yanlışlıkla ateşlemeyi önle
// Drag threshold: set a flag to check if drag distance exceeds a threshold before firing
dragNode._dragStarted = false;
dragNode._dragStartX = x;
dragNode._dragStartY = y;
} else {
// Oyuncu mermisi ateşle
spawnPlayerBullet(player.x, player.y, x, y);
}
};
// Sürükleme bırak
game.up = function (x, y, obj) {
if (dragNode && typeof dragNode._dragStarted !== "undefined") {
dragNode._dragStarted = false;
dragNode._dragStartX = 0;
dragNode._dragStartY = 0;
}
dragNode = null;
// Kullanıcı dostu: Sürükleme bırakıldığında son pozisyonu güncelle
lastPlayerPos.x = 0;
lastPlayerPos.y = 0;
};
// Sürükleme hareketi
game.move = function (x, y, obj) {
// Drag threshold: only start moving player if drag distance exceeds a threshold
if (dragNode && typeof dragNode._dragStarted !== "undefined" && !dragNode._dragStarted) {
var dragDx = x - dragNode._dragStartX;
var dragDy = y - dragNode._dragStartY;
var dragDist = Math.sqrt(dragDx * dragDx + dragDy * dragDy);
if (dragDist > 30) {
// 30px threshold for mobile friendliness
dragNode._dragStarted = true;
}
}
if (!dragNode || typeof dragNode._dragStarted === "undefined" || dragNode._dragStarted) {
handleMove(x, y, obj);
}
};
// Oyun başında skor, seviye ve canı sıfırla
score = 0;
level = 1;
playerHealth = playerMaxHealth;
updateScoreAndLevel(); ===================================================================
--- original.js
+++ change.js
@@ -25,8 +25,13 @@
self.takeDamage = function (amount) {
self.health -= amount;
LK.effects.flashObject(self, 0xffff00, 200);
if (self.health <= 0) {
+ // Destroy health bar if exists
+ if (self._healthBar) {
+ self._healthBar.destroy();
+ self._healthBar = null;
+ }
self.destroy();
// Skor boost varsa 2 puan ver
if (player._scoreBoost && player._scoreBoost > 0) {
score += 2;
@@ -86,8 +91,13 @@
self.takeDamage = function (amount) {
self.health -= amount;
LK.effects.flashObject(self, 0xffff00, 200);
if (self.health <= 0) {
+ // Destroy health bar if exists
+ if (self._healthBar) {
+ self._healthBar.destroy();
+ self._healthBar = null;
+ }
self.destroy();
if (player._scoreBoost && player._scoreBoost > 0) {
score += 2;
} else {
@@ -138,8 +148,13 @@
self.takeDamage = function (amount) {
self.health -= amount;
LK.effects.flashObject(self, 0xffff00, 200);
if (self.health <= 0) {
+ // Destroy health bar if exists
+ if (self._healthBar) {
+ self._healthBar.destroy();
+ self._healthBar = null;
+ }
self.destroy();
if (player._scoreBoost && player._scoreBoost > 0) {
score += 2;
} else {
powerup. In-Game asset. 2d. High contrast. No shadows
robot enemy. In-Game asset. 2d. High contrast. No shadows
green robot enemy. In-Game asset. 2d. High contrast. No shadows
purple robot enemy. In-Game asset. 2d. High contrast. No shadows
player robot. In-Game asset. 2d. High contrast. No shadows
robot ammo. In-Game asset. 2d. High contrast. No shadows
coin. In-Game asset. 2d. High contrast. No shadows
robot ammo very red very big. In-Game asset. 2d. High contrast. No shadows
2d space bg. In-Game asset. 2d. High contrast. No shadows