/**** * Classes ****/ // Karakter (Character) class var Character = Container.expand(function () { var self = Container.call(this); var asset = self.attachAsset('character', { anchorX: 0.5, anchorY: 1.0 }); self.speed = 0; // Karakteri sürükleyerek hareket ettireceğiz // Yürüme animasyonu için parametreler self.walkAnimTime = 0; self.isWalking = false; self.lastX = undefined; self.lastY = undefined; self.facing = 1; // 1: sağ, -1: sol // Yürüme animasyonu ve yön için update fonksiyonu self.update = function () { // İlk frame'de lastX/Y ayarla if (self.lastX === undefined) { self.lastX = self.x; } if (self.lastY === undefined) { self.lastY = self.y; } // Hareket algıla var moved = self.x !== self.lastX || self.y !== self.lastY; self.isWalking = moved; // Yön belirle (sadece x değişimine bak) if (self.x > self.lastX) { self.facing = 1; } else if (self.x < self.lastX) { self.facing = -1; } // Sprite'ı yöne göre çevir asset.scaleX = self.facing; // Yürüme animasyonu (basit yukarı-aşağı zıplatma) if (self.isWalking) { self.walkAnimTime += 1; // 0.15 ile 0.25 arası bir zıplama efekti asset.y = Math.sin(self.walkAnimTime * 0.25) * 18; } else { self.walkAnimTime = 0; asset.y = 0; } // Son pozisyonu güncelle self.lastX = self.x; self.lastY = self.y; }; return self; }); // Göl (Lake) class var Lake = Container.expand(function () { var self = Container.call(this); var asset = self.attachAsset('lake', { anchorX: 0.5, anchorY: 1.0 }); asset.alpha = 0; self.info = "Göl: Karalar üzerindeki çukur alanlarda birikmiş tatlı veya tuzlu su kütleleridir."; self.type = "lake"; return self; }); // Yerşekilleri listesini oluştur // Dağ (Mountain) class var Mountain = Container.expand(function () { var self = Container.call(this); var asset = self.attachAsset('mountain', { anchorX: 0.5, anchorY: 1.0 }); asset.alpha = 0; self.info = "Dağ: Yüksek ve dik yamaçlı yerşekilleridir. Zirveleri genellikle karla kaplıdır."; self.type = "mountain"; return self; }); // Ova (Plain) class var Plain = Container.expand(function () { var self = Container.call(this); var asset = self.attachAsset('plain', { anchorX: 0.5, anchorY: 1.0 }); asset.alpha = 0; self.info = "Ova: Deniz seviyesine yakın, geniş ve düz alanlardır. Tarım için uygundur."; self.type = "plain"; return self; }); // Plato (Plateau) class var Plateau = Container.expand(function () { var self = Container.call(this); var asset = self.attachAsset('plateau', { anchorX: 0.5, anchorY: 1.0 }); asset.alpha = 0; self.info = "Plato: Çevresine göre yüksek, düz ve geniş alanlardır."; self.type = "plateau"; return self; }); // Akarsu (River) class var River = Container.expand(function () { var self = Container.call(this); var asset = self.attachAsset('river', { anchorX: 0.5, anchorY: 1.0 }); asset.alpha = 0; self.info = "Akarsu: Yeryüzünde belirli bir yatak boyunca sürekli veya zaman zaman akan su akıntısıdır."; self.type = "river"; return self; }); // Vadi (Valley) class var Valley = Container.expand(function () { var self = Container.call(this); var asset = self.attachAsset('valley', { anchorX: 10, anchorY: 1.0 }); asset.alpha = 0; self.info = "Vadi: Akarsuların aşındırmasıyla oluşan, iki yamaç arasında kalan çukurluklardır."; self.type = "valley"; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ // Yerşekilleri listesini oluştur var landforms = []; var discoveredLandforms = []; var infoText = null; // Gerçekçi arka planı ekle var background = LK.getAsset('realistic_map_bg', { anchorX: 0, anchorY: 0, x: 0, y: 0, width: 2048, height: 2732 }); game.addChild(background); // Karakteri oluştur ve haritaya ekle var character = new Character(); character.x = 200; character.y = 2400; game.addChild(character); // Sürükleme için değişken var dragCharacter = false; // Harita üzerinde yerşekillerini konumlandır function createLandforms() { // Dağ var mountain = new Mountain(); mountain.x = 400; mountain.y = 1800 / 3; landforms.push(mountain); game.addChild(mountain); // Ova var plain = new Plain(); plain.x = 1600; plain.y = 1050; landforms.push(plain); game.addChild(plain); // Plato var plateau = new Plateau(); plateau.x = 1600; plateau.y = 1500; landforms.push(plateau); game.addChild(plateau); // Vadi var valley = new Valley(); valley.x = 400; valley.y = 1500; landforms.push(valley); game.addChild(valley); // Göl var lake = new Lake(); lake.x = 1600; lake.y = 600; landforms.push(lake); game.addChild(lake); // Akarsu var river = new River(); river.x = 1300; river.y = 1500; landforms.push(river); game.addChild(river); } // Bilgi kutusunu göster function showInfo(landform) { if (infoText) { infoText.destroy(); infoText = null; } infoText = new Text2(landform.info, { size: 80, fill: 0xFFFFFF, wordWrap: true, wordWrapWidth: 1200 }); infoText.anchor.set(0.5, 0); infoText.x = 12; infoText.y = 10; LK.gui.top.addChild(infoText); // Bilgi kutusu sürekli ekranda kalacak, yeni bir bilgi gösterilene kadar kaldırılmayacak } // Keşif kontrolü function checkDiscovery(x, y) { for (var i = 0; i < landforms.length; i++) { var lf = landforms[i]; // Basit mesafe kontrolü (dokunma/klik yakınlığı) var dx = lf.x - x; var dy = lf.y - y; var dist = Math.sqrt(dx * dx + dy * dy); if (dist < 180) { showInfo(lf); if (discoveredLandforms.indexOf(lf.type) === -1) { discoveredLandforms.push(lf.type); } break; } } } // Karakteri sürüklemek için dokunma/klik başlatıldığında kontrol et game.down = function (x, y, obj) { // Eğer karaktere yakın bir noktadaysak sürüklemeyi başlat var dx = character.x - x; var dy = character.y - y; var dist = Math.sqrt(dx * dx + dy * dy); if (dist < 180) { dragCharacter = true; } }; // Sürükleme sırasında karakteri hareket ettir game.move = function (x, y, obj) { if (dragCharacter) { character.x = x; character.y = y; if (typeof character.update === "function") { character.update(); } } }; // Sürükleme bırakıldığında durdur game.up = function (x, y, obj) { dragCharacter = false; }; // Oyun başlatıldığında yerşekillerini oluştur createLandforms(); // Her karede karakterin yerşekillerine yakınlığını kontrol et game.update = function () { if (typeof character.update === "function") { character.update(); } for (var i = 0; i < landforms.length; i++) { var lf = landforms[i]; var dx = lf.x - character.x; var dy = lf.y - character.y; var dist = Math.sqrt(dx * dx + dy * dy); if (dist < 180) { // Her yaklaşıldığında bilgi göster showInfo(lf); // İlk kez keşfediliyorsa kaydet if (discoveredLandforms.indexOf(lf.type) === -1) { discoveredLandforms.push(lf.type); } break; } } };
/****
* Classes
****/
// Karakter (Character) class
var Character = Container.expand(function () {
var self = Container.call(this);
var asset = self.attachAsset('character', {
anchorX: 0.5,
anchorY: 1.0
});
self.speed = 0; // Karakteri sürükleyerek hareket ettireceğiz
// Yürüme animasyonu için parametreler
self.walkAnimTime = 0;
self.isWalking = false;
self.lastX = undefined;
self.lastY = undefined;
self.facing = 1; // 1: sağ, -1: sol
// Yürüme animasyonu ve yön için update fonksiyonu
self.update = function () {
// İlk frame'de lastX/Y ayarla
if (self.lastX === undefined) {
self.lastX = self.x;
}
if (self.lastY === undefined) {
self.lastY = self.y;
}
// Hareket algıla
var moved = self.x !== self.lastX || self.y !== self.lastY;
self.isWalking = moved;
// Yön belirle (sadece x değişimine bak)
if (self.x > self.lastX) {
self.facing = 1;
} else if (self.x < self.lastX) {
self.facing = -1;
}
// Sprite'ı yöne göre çevir
asset.scaleX = self.facing;
// Yürüme animasyonu (basit yukarı-aşağı zıplatma)
if (self.isWalking) {
self.walkAnimTime += 1;
// 0.15 ile 0.25 arası bir zıplama efekti
asset.y = Math.sin(self.walkAnimTime * 0.25) * 18;
} else {
self.walkAnimTime = 0;
asset.y = 0;
}
// Son pozisyonu güncelle
self.lastX = self.x;
self.lastY = self.y;
};
return self;
});
// Göl (Lake) class
var Lake = Container.expand(function () {
var self = Container.call(this);
var asset = self.attachAsset('lake', {
anchorX: 0.5,
anchorY: 1.0
});
asset.alpha = 0;
self.info = "Göl: Karalar üzerindeki çukur alanlarda birikmiş tatlı veya tuzlu su kütleleridir.";
self.type = "lake";
return self;
});
// Yerşekilleri listesini oluştur
// Dağ (Mountain) class
var Mountain = Container.expand(function () {
var self = Container.call(this);
var asset = self.attachAsset('mountain', {
anchorX: 0.5,
anchorY: 1.0
});
asset.alpha = 0;
self.info = "Dağ: Yüksek ve dik yamaçlı yerşekilleridir. Zirveleri genellikle karla kaplıdır.";
self.type = "mountain";
return self;
});
// Ova (Plain) class
var Plain = Container.expand(function () {
var self = Container.call(this);
var asset = self.attachAsset('plain', {
anchorX: 0.5,
anchorY: 1.0
});
asset.alpha = 0;
self.info = "Ova: Deniz seviyesine yakın, geniş ve düz alanlardır. Tarım için uygundur.";
self.type = "plain";
return self;
});
// Plato (Plateau) class
var Plateau = Container.expand(function () {
var self = Container.call(this);
var asset = self.attachAsset('plateau', {
anchorX: 0.5,
anchorY: 1.0
});
asset.alpha = 0;
self.info = "Plato: Çevresine göre yüksek, düz ve geniş alanlardır.";
self.type = "plateau";
return self;
});
// Akarsu (River) class
var River = Container.expand(function () {
var self = Container.call(this);
var asset = self.attachAsset('river', {
anchorX: 0.5,
anchorY: 1.0
});
asset.alpha = 0;
self.info = "Akarsu: Yeryüzünde belirli bir yatak boyunca sürekli veya zaman zaman akan su akıntısıdır.";
self.type = "river";
return self;
});
// Vadi (Valley) class
var Valley = Container.expand(function () {
var self = Container.call(this);
var asset = self.attachAsset('valley', {
anchorX: 10,
anchorY: 1.0
});
asset.alpha = 0;
self.info = "Vadi: Akarsuların aşındırmasıyla oluşan, iki yamaç arasında kalan çukurluklardır.";
self.type = "valley";
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
// Yerşekilleri listesini oluştur
var landforms = [];
var discoveredLandforms = [];
var infoText = null;
// Gerçekçi arka planı ekle
var background = LK.getAsset('realistic_map_bg', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0,
width: 2048,
height: 2732
});
game.addChild(background);
// Karakteri oluştur ve haritaya ekle
var character = new Character();
character.x = 200;
character.y = 2400;
game.addChild(character);
// Sürükleme için değişken
var dragCharacter = false;
// Harita üzerinde yerşekillerini konumlandır
function createLandforms() {
// Dağ
var mountain = new Mountain();
mountain.x = 400;
mountain.y = 1800 / 3;
landforms.push(mountain);
game.addChild(mountain);
// Ova
var plain = new Plain();
plain.x = 1600;
plain.y = 1050;
landforms.push(plain);
game.addChild(plain);
// Plato
var plateau = new Plateau();
plateau.x = 1600;
plateau.y = 1500;
landforms.push(plateau);
game.addChild(plateau);
// Vadi
var valley = new Valley();
valley.x = 400;
valley.y = 1500;
landforms.push(valley);
game.addChild(valley);
// Göl
var lake = new Lake();
lake.x = 1600;
lake.y = 600;
landforms.push(lake);
game.addChild(lake);
// Akarsu
var river = new River();
river.x = 1300;
river.y = 1500;
landforms.push(river);
game.addChild(river);
}
// Bilgi kutusunu göster
function showInfo(landform) {
if (infoText) {
infoText.destroy();
infoText = null;
}
infoText = new Text2(landform.info, {
size: 80,
fill: 0xFFFFFF,
wordWrap: true,
wordWrapWidth: 1200
});
infoText.anchor.set(0.5, 0);
infoText.x = 12;
infoText.y = 10;
LK.gui.top.addChild(infoText);
// Bilgi kutusu sürekli ekranda kalacak, yeni bir bilgi gösterilene kadar kaldırılmayacak
}
// Keşif kontrolü
function checkDiscovery(x, y) {
for (var i = 0; i < landforms.length; i++) {
var lf = landforms[i];
// Basit mesafe kontrolü (dokunma/klik yakınlığı)
var dx = lf.x - x;
var dy = lf.y - y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist < 180) {
showInfo(lf);
if (discoveredLandforms.indexOf(lf.type) === -1) {
discoveredLandforms.push(lf.type);
}
break;
}
}
}
// Karakteri sürüklemek için dokunma/klik başlatıldığında kontrol et
game.down = function (x, y, obj) {
// Eğer karaktere yakın bir noktadaysak sürüklemeyi başlat
var dx = character.x - x;
var dy = character.y - y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist < 180) {
dragCharacter = true;
}
};
// Sürükleme sırasında karakteri hareket ettir
game.move = function (x, y, obj) {
if (dragCharacter) {
character.x = x;
character.y = y;
if (typeof character.update === "function") {
character.update();
}
}
};
// Sürükleme bırakıldığında durdur
game.up = function (x, y, obj) {
dragCharacter = false;
};
// Oyun başlatıldığında yerşekillerini oluştur
createLandforms();
// Her karede karakterin yerşekillerine yakınlığını kontrol et
game.update = function () {
if (typeof character.update === "function") {
character.update();
}
for (var i = 0; i < landforms.length; i++) {
var lf = landforms[i];
var dx = lf.x - character.x;
var dy = lf.y - character.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist < 180) {
// Her yaklaşıldığında bilgi göster
showInfo(lf);
// İlk kez keşfediliyorsa kaydet
if (discoveredLandforms.indexOf(lf.type) === -1) {
discoveredLandforms.push(lf.type);
}
break;
}
}
};