/**** * 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