/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Bonus var Bonus = Container.expand(function () { var self = Container.call(this); var bonusSprite = self.attachAsset('bonus', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 14 + Math.random() * 6; self.update = function () { self.y += self.speed; }; return self; }); // Hugo karakteri var Hugo = Container.expand(function () { var self = Container.call(this); var hugoSprite = self.attachAsset('hugo', { anchorX: 0.5, anchorY: 0.5 }); self.type = 'hugo'; self.update = function () { // Karakterin update fonksiyonu, şimdilik gerek yok }; return self; }); // Engel var Obstacle = Container.expand(function () { var self = Container.call(this); var obsSprite = self.attachAsset('obstacle', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 18 + Math.random() * 8; // Hız rastgele biraz değişsin self.update = function () { self.y += self.speed; }; return self; }); // Tolga Abi karakteri var Tolga = Container.expand(function () { var self = Container.call(this); var tolgaSprite = self.attachAsset('tolga', { anchorX: 0.5, anchorY: 0.5 }); self.type = 'tolga'; self.update = function () { // Karakterin update fonksiyonu, şimdilik gerek yok }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x222222 }); /**** * Game Code ****/ // Bonus: yeşil elips // Engel: kırmızı kutu // Tolga Abi karakteri: turuncu kutu // Hugo karakteri: mavi kutu // Oyun alanı boyutları var GAME_WIDTH = 2048; var GAME_HEIGHT = 2732; // Karakterler arası mesafe var CHAR_GAP = 400; // Karakterlerin başlangıç konumu var hugoStartX = GAME_WIDTH / 2 - CHAR_GAP / 2; var tolgaStartX = GAME_WIDTH / 2 + CHAR_GAP / 2; var charStartY = GAME_HEIGHT - 400; // Karakterler var hugo = new Hugo(); var tolga = new Tolga(); hugo.x = hugoStartX; hugo.y = charStartY; tolga.x = tolgaStartX; tolga.y = charStartY; game.addChild(hugo); game.addChild(tolga); // Karakterlerin hareket sınırları var minX = 120; var maxX = GAME_WIDTH - 120; // Engel ve bonus dizileri var obstacles = []; var bonuses = []; // Skor var score = 0; var scoreTxt = new Text2('0', { size: 120, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Oyun zorluğu için sayaç var tickCount = 0; var spawnInterval = 60; // Başlangıçta 1 saniyede bir engel/bonus // Sürükleme için değişkenler var dragChar = null; var dragOffsetX = 0; // Hangi karaktere dokunulduğunu bul function getTouchedChar(x, y) { // Hugo'ya yakın mı? var dxH = Math.abs(hugo.x - x); var dyH = Math.abs(hugo.y - y); var hugoDist = Math.sqrt(dxH * dxH + dyH * dyH); // Tolga'ya yakın mı? var dxT = Math.abs(tolga.x - x); var dyT = Math.abs(tolga.y - y); var tolgaDist = Math.sqrt(dxT * dxT + dyT * dyT); if (hugoDist < 140 && hugoDist < tolgaDist) return hugo; if (tolgaDist < 140 && tolgaDist < hugoDist) return tolga; return null; } // Oyun alanında karakterleri sürükleme game.down = function (x, y, obj) { var _char = getTouchedChar(x, y); if (_char) { dragChar = _char; dragOffsetX = _char.x - x; } }; game.move = function (x, y, obj) { if (dragChar) { var newX = x + dragOffsetX; // Sınırları aşmasın if (newX < minX) newX = minX; if (newX > maxX) newX = maxX; dragChar.x = newX; } }; game.up = function (x, y, obj) { dragChar = null; }; // Engel ve bonus üretimi function spawnObstacle() { var obs = new Obstacle(); // Rastgele x: iki karakterin üstünde veya ortada var lane = Math.floor(Math.random() * 3); // 0: sol, 1: sağ, 2: orta var obsX; if (lane === 0) obsX = hugoStartX;else if (lane === 1) obsX = tolgaStartX;else obsX = (hugoStartX + tolgaStartX) / 2; obs.x = obsX; obs.y = -100; obstacles.push(obs); game.addChild(obs); } function spawnBonus() { var bonus = new Bonus(); // Rastgele x: iki karakterin üstünde veya ortada var lane = Math.floor(Math.random() * 3); var bonusX; if (lane === 0) bonusX = hugoStartX;else if (lane === 1) bonusX = tolgaStartX;else bonusX = (hugoStartX + tolgaStartX) / 2; bonus.x = bonusX; bonus.y = -100; bonuses.push(bonus); game.addChild(bonus); } // Çarpışma kontrolü function checkCollision(a, b) { return a.intersects(b); } // Oyun update game.update = function () { tickCount++; // Engel ve bonus üretimi (zamanla hızlanır) if (tickCount % spawnInterval === 0) { spawnObstacle(); if (Math.random() < 0.5) spawnBonus(); // Zamanla daha sık engel gelsin if (spawnInterval > 24 && tickCount % 600 === 0) { spawnInterval -= 6; if (spawnInterval < 18) spawnInterval = 18; } } // Engelleri güncelle for (var i = obstacles.length - 1; i >= 0; i--) { var obs = obstacles[i]; obs.update(); // Hugo veya Tolga ile çarpıştı mı? if (checkCollision(obs, hugo) || checkCollision(obs, tolga)) { LK.effects.flashScreen(0xff0000, 800); LK.showGameOver(); return; } // Ekran dışına çıktıysa sil if (obs.y > GAME_HEIGHT + 100) { obs.destroy(); obstacles.splice(i, 1); } } // Bonusları güncelle for (var j = bonuses.length - 1; j >= 0; j--) { var bon = bonuses[j]; bon.update(); // Hugo veya Tolga ile çarpıştı mı? if (checkCollision(bon, hugo) || checkCollision(bon, tolga)) { score += 5; scoreTxt.setText(score); bon.destroy(); bonuses.splice(j, 1); continue; } // Ekran dışına çıktıysa sil if (bon.y > GAME_HEIGHT + 100) { bon.destroy(); bonuses.splice(j, 1); } } // Skor: hayatta kalma süresi if (tickCount % 30 === 0) { score += 1; scoreTxt.setText(score); } // Kazanma koşulu: 100 puan if (score >= 100) { LK.showYouWin(); } }; // Karakterleri başa döndür (oyun resetlenince otomatik çalışır) function resetGame() { hugo.x = hugoStartX; hugo.y = charStartY; tolga.x = tolgaStartX; tolga.y = charStartY; score = 0; scoreTxt.setText(score); tickCount = 0; spawnInterval = 60; for (var i = 0; i < obstacles.length; i++) obstacles[i].destroy(); for (var j = 0; j < bonuses.length; j++) bonuses[j].destroy(); obstacles = []; bonuses = []; }
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,246 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+// Bonus
+var Bonus = Container.expand(function () {
+ var self = Container.call(this);
+ var bonusSprite = self.attachAsset('bonus', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 14 + Math.random() * 6;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+// Hugo karakteri
+var Hugo = Container.expand(function () {
+ var self = Container.call(this);
+ var hugoSprite = self.attachAsset('hugo', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.type = 'hugo';
+ self.update = function () {
+ // Karakterin update fonksiyonu, şimdilik gerek yok
+ };
+ return self;
+});
+// Engel
+var Obstacle = Container.expand(function () {
+ var self = Container.call(this);
+ var obsSprite = self.attachAsset('obstacle', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 18 + Math.random() * 8; // Hız rastgele biraz değişsin
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+// Tolga Abi karakteri
+var Tolga = Container.expand(function () {
+ var self = Container.call(this);
+ var tolgaSprite = self.attachAsset('tolga', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.type = 'tolga';
+ self.update = function () {
+ // Karakterin update fonksiyonu, şimdilik gerek yok
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x222222
+});
+
+/****
+* Game Code
+****/
+// Bonus: yeşil elips
+// Engel: kırmızı kutu
+// Tolga Abi karakteri: turuncu kutu
+// Hugo karakteri: mavi kutu
+// Oyun alanı boyutları
+var GAME_WIDTH = 2048;
+var GAME_HEIGHT = 2732;
+// Karakterler arası mesafe
+var CHAR_GAP = 400;
+// Karakterlerin başlangıç konumu
+var hugoStartX = GAME_WIDTH / 2 - CHAR_GAP / 2;
+var tolgaStartX = GAME_WIDTH / 2 + CHAR_GAP / 2;
+var charStartY = GAME_HEIGHT - 400;
+// Karakterler
+var hugo = new Hugo();
+var tolga = new Tolga();
+hugo.x = hugoStartX;
+hugo.y = charStartY;
+tolga.x = tolgaStartX;
+tolga.y = charStartY;
+game.addChild(hugo);
+game.addChild(tolga);
+// Karakterlerin hareket sınırları
+var minX = 120;
+var maxX = GAME_WIDTH - 120;
+// Engel ve bonus dizileri
+var obstacles = [];
+var bonuses = [];
+// Skor
+var score = 0;
+var scoreTxt = new Text2('0', {
+ size: 120,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+// Oyun zorluğu için sayaç
+var tickCount = 0;
+var spawnInterval = 60; // Başlangıçta 1 saniyede bir engel/bonus
+// Sürükleme için değişkenler
+var dragChar = null;
+var dragOffsetX = 0;
+// Hangi karaktere dokunulduğunu bul
+function getTouchedChar(x, y) {
+ // Hugo'ya yakın mı?
+ var dxH = Math.abs(hugo.x - x);
+ var dyH = Math.abs(hugo.y - y);
+ var hugoDist = Math.sqrt(dxH * dxH + dyH * dyH);
+ // Tolga'ya yakın mı?
+ var dxT = Math.abs(tolga.x - x);
+ var dyT = Math.abs(tolga.y - y);
+ var tolgaDist = Math.sqrt(dxT * dxT + dyT * dyT);
+ if (hugoDist < 140 && hugoDist < tolgaDist) return hugo;
+ if (tolgaDist < 140 && tolgaDist < hugoDist) return tolga;
+ return null;
+}
+// Oyun alanında karakterleri sürükleme
+game.down = function (x, y, obj) {
+ var _char = getTouchedChar(x, y);
+ if (_char) {
+ dragChar = _char;
+ dragOffsetX = _char.x - x;
+ }
+};
+game.move = function (x, y, obj) {
+ if (dragChar) {
+ var newX = x + dragOffsetX;
+ // Sınırları aşmasın
+ if (newX < minX) newX = minX;
+ if (newX > maxX) newX = maxX;
+ dragChar.x = newX;
+ }
+};
+game.up = function (x, y, obj) {
+ dragChar = null;
+};
+// Engel ve bonus üretimi
+function spawnObstacle() {
+ var obs = new Obstacle();
+ // Rastgele x: iki karakterin üstünde veya ortada
+ var lane = Math.floor(Math.random() * 3); // 0: sol, 1: sağ, 2: orta
+ var obsX;
+ if (lane === 0) obsX = hugoStartX;else if (lane === 1) obsX = tolgaStartX;else obsX = (hugoStartX + tolgaStartX) / 2;
+ obs.x = obsX;
+ obs.y = -100;
+ obstacles.push(obs);
+ game.addChild(obs);
+}
+function spawnBonus() {
+ var bonus = new Bonus();
+ // Rastgele x: iki karakterin üstünde veya ortada
+ var lane = Math.floor(Math.random() * 3);
+ var bonusX;
+ if (lane === 0) bonusX = hugoStartX;else if (lane === 1) bonusX = tolgaStartX;else bonusX = (hugoStartX + tolgaStartX) / 2;
+ bonus.x = bonusX;
+ bonus.y = -100;
+ bonuses.push(bonus);
+ game.addChild(bonus);
+}
+// Çarpışma kontrolü
+function checkCollision(a, b) {
+ return a.intersects(b);
+}
+// Oyun update
+game.update = function () {
+ tickCount++;
+ // Engel ve bonus üretimi (zamanla hızlanır)
+ if (tickCount % spawnInterval === 0) {
+ spawnObstacle();
+ if (Math.random() < 0.5) spawnBonus();
+ // Zamanla daha sık engel gelsin
+ if (spawnInterval > 24 && tickCount % 600 === 0) {
+ spawnInterval -= 6;
+ if (spawnInterval < 18) spawnInterval = 18;
+ }
+ }
+ // Engelleri güncelle
+ for (var i = obstacles.length - 1; i >= 0; i--) {
+ var obs = obstacles[i];
+ obs.update();
+ // Hugo veya Tolga ile çarpıştı mı?
+ if (checkCollision(obs, hugo) || checkCollision(obs, tolga)) {
+ LK.effects.flashScreen(0xff0000, 800);
+ LK.showGameOver();
+ return;
+ }
+ // Ekran dışına çıktıysa sil
+ if (obs.y > GAME_HEIGHT + 100) {
+ obs.destroy();
+ obstacles.splice(i, 1);
+ }
+ }
+ // Bonusları güncelle
+ for (var j = bonuses.length - 1; j >= 0; j--) {
+ var bon = bonuses[j];
+ bon.update();
+ // Hugo veya Tolga ile çarpıştı mı?
+ if (checkCollision(bon, hugo) || checkCollision(bon, tolga)) {
+ score += 5;
+ scoreTxt.setText(score);
+ bon.destroy();
+ bonuses.splice(j, 1);
+ continue;
+ }
+ // Ekran dışına çıktıysa sil
+ if (bon.y > GAME_HEIGHT + 100) {
+ bon.destroy();
+ bonuses.splice(j, 1);
+ }
+ }
+ // Skor: hayatta kalma süresi
+ if (tickCount % 30 === 0) {
+ score += 1;
+ scoreTxt.setText(score);
+ }
+ // Kazanma koşulu: 100 puan
+ if (score >= 100) {
+ LK.showYouWin();
+ }
+};
+// Karakterleri başa döndür (oyun resetlenince otomatik çalışır)
+function resetGame() {
+ hugo.x = hugoStartX;
+ hugo.y = charStartY;
+ tolga.x = tolgaStartX;
+ tolga.y = charStartY;
+ score = 0;
+ scoreTxt.setText(score);
+ tickCount = 0;
+ spawnInterval = 60;
+ for (var i = 0; i < obstacles.length; i++) obstacles[i].destroy();
+ for (var j = 0; j < bonuses.length; j++) bonuses[j].destroy();
+ obstacles = [];
+ bonuses = [];
+}
\ No newline at end of file