User prompt
simgeleri görünmez yap
Code edit (1 edits merged)
Please save this source code
User prompt
arka plan gerçekçi olsun
User prompt
bir karekter olsun ve öyle yerşekillerinin yanına gidelim ve oyun pixelartı kullanıp gerçekçi olsun
User prompt
yerşekillerinin olduğu ve o yerşekillerini keşfedip öğrenebildiğimiz bir oyun
User prompt
Yerşekilleri Keşfi
Initial prompt
yerşekillerinin olduğu ve o yerşekillerini keşfedip öğrenebildiğimiz bir oyun
/****
* 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;
}
}
};