/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
// Mermi
var Bullet = Container.expand(function (angle) {
var self = Container.call(this);
var bulletGfx = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.radius = bulletGfx.width / 2;
self.speed = 28;
self.angle = angle || -Math.PI / 2;
self.update = function () {
self.x += Math.cos(self.angle) * self.speed;
self.y += Math.sin(self.angle) * self.speed;
};
return self;
});
// Düşman
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 / 2;
self.speed = 2 + currentWave * 0.3 + Math.random() * 1.5;
self.hp = 1 + Math.floor(currentWave / 2);
self.dir = Math.PI / 2 + (Math.random() - 0.5) * 0.3; // Hafifçe sağa-sola sapabilir
self.update = function () {
self.y += self.speed;
self.x += Math.sin(self.dir) * 2;
};
self.hit = function () {
self.hp--;
LK.effects.flashObject(self, 0xffffff, 200);
if (self.hp <= 0) {
self.destroy();
return true;
}
return false;
};
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 / 2;
self.fireCooldown = 0; // Atış bekleme süresi
self.fireRate = 18; // Kaç frame'de bir ateş eder (60fps'de ~3 atış/sn)
self.powerLevel = 1; // Güç seviyesi (daha fazla mermi için)
self.invincible = false;
self.invincibleTimer = 0;
self.update = function () {
if (self.fireCooldown > 0) self.fireCooldown--;
if (self.invincible) {
self.invincibleTimer--;
if (self.invincibleTimer <= 0) {
self.invincible = false;
playerGfx.alpha = 1;
}
}
};
self.shoot = function () {
if (self.fireCooldown > 0) return;
self.fireCooldown = self.fireRate;
// Güç seviyesine göre mermi sayısı
var spread = self.powerLevel;
var angleStep = Math.PI / 16;
var baseAngle = -Math.PI / 2;
for (var i = 0; i < spread; i++) {
var angle = baseAngle + (i - (spread - 1) / 2) * angleStep;
var b = new Bullet(angle);
b.x = self.x;
b.y = self.y - self.radius;
bullets.push(b);
game.addChild(b);
}
};
self.gainPower = function () {
if (self.powerLevel < 3) {
self.powerLevel++;
LK.effects.flashObject(self, 0x2980b9, 600);
}
};
self.hit = function () {
if (self.invincible) return;
self.invincible = true;
self.invincibleTimer = 90; // 1.5 saniye
playerGfx.alpha = 0.5;
LK.effects.flashScreen(0xff0000, 500);
playerLives--;
livesText.setText('♥'.repeat(playerLives));
if (playerLives <= 0) {
LK.showGameOver();
}
};
return self;
});
// Güçlendirme
var PowerUp = Container.expand(function () {
var self = Container.call(this);
var puGfx = self.attachAsset('powerup', {
anchorX: 0.5,
anchorY: 0.5
});
self.radius = puGfx.width / 2;
self.speed = 6;
self.update = function () {
self.y += self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x222831
});
/****
* Game Code
****/
// Karakter, düşman, mermi ve güçlendirme için temel şekiller
// Global değişkenler
var player;
var bullets = [];
var enemies = [];
var powerups = [];
var currentWave = 1;
var waveEnemiesLeft = 0;
var waveSpawnTimer = 0;
var playerLives = 3;
var score = 0;
var dragNode = null;
// GUI: Skor ve can
var scoreText = new Text2('0', {
size: 100,
fill: 0xFFF700
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
var livesText = new Text2('♥♥♥', {
size: 90,
fill: 0xE74C3C
});
livesText.anchor.set(0.5, 0);
LK.gui.topRight.addChild(livesText);
// Dalga göstergesi
var waveText = new Text2('Dalga 1', {
size: 70,
fill: 0x00BFFF
});
waveText.anchor.set(0.5, 0);
LK.gui.bottom.addChild(waveText);
// Oyuncu oluştur
player = new Player();
player.x = 2048 / 2;
player.y = 2732 - 350;
game.addChild(player);
// İlk dalgayı başlat
startWave(currentWave);
// Sürükleme/move kontrolleri
function handleMove(x, y, obj) {
if (dragNode) {
// Sınırları kontrol et
var px = Math.max(80, Math.min(2048 - 80, x));
var py = Math.max(200, Math.min(2732 - 120, y));
dragNode.x = px;
dragNode.y = py;
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
// Oyuncuya tıklanırsa sürüklemeye başla
if (player && Math.abs(x - player.x) < player.radius && Math.abs(y - player.y) < player.radius) {
dragNode = player;
handleMove(x, y, obj);
}
};
game.up = function (x, y, obj) {
dragNode = null;
};
// Dalga başlatıcı
function startWave(wave) {
waveEnemiesLeft = 6 + wave * 2;
waveSpawnTimer = 0;
waveText.setText('Dalga ' + wave);
}
// Düşman üretici
function spawnEnemy() {
var e = new Enemy();
e.x = 150 + Math.random() * (2048 - 300);
e.y = -100;
enemies.push(e);
game.addChild(e);
}
// Güçlendirme üretici
function spawnPowerUp() {
var pu = new PowerUp();
pu.x = 200 + Math.random() * (2048 - 400);
pu.y = -80;
powerups.push(pu);
game.addChild(pu);
}
// Ana oyun döngüsü
game.update = function () {
// Oyuncu update
player.update();
// Otomatik ateş
player.shoot();
// Mermiler
for (var i = bullets.length - 1; i >= 0; i--) {
var b = bullets[i];
b.update();
// Ekran dışıysa sil
if (b.y < -60 || b.x < -60 || b.x > 2048 + 60) {
b.destroy();
bullets.splice(i, 1);
continue;
}
// Düşman çarpışması
for (var j = enemies.length - 1; j >= 0; j--) {
var e = enemies[j];
if (b.intersects(e)) {
if (e.hit()) {
// Düşman öldü
score += 10 * currentWave;
scoreText.setText(score);
LK.setScore(score);
enemies.splice(j, 1);
waveEnemiesLeft--;
// Güçlendirme düşürme şansı
if (Math.random() < 0.12) {
spawnPowerUp();
}
}
b.destroy();
bullets.splice(i, 1);
break;
}
}
}
// Düşmanlar
for (var i = enemies.length - 1; i >= 0; i--) {
var e = enemies[i];
e.update();
// Ekran dışıysa sil
if (e.y > 2732 + 100) {
e.destroy();
enemies.splice(i, 1);
waveEnemiesLeft--;
continue;
}
// Oyuncu çarpışması
if (e.intersects(player)) {
e.destroy();
enemies.splice(i, 1);
waveEnemiesLeft--;
player.hit();
continue;
}
}
// Güçlendirmeler
for (var i = powerups.length - 1; i >= 0; i--) {
var pu = powerups[i];
pu.update();
if (pu.y > 2732 + 80) {
pu.destroy();
powerups.splice(i, 1);
continue;
}
if (pu.intersects(player)) {
player.gainPower();
pu.destroy();
powerups.splice(i, 1);
continue;
}
}
// Dalga yönetimi
if (waveEnemiesLeft <= 0 && enemies.length === 0) {
currentWave++;
startWave(currentWave);
}
// Düşman üretimi
if (waveEnemiesLeft > 0) {
waveSpawnTimer--;
if (waveSpawnTimer <= 0) {
spawnEnemy();
waveEnemiesLeft--;
waveSpawnTimer = Math.max(18, 60 - currentWave * 2); // Dalga arttıkça daha hızlı
}
}
};
// Oyun başında skor ve canı sıfırla
score = 0;
LK.setScore(0);
playerLives = 3;
livesText.setText('♥'.repeat(playerLives));
scoreText.setText(score);
currentWave = 1;
waveText.setText('Dalga 1'); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,314 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1");
+
+/****
+* Classes
+****/
+// Mermi
+var Bullet = Container.expand(function (angle) {
+ var self = Container.call(this);
+ var bulletGfx = self.attachAsset('bullet', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.radius = bulletGfx.width / 2;
+ self.speed = 28;
+ self.angle = angle || -Math.PI / 2;
+ self.update = function () {
+ self.x += Math.cos(self.angle) * self.speed;
+ self.y += Math.sin(self.angle) * self.speed;
+ };
+ return self;
+});
+// Düşman
+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 / 2;
+ self.speed = 2 + currentWave * 0.3 + Math.random() * 1.5;
+ self.hp = 1 + Math.floor(currentWave / 2);
+ self.dir = Math.PI / 2 + (Math.random() - 0.5) * 0.3; // Hafifçe sağa-sola sapabilir
+ self.update = function () {
+ self.y += self.speed;
+ self.x += Math.sin(self.dir) * 2;
+ };
+ self.hit = function () {
+ self.hp--;
+ LK.effects.flashObject(self, 0xffffff, 200);
+ if (self.hp <= 0) {
+ self.destroy();
+ return true;
+ }
+ return false;
+ };
+ 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 / 2;
+ self.fireCooldown = 0; // Atış bekleme süresi
+ self.fireRate = 18; // Kaç frame'de bir ateş eder (60fps'de ~3 atış/sn)
+ self.powerLevel = 1; // Güç seviyesi (daha fazla mermi için)
+ self.invincible = false;
+ self.invincibleTimer = 0;
+ self.update = function () {
+ if (self.fireCooldown > 0) self.fireCooldown--;
+ if (self.invincible) {
+ self.invincibleTimer--;
+ if (self.invincibleTimer <= 0) {
+ self.invincible = false;
+ playerGfx.alpha = 1;
+ }
+ }
+ };
+ self.shoot = function () {
+ if (self.fireCooldown > 0) return;
+ self.fireCooldown = self.fireRate;
+ // Güç seviyesine göre mermi sayısı
+ var spread = self.powerLevel;
+ var angleStep = Math.PI / 16;
+ var baseAngle = -Math.PI / 2;
+ for (var i = 0; i < spread; i++) {
+ var angle = baseAngle + (i - (spread - 1) / 2) * angleStep;
+ var b = new Bullet(angle);
+ b.x = self.x;
+ b.y = self.y - self.radius;
+ bullets.push(b);
+ game.addChild(b);
+ }
+ };
+ self.gainPower = function () {
+ if (self.powerLevel < 3) {
+ self.powerLevel++;
+ LK.effects.flashObject(self, 0x2980b9, 600);
+ }
+ };
+ self.hit = function () {
+ if (self.invincible) return;
+ self.invincible = true;
+ self.invincibleTimer = 90; // 1.5 saniye
+ playerGfx.alpha = 0.5;
+ LK.effects.flashScreen(0xff0000, 500);
+ playerLives--;
+ livesText.setText('♥'.repeat(playerLives));
+ if (playerLives <= 0) {
+ LK.showGameOver();
+ }
+ };
+ return self;
+});
+// Güçlendirme
+var PowerUp = Container.expand(function () {
+ var self = Container.call(this);
+ var puGfx = self.attachAsset('powerup', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.radius = puGfx.width / 2;
+ self.speed = 6;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x222831
+});
+
+/****
+* Game Code
+****/
+// Karakter, düşman, mermi ve güçlendirme için temel şekiller
+// Global değişkenler
+var player;
+var bullets = [];
+var enemies = [];
+var powerups = [];
+var currentWave = 1;
+var waveEnemiesLeft = 0;
+var waveSpawnTimer = 0;
+var playerLives = 3;
+var score = 0;
+var dragNode = null;
+// GUI: Skor ve can
+var scoreText = new Text2('0', {
+ size: 100,
+ fill: 0xFFF700
+});
+scoreText.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreText);
+var livesText = new Text2('♥♥♥', {
+ size: 90,
+ fill: 0xE74C3C
+});
+livesText.anchor.set(0.5, 0);
+LK.gui.topRight.addChild(livesText);
+// Dalga göstergesi
+var waveText = new Text2('Dalga 1', {
+ size: 70,
+ fill: 0x00BFFF
+});
+waveText.anchor.set(0.5, 0);
+LK.gui.bottom.addChild(waveText);
+// Oyuncu oluştur
+player = new Player();
+player.x = 2048 / 2;
+player.y = 2732 - 350;
+game.addChild(player);
+// İlk dalgayı başlat
+startWave(currentWave);
+// Sürükleme/move kontrolleri
+function handleMove(x, y, obj) {
+ if (dragNode) {
+ // Sınırları kontrol et
+ var px = Math.max(80, Math.min(2048 - 80, x));
+ var py = Math.max(200, Math.min(2732 - 120, y));
+ dragNode.x = px;
+ dragNode.y = py;
+ }
+}
+game.move = handleMove;
+game.down = function (x, y, obj) {
+ // Oyuncuya tıklanırsa sürüklemeye başla
+ if (player && Math.abs(x - player.x) < player.radius && Math.abs(y - player.y) < player.radius) {
+ dragNode = player;
+ handleMove(x, y, obj);
+ }
+};
+game.up = function (x, y, obj) {
+ dragNode = null;
+};
+// Dalga başlatıcı
+function startWave(wave) {
+ waveEnemiesLeft = 6 + wave * 2;
+ waveSpawnTimer = 0;
+ waveText.setText('Dalga ' + wave);
+}
+// Düşman üretici
+function spawnEnemy() {
+ var e = new Enemy();
+ e.x = 150 + Math.random() * (2048 - 300);
+ e.y = -100;
+ enemies.push(e);
+ game.addChild(e);
+}
+// Güçlendirme üretici
+function spawnPowerUp() {
+ var pu = new PowerUp();
+ pu.x = 200 + Math.random() * (2048 - 400);
+ pu.y = -80;
+ powerups.push(pu);
+ game.addChild(pu);
+}
+// Ana oyun döngüsü
+game.update = function () {
+ // Oyuncu update
+ player.update();
+ // Otomatik ateş
+ player.shoot();
+ // Mermiler
+ for (var i = bullets.length - 1; i >= 0; i--) {
+ var b = bullets[i];
+ b.update();
+ // Ekran dışıysa sil
+ if (b.y < -60 || b.x < -60 || b.x > 2048 + 60) {
+ b.destroy();
+ bullets.splice(i, 1);
+ continue;
+ }
+ // Düşman çarpışması
+ for (var j = enemies.length - 1; j >= 0; j--) {
+ var e = enemies[j];
+ if (b.intersects(e)) {
+ if (e.hit()) {
+ // Düşman öldü
+ score += 10 * currentWave;
+ scoreText.setText(score);
+ LK.setScore(score);
+ enemies.splice(j, 1);
+ waveEnemiesLeft--;
+ // Güçlendirme düşürme şansı
+ if (Math.random() < 0.12) {
+ spawnPowerUp();
+ }
+ }
+ b.destroy();
+ bullets.splice(i, 1);
+ break;
+ }
+ }
+ }
+ // Düşmanlar
+ for (var i = enemies.length - 1; i >= 0; i--) {
+ var e = enemies[i];
+ e.update();
+ // Ekran dışıysa sil
+ if (e.y > 2732 + 100) {
+ e.destroy();
+ enemies.splice(i, 1);
+ waveEnemiesLeft--;
+ continue;
+ }
+ // Oyuncu çarpışması
+ if (e.intersects(player)) {
+ e.destroy();
+ enemies.splice(i, 1);
+ waveEnemiesLeft--;
+ player.hit();
+ continue;
+ }
+ }
+ // Güçlendirmeler
+ for (var i = powerups.length - 1; i >= 0; i--) {
+ var pu = powerups[i];
+ pu.update();
+ if (pu.y > 2732 + 80) {
+ pu.destroy();
+ powerups.splice(i, 1);
+ continue;
+ }
+ if (pu.intersects(player)) {
+ player.gainPower();
+ pu.destroy();
+ powerups.splice(i, 1);
+ continue;
+ }
+ }
+ // Dalga yönetimi
+ if (waveEnemiesLeft <= 0 && enemies.length === 0) {
+ currentWave++;
+ startWave(currentWave);
+ }
+ // Düşman üretimi
+ if (waveEnemiesLeft > 0) {
+ waveSpawnTimer--;
+ if (waveSpawnTimer <= 0) {
+ spawnEnemy();
+ waveEnemiesLeft--;
+ waveSpawnTimer = Math.max(18, 60 - currentWave * 2); // Dalga arttıkça daha hızlı
+ }
+ }
+};
+// Oyun başında skor ve canı sıfırla
+score = 0;
+LK.setScore(0);
+playerLives = 3;
+livesText.setText('♥'.repeat(playerLives));
+scoreText.setText(score);
+currentWave = 1;
+waveText.setText('Dalga 1');
\ No newline at end of file
2d spaceship beatifull. In-Game asset. 2d. High contrast. No shadows
Yukarı doğru 3 ok upgrade. In-Game asset. 2d. High contrast. No shadows
2d bullet. In-Game asset. 2d. High contrast. No shadows
Meteor 2d. In-Game asset. 2d. High contrast. No shadows
2d enemy spaceship arka plana uyumlu olsun. In-Game asset. 2d. High contrast. No shadows
2d enemy boss spaceship. In-Game asset. 2d. High contrast. No shadows