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