/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Hayvan Sınıfı (Base) var Animal = Container.expand(function () { var self = Container.call(this); // Bu sınıf doğrudan kullanılmaz, alt sınıflar kullanır. self.speed = 6; self.dirX = 0; self.dirY = 0; self.point = 1; self.assetId = ''; self.asset = null; // Hareket yönünü rastgele ayarla self.setRandomDirection = function () { var angle = Math.random() * Math.PI * 2; self.dirX = Math.cos(angle); self.dirY = Math.sin(angle); }; // Ekran kenarına çarptığında yön değiştir self.bounceIfNeeded = function () { var margin = 40; if (self.x < margin) self.dirX = Math.abs(self.dirX); if (self.x > 2048 - margin) self.dirX = -Math.abs(self.dirX); if (self.y < 200) self.dirY = Math.abs(self.dirY); if (self.y > 2732 - margin) self.dirY = -Math.abs(self.dirY); }; self.update = function () { self.x += self.dirX * self.speed; self.y += self.dirY * self.speed; self.bounceIfNeeded(); }; return self; }); // Tavşan (Rabbit) var Rabbit = Animal.expand(function () { var self = Animal.call(this); self.assetId = 'rabbit'; self.point = -1; // Tavşan vurunca -1 puan// DEĞİŞTİ self.speed = 8 + Math.random() * 2; self.asset = self.attachAsset('rabbit', { anchorX: 0.5, anchorY: 0.5 }); self.setRandomDirection(); return self; }); // Fare (Mouse) var Mouse = Animal.expand(function () { var self = Animal.call(this); self.assetId = 'mouse'; self.point = -2; // Fare vurunca -2 puan// DEĞİŞTİ self.speed = 10 + Math.random() * 2; self.asset = self.attachAsset('mouse', { anchorX: 0.5, anchorY: 0.5 }); self.setRandomDirection(); return self; }); // Ceylan (Deer) var Deer = Animal.expand(function () { var self = Animal.call(this); self.assetId = 'deer'; self.point = 4; self.speed = 7 + Math.random() * 2; self.asset = self.attachAsset('deer', { anchorX: 0.5, anchorY: 0.5 }); self.setRandomDirection(); return self; }); // Domuz (Boar) var Boar = Animal.expand(function () { var self = Animal.call(this); self.assetId = 'boar'; self.point = 3; self.speed = 6 + Math.random() * 2; self.asset = self.attachAsset('boar', { anchorX: 0.5, anchorY: 0.5 }); self.setRandomDirection(); return self; }); // Ok (Arrow) Sınıfı var Arrow = Container.expand(function () { var self = Container.call(this); var arrowAsset = self.attachAsset('arrow', { anchorX: 0.5, anchorY: 1 }); self.speed = -32; // Okun yukarıya hızı self.update = function () { // Okun yönü ve hızı atanmışsa onları kullan if (typeof self.vx === "number" && typeof self.vy === "number") { self.x += self.vx; self.y += self.vy; } else { self.y += self.speed; } }; return self; }); // Yay (Bow) Sınıfı var Bow = Container.expand(function () { var self = Container.call(this); // Yay görseli için placeholder: kahverengi kutu ve yay şekli // Kullanıcı kendi görselini ekleyebilir, burada basit bir kutu ile gösteriyoruz self.asset = self.attachAsset('bow', { anchorX: 0.5, anchorY: 1 }); return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2e4d1b // Orman yeşili }); /**** * Game Code ****/ // Skor göstergesi // Hayvan ve ok görselleri kullanıcı tarafından eklenecektir. Şimdilik placeholder şekiller kullanıyoruz. var scoreTxt = new Text2('0', { size: 120, fill: 0xFFF700 }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Yay (bow) sabit pozisyonu var bowStartX = 2048 / 2; var bowStartY = 2732 - 80; var bow = null; // Ok (arrow) sabit pozisyonu var arrowStartX = 2048 / 2; var arrowStartY = 2732 - 180; // Ok objeleri dizisi (birden fazla ok olabilir) var arrows = []; // Hayvanlar dizisi var animals = []; // Hayvanları başlat function spawnAnimals() { // FARE ve TAVŞAN daha fazla olacak şekilde başlat var margin = 200; // 1 geyik var deer = new Deer(); deer.x = margin + Math.random() * (2048 - 2 * margin); deer.y = 600 + Math.random() * 600; animals.push(deer); game.addChild(deer); // 1 domuz var boar = new Boar(); boar.x = margin + Math.random() * (2048 - 2 * margin); boar.y = 900 + Math.random() * 600; animals.push(boar); game.addChild(boar); // 2 tavşan for (var i = 0; i < 2; i++) { var rabbit = new Rabbit(); rabbit.x = margin + Math.random() * (2048 - 2 * margin); rabbit.y = 1200 + Math.random() * 600; animals.push(rabbit); game.addChild(rabbit); } // 2 fare for (var i = 0; i < 2; i++) { var mouse = new Mouse(); mouse.x = margin + Math.random() * (2048 - 2 * margin); mouse.y = 1500 + Math.random() * 600; animals.push(mouse); game.addChild(mouse); } } // Ok objesini başlat function resetArrow() { // Artık tek bir ok yok, bu fonksiyon kullanılmayacak. } // Skoru güncelle function updateScoreText() { scoreTxt.setText(LK.getScore()); } // Oyun başlangıcı spawnAnimals(); // Yay objesini başlat ve ekle if (bow) { bow.destroy(); bow = null; } bow = new Bow(); bow.x = bowStartX; bow.y = bowStartY; game.addChild(bow); resetArrow(); updateScoreText(); // Ok atma işlemi (ekrana dokununca) game.down = function (x, y, obj) { // Yeni bir ok oluştur ve diziye ekle var newArrow = new Arrow(); newArrow.x = arrowStartX; newArrow.y = arrowStartY; // Hedef noktaya vektör hesapla (oku tıklanan yere doğru eğimli gönder) var dx = x - newArrow.x; var dy = y - newArrow.y; var length = Math.sqrt(dx * dx + dy * dy); var speed = 32; if (length > 0) { newArrow.vx = dx / length * speed; newArrow.vy = dy / length * speed; // Oku hedefe doğru döndür (görsel olarak eğimli) var angle = Math.atan2(newArrow.vx, -newArrow.vy); // Okun ucu yukarı bakıyor, bu yüzden -vy // Ok asseti ilk başta yukarı bakıyor, döndürmek için rotation ayarla if (newArrow.children && newArrow.children.length > 0) { newArrow.children[0].rotation = angle; } } else { newArrow.vx = 0; newArrow.vy = -speed; if (newArrow.children && newArrow.children.length > 0) { newArrow.children[0].rotation = 0; } } game.addChild(newArrow); arrows.push(newArrow); LK.getSound('arrow_shot').play(); }; // Oyun güncelleme döngüsü game.update = function () { // Hayvanları güncelle for (var i = 0; i < animals.length; i++) { animals[i].update(); } // Tüm okları güncelle for (var a = arrows.length - 1; a >= 0; a--) { var arrowObj = arrows[a]; arrowObj.update(); // Ok ekran dışına çıktıysa yok et if (arrowObj.y < -100) { arrowObj.destroy(); arrows.splice(a, 1); continue; } // Ok ve hayvan çarpışması kontrolü for (var i = animals.length - 1; i >= 0; i--) { var animal = animals[i]; if (arrowObj.intersects(animal)) { // Skoru artır LK.setScore(LK.getScore() + animal.point); updateScoreText(); // Domuz vurulduysa sesi çal if (animal.assetId === 'boar') { LK.getSound('domuz_vurma').play(); } // Geyik vurulduysa sesi çal if (animal.assetId === 'deer') { LK.getSound('domuz_vurma').play(); } // Fare veya tavşan vurulduysa sesi çal if (animal.assetId === 'mouse' || animal.assetId === 'rabbit') { LK.getSound('fare_vurma').play(); } // Hayvanı yok et ve yenisini oluştur animal.destroy(); animals.splice(i, 1); // Yeni hayvanı aynı türden ekle var newAnimal; if (animal.assetId === 'deer') { newAnimal = new Deer(); } else if (animal.assetId === 'boar') { newAnimal = new Boar(); } else if (animal.assetId === 'rabbit') { newAnimal = new Rabbit(); } else { newAnimal = new Mouse(); } // Rastgele konum var margin = 200; newAnimal.x = margin + Math.random() * (2048 - 2 * margin); newAnimal.y = 400 + Math.random() * 1800; animals.push(newAnimal); game.addChild(newAnimal); // Vurulan hayvanı kısa bir renk efektiyle göster LK.effects.flashObject(newAnimal, 0xffffff, 200); // Oku yok et arrowObj.destroy(); arrows.splice(a, 1); // Skor 50 veya üstü ise oyunu bitir if (LK.getScore() >= 50) { LK.showYouWin(); return; } // Skor -25 veya daha düşükse oyunu kaybettir if (LK.getScore() <= -25) { LK.showGameOver(); return; } break; // Bu ok başka hayvanı vuramaz, döngüden çık } } } }; // Okun sabit pozisyonda görünmesi için move/up eventlerine gerek yok. // Oyun sadece dokunma ile ok fırlatıyor ve ok uçarken tekrar atılamıyor.
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Hayvan Sınıfı (Base)
var Animal = Container.expand(function () {
var self = Container.call(this);
// Bu sınıf doğrudan kullanılmaz, alt sınıflar kullanır.
self.speed = 6;
self.dirX = 0;
self.dirY = 0;
self.point = 1;
self.assetId = '';
self.asset = null;
// Hareket yönünü rastgele ayarla
self.setRandomDirection = function () {
var angle = Math.random() * Math.PI * 2;
self.dirX = Math.cos(angle);
self.dirY = Math.sin(angle);
};
// Ekran kenarına çarptığında yön değiştir
self.bounceIfNeeded = function () {
var margin = 40;
if (self.x < margin) self.dirX = Math.abs(self.dirX);
if (self.x > 2048 - margin) self.dirX = -Math.abs(self.dirX);
if (self.y < 200) self.dirY = Math.abs(self.dirY);
if (self.y > 2732 - margin) self.dirY = -Math.abs(self.dirY);
};
self.update = function () {
self.x += self.dirX * self.speed;
self.y += self.dirY * self.speed;
self.bounceIfNeeded();
};
return self;
});
// Tavşan (Rabbit)
var Rabbit = Animal.expand(function () {
var self = Animal.call(this);
self.assetId = 'rabbit';
self.point = -1; // Tavşan vurunca -1 puan// DEĞİŞTİ
self.speed = 8 + Math.random() * 2;
self.asset = self.attachAsset('rabbit', {
anchorX: 0.5,
anchorY: 0.5
});
self.setRandomDirection();
return self;
});
// Fare (Mouse)
var Mouse = Animal.expand(function () {
var self = Animal.call(this);
self.assetId = 'mouse';
self.point = -2; // Fare vurunca -2 puan// DEĞİŞTİ
self.speed = 10 + Math.random() * 2;
self.asset = self.attachAsset('mouse', {
anchorX: 0.5,
anchorY: 0.5
});
self.setRandomDirection();
return self;
});
// Ceylan (Deer)
var Deer = Animal.expand(function () {
var self = Animal.call(this);
self.assetId = 'deer';
self.point = 4;
self.speed = 7 + Math.random() * 2;
self.asset = self.attachAsset('deer', {
anchorX: 0.5,
anchorY: 0.5
});
self.setRandomDirection();
return self;
});
// Domuz (Boar)
var Boar = Animal.expand(function () {
var self = Animal.call(this);
self.assetId = 'boar';
self.point = 3;
self.speed = 6 + Math.random() * 2;
self.asset = self.attachAsset('boar', {
anchorX: 0.5,
anchorY: 0.5
});
self.setRandomDirection();
return self;
});
// Ok (Arrow) Sınıfı
var Arrow = Container.expand(function () {
var self = Container.call(this);
var arrowAsset = self.attachAsset('arrow', {
anchorX: 0.5,
anchorY: 1
});
self.speed = -32; // Okun yukarıya hızı
self.update = function () {
// Okun yönü ve hızı atanmışsa onları kullan
if (typeof self.vx === "number" && typeof self.vy === "number") {
self.x += self.vx;
self.y += self.vy;
} else {
self.y += self.speed;
}
};
return self;
});
// Yay (Bow) Sınıfı
var Bow = Container.expand(function () {
var self = Container.call(this);
// Yay görseli için placeholder: kahverengi kutu ve yay şekli
// Kullanıcı kendi görselini ekleyebilir, burada basit bir kutu ile gösteriyoruz
self.asset = self.attachAsset('bow', {
anchorX: 0.5,
anchorY: 1
});
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x2e4d1b // Orman yeşili
});
/****
* Game Code
****/
// Skor göstergesi
// Hayvan ve ok görselleri kullanıcı tarafından eklenecektir. Şimdilik placeholder şekiller kullanıyoruz.
var scoreTxt = new Text2('0', {
size: 120,
fill: 0xFFF700
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Yay (bow) sabit pozisyonu
var bowStartX = 2048 / 2;
var bowStartY = 2732 - 80;
var bow = null;
// Ok (arrow) sabit pozisyonu
var arrowStartX = 2048 / 2;
var arrowStartY = 2732 - 180;
// Ok objeleri dizisi (birden fazla ok olabilir)
var arrows = [];
// Hayvanlar dizisi
var animals = [];
// Hayvanları başlat
function spawnAnimals() {
// FARE ve TAVŞAN daha fazla olacak şekilde başlat
var margin = 200;
// 1 geyik
var deer = new Deer();
deer.x = margin + Math.random() * (2048 - 2 * margin);
deer.y = 600 + Math.random() * 600;
animals.push(deer);
game.addChild(deer);
// 1 domuz
var boar = new Boar();
boar.x = margin + Math.random() * (2048 - 2 * margin);
boar.y = 900 + Math.random() * 600;
animals.push(boar);
game.addChild(boar);
// 2 tavşan
for (var i = 0; i < 2; i++) {
var rabbit = new Rabbit();
rabbit.x = margin + Math.random() * (2048 - 2 * margin);
rabbit.y = 1200 + Math.random() * 600;
animals.push(rabbit);
game.addChild(rabbit);
}
// 2 fare
for (var i = 0; i < 2; i++) {
var mouse = new Mouse();
mouse.x = margin + Math.random() * (2048 - 2 * margin);
mouse.y = 1500 + Math.random() * 600;
animals.push(mouse);
game.addChild(mouse);
}
}
// Ok objesini başlat
function resetArrow() {
// Artık tek bir ok yok, bu fonksiyon kullanılmayacak.
}
// Skoru güncelle
function updateScoreText() {
scoreTxt.setText(LK.getScore());
}
// Oyun başlangıcı
spawnAnimals();
// Yay objesini başlat ve ekle
if (bow) {
bow.destroy();
bow = null;
}
bow = new Bow();
bow.x = bowStartX;
bow.y = bowStartY;
game.addChild(bow);
resetArrow();
updateScoreText();
// Ok atma işlemi (ekrana dokununca)
game.down = function (x, y, obj) {
// Yeni bir ok oluştur ve diziye ekle
var newArrow = new Arrow();
newArrow.x = arrowStartX;
newArrow.y = arrowStartY;
// Hedef noktaya vektör hesapla (oku tıklanan yere doğru eğimli gönder)
var dx = x - newArrow.x;
var dy = y - newArrow.y;
var length = Math.sqrt(dx * dx + dy * dy);
var speed = 32;
if (length > 0) {
newArrow.vx = dx / length * speed;
newArrow.vy = dy / length * speed;
// Oku hedefe doğru döndür (görsel olarak eğimli)
var angle = Math.atan2(newArrow.vx, -newArrow.vy); // Okun ucu yukarı bakıyor, bu yüzden -vy
// Ok asseti ilk başta yukarı bakıyor, döndürmek için rotation ayarla
if (newArrow.children && newArrow.children.length > 0) {
newArrow.children[0].rotation = angle;
}
} else {
newArrow.vx = 0;
newArrow.vy = -speed;
if (newArrow.children && newArrow.children.length > 0) {
newArrow.children[0].rotation = 0;
}
}
game.addChild(newArrow);
arrows.push(newArrow);
LK.getSound('arrow_shot').play();
};
// Oyun güncelleme döngüsü
game.update = function () {
// Hayvanları güncelle
for (var i = 0; i < animals.length; i++) {
animals[i].update();
}
// Tüm okları güncelle
for (var a = arrows.length - 1; a >= 0; a--) {
var arrowObj = arrows[a];
arrowObj.update();
// Ok ekran dışına çıktıysa yok et
if (arrowObj.y < -100) {
arrowObj.destroy();
arrows.splice(a, 1);
continue;
}
// Ok ve hayvan çarpışması kontrolü
for (var i = animals.length - 1; i >= 0; i--) {
var animal = animals[i];
if (arrowObj.intersects(animal)) {
// Skoru artır
LK.setScore(LK.getScore() + animal.point);
updateScoreText();
// Domuz vurulduysa sesi çal
if (animal.assetId === 'boar') {
LK.getSound('domuz_vurma').play();
}
// Geyik vurulduysa sesi çal
if (animal.assetId === 'deer') {
LK.getSound('domuz_vurma').play();
}
// Fare veya tavşan vurulduysa sesi çal
if (animal.assetId === 'mouse' || animal.assetId === 'rabbit') {
LK.getSound('fare_vurma').play();
}
// Hayvanı yok et ve yenisini oluştur
animal.destroy();
animals.splice(i, 1);
// Yeni hayvanı aynı türden ekle
var newAnimal;
if (animal.assetId === 'deer') {
newAnimal = new Deer();
} else if (animal.assetId === 'boar') {
newAnimal = new Boar();
} else if (animal.assetId === 'rabbit') {
newAnimal = new Rabbit();
} else {
newAnimal = new Mouse();
}
// Rastgele konum
var margin = 200;
newAnimal.x = margin + Math.random() * (2048 - 2 * margin);
newAnimal.y = 400 + Math.random() * 1800;
animals.push(newAnimal);
game.addChild(newAnimal);
// Vurulan hayvanı kısa bir renk efektiyle göster
LK.effects.flashObject(newAnimal, 0xffffff, 200);
// Oku yok et
arrowObj.destroy();
arrows.splice(a, 1);
// Skor 50 veya üstü ise oyunu bitir
if (LK.getScore() >= 50) {
LK.showYouWin();
return;
}
// Skor -25 veya daha düşükse oyunu kaybettir
if (LK.getScore() <= -25) {
LK.showGameOver();
return;
}
break; // Bu ok başka hayvanı vuramaz, döngüden çık
}
}
}
};
// Okun sabit pozisyonda görünmesi için move/up eventlerine gerek yok.
// Oyun sadece dokunma ile ok fırlatıyor ve ok uçarken tekrar atılamıyor.
ok istiyorum eski zamanlarda hayvan avalrken kullanılan oklardan. In-Game asset. 2d. High contrast. No shadows
tatlı bir pembe domuz. In-Game asset. 2d. High contrast. No shadows
avcılıkta kullanılan yay. In-Game asset. 2d. High contrast. No shadows
tatlı bir ceylan. In-Game asset. 2d. High contrast. No shadows
tatlı bir beyaz fare. In-Game asset. 2d. High contrast. No shadows
tatli bir siyah beyaz tavşan. In-Game asset. 2d. High contrast. No shadows