/**** * 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: 0x2d1b0b // koyu kahverengi mağara atmosferi }); /**** * 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 = []; }
/****
* 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: 0x2d1b0b // koyu kahverengi mağara atmosferi
});
/****
* 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 = [];
}