/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Köstebek (Mole) sınıfı
var Mole = Container.expand(function () {
var self = Container.call(this);
// Mole grafiği
var moleGfx = self.attachAsset('mole', {
anchorX: 0.5,
anchorY: 1
});
// Vurma efekti (başta görünmez)
var hitEffect = self.attachAsset('hitEffect', {
anchorX: 0.5,
anchorY: 1,
alpha: 0
});
// Mole aktif mi (vurulabilir mi)
self.active = false;
// Mole'nin gösterildiği süreyi takip et
self.showTimeout = null;
// Vurulduğunda çağrılır
self.hit = function () {
if (!self.active) {
return;
}
self.active = false;
// Efekti göster
hitEffect.alpha = 0.7;
tween(hitEffect, {
alpha: 0
}, {
duration: 350,
easing: tween.easeOut
});
// Mole'yi sakla
self.hide();
// Puanı artır
LK.setScore(LK.getScore() + 5);
scoreTxt.setText(LK.getScore());
// Zorluk artışı: skor belirli aralıklara gelince gösterim süresini kısalt
updateMoleShowTime();
};
// Mole'yi göster
self.show = function (x, y, showTime) {
self.x = x;
self.y = y;
self.visible = true;
self.active = true;
// Efekti sıfırla
hitEffect.alpha = 0;
// Zıplama animasyonu (topraktan çıkma)
self.scaleY = 0.2;
tween(self, {
scaleY: 1
}, {
duration: 120,
easing: tween.easeOut
});
// Belirli süre sonra otomatik sakla
if (self.showTimeout) {
LK.clearTimeout(self.showTimeout);
}
self.showTimeout = LK.setTimeout(function () {
self.missed();
}, showTime);
};
// Mole'yi sakla
self.hide = function () {
self.visible = false;
self.active = false;
if (self.showTimeout) {
LK.clearTimeout(self.showTimeout);
self.showTimeout = null;
}
};
// Mole kaçırılırsa
self.missed = function () {
if (!self.active) {
return;
}
self.active = false;
self.hide();
// Puanı azalt
LK.setScore(Math.max(0, LK.getScore() - 1));
scoreTxt.setText(LK.getScore());
// Ekranı kısa süre kırmızıya flashla
LK.effects.flashScreen(0xff0000, 200);
// Hata sayısını artır
missedCount++;
if (missedCount >= maxMissed) {
LK.showGameOver();
}
};
// Dokunma olayı
self.down = function (x, y, obj) {
if (self.active) {
self.hit();
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x4caf50 // Çimen yeşili arka plan
});
/****
* Game Code
****/
// Oyun alanı boyutları
// Puan göstergesi için fonta gerek yok, Text2 kullanılacak
// Animasyonlar için tween eklentisi
var GAME_W = 2048;
var GAME_H = 2732;
// Arka plan görseli ekle
var background = LK.getAsset('background', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0,
width: GAME_W,
height: GAME_H
});
game.addChildAt(background, 0); // En arkaya ekle
// Puan göstergesi
var scoreTxt = new Text2('0', {
size: 120,
fill: 0xFFF700
});
scoreTxt.anchor.set(0.5, 0);
// Puanı üstte ortala, üstten 40px boşluk bırak
scoreTxt.y = 40;
LK.gui.top.addChild(scoreTxt);
// Kaçırılan köstebek sayısı
var missedCount = 0;
var maxMissed = 3;
// Zorluk: köstebek gösterim süresi (ms)
var moleShowTime = 1100; // Başlangıçta 1.1 saniye
function updateMoleShowTime() {
// Skor arttıkça köstebek daha kısa süre görünür
var score = LK.getScore();
if (score >= 20) {
moleShowTime = 600;
} else if (score >= 10) {
moleShowTime = 800;
} else if (score >= 5) {
moleShowTime = 950;
}
}
// Oyun alanında köstebeklerin çıkacağı pozisyonlar (3x3 grid)
var molePositions = [];
(function () {
var cols = 3,
rows = 3;
var marginX = 320,
marginY = 400;
var spacingX = (GAME_W - 2 * marginX) / (cols - 1);
var spacingY = (GAME_H - 2 * marginY) / (rows - 1);
for (var r = 0; r < rows; r++) {
for (var c = 0; c < cols; c++) {
var x = marginX + c * spacingX;
var y = marginY + r * spacingY + 180; // Hafif aşağıda, daha doğal görünüm
molePositions.push({
x: x,
y: y
});
}
}
})();
// 3x3 gridde toplam 9 köstebek
var moles = [];
for (var i = 0; i < 9; i++) {
var mole = new Mole();
mole.hide();
moles.push(mole);
game.addChild(mole);
}
// Aktif köstebekleri takip et
var activeMoleIndex = -1;
// Yeni köstebek çıkar
function showRandomMole() {
// Önce tüm köstebekleri gizle
for (var i = 0; i < moles.length; i++) {
moles[i].hide();
}
// Rastgele bir pozisyon seç
var idx = Math.floor(Math.random() * molePositions.length);
activeMoleIndex = idx;
var pos = molePositions[idx];
moles[idx].show(pos.x, pos.y, moleShowTime);
}
// Oyun döngüsü: belirli aralıklarla yeni köstebek çıkar
var moleTimer = null;
function startMoleLoop() {
if (moleTimer) {
LK.clearInterval(moleTimer);
}
moleTimer = LK.setInterval(function () {
showRandomMole();
}, moleShowTime + 350); // Biraz aralık bırak
}
// Oyun başlatıldığında sıfırla
function resetGame() {
LK.setScore(0);
scoreTxt.setText('0');
missedCount = 0;
moleShowTime = 1100;
updateMoleShowTime();
for (var i = 0; i < moles.length; i++) {
moles[i].hide();
}
showRandomMole();
startMoleLoop();
}
// Oyun bittiğinde timerları temizle
LK.on('gameover', function () {
if (moleTimer) {
LK.clearInterval(moleTimer);
}
for (var i = 0; i < moles.length; i++) {
moles[i].hide();
}
});
// Oyun kazanınca (ör: 30 puan)
// Yeni alan kontrolü için flag
var areaLevel = 1;
var areaTransitioned = false;
game.update = function () {
// 50 puanda yeni alana geçiş
if (!areaTransitioned && LK.getScore() >= 50) {
areaTransitioned = true;
areaLevel = 2;
// Arka planı değiştir (farklı bir resim kullanılacaksa asset id'si burada değiştirilebilir)
var newBg = LK.getAsset('background', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0,
width: GAME_W,
height: GAME_H
});
if (background && background.parent) {
background.parent.removeChild(background);
}
background = newBg;
game.addChildAt(background, 0);
// Yeni alan için köstebek pozisyonlarını güncelle (4x4 grid)
molePositions = [];
var cols = 4,
rows = 4;
var marginX = 220,
marginY = 300;
var spacingX = (GAME_W - 2 * marginX) / (cols - 1);
var spacingY = (GAME_H - 2 * marginY) / (rows - 1);
for (var r = 0; r < rows; r++) {
for (var c = 0; c < cols; c++) {
var x = marginX + c * spacingX;
var y = marginY + r * spacingY + 120;
molePositions.push({
x: x,
y: y
});
}
}
// Eski köstebekleri temizle
for (var i = 0; i < moles.length; i++) {
moles[i].hide();
if (typeof moles[i].destroy === "function") {
moles[i].destroy();
}
}
moles = [];
for (var i = 0; i < 16; i++) {
var mole = new Mole();
mole.hide();
moles.push(mole);
game.addChild(mole);
}
// Yeni alan için zorluk ayarı
moleShowTime = 500;
updateMoleShowTime();
showRandomMole();
startMoleLoop();
}
// Oyun kazanınca (ör: 50 puan ve üzeri)
if (LK.getScore() >= 50) {
// Sadece bir kez tetiklensin diye flag
if (!game._winSequenceStarted) {
game._winSequenceStarted = true;
// Tüm köstebekleri ve timerları durdur
areaTransitioned = true;
if (moleTimer) {
LK.clearInterval(moleTimer);
}
for (var i = 0; i < moles.length; i++) {
moles[i].hide();
}
// "Canım Annem" yazısı ekrana gelsin
var annemTxt = new Text2("Canım Annem", {
size: 180,
fill: 0xff3e9e
});
annemTxt.anchor.set(0.5, 0.5);
annemTxt.x = GAME_W / 2;
annemTxt.y = GAME_H / 2;
game.addChild(annemTxt);
// 5 saniye sonra yazıyı kaldırıp you win göster
LK.setTimeout(function () {
if (annemTxt && annemTxt.parent) {
annemTxt.parent.removeChild(annemTxt);
}
LK.showYouWin();
}, 5000);
return;
}
return;
}
};
// Oyun başlatıldığında başlat
resetGame(); /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Köstebek (Mole) sınıfı
var Mole = Container.expand(function () {
var self = Container.call(this);
// Mole grafiği
var moleGfx = self.attachAsset('mole', {
anchorX: 0.5,
anchorY: 1
});
// Vurma efekti (başta görünmez)
var hitEffect = self.attachAsset('hitEffect', {
anchorX: 0.5,
anchorY: 1,
alpha: 0
});
// Mole aktif mi (vurulabilir mi)
self.active = false;
// Mole'nin gösterildiği süreyi takip et
self.showTimeout = null;
// Vurulduğunda çağrılır
self.hit = function () {
if (!self.active) {
return;
}
self.active = false;
// Efekti göster
hitEffect.alpha = 0.7;
tween(hitEffect, {
alpha: 0
}, {
duration: 350,
easing: tween.easeOut
});
// Mole'yi sakla
self.hide();
// Puanı artır
LK.setScore(LK.getScore() + 5);
scoreTxt.setText(LK.getScore());
// Zorluk artışı: skor belirli aralıklara gelince gösterim süresini kısalt
updateMoleShowTime();
};
// Mole'yi göster
self.show = function (x, y, showTime) {
self.x = x;
self.y = y;
self.visible = true;
self.active = true;
// Efekti sıfırla
hitEffect.alpha = 0;
// Zıplama animasyonu (topraktan çıkma)
self.scaleY = 0.2;
tween(self, {
scaleY: 1
}, {
duration: 120,
easing: tween.easeOut
});
// Belirli süre sonra otomatik sakla
if (self.showTimeout) {
LK.clearTimeout(self.showTimeout);
}
self.showTimeout = LK.setTimeout(function () {
self.missed();
}, showTime);
};
// Mole'yi sakla
self.hide = function () {
self.visible = false;
self.active = false;
if (self.showTimeout) {
LK.clearTimeout(self.showTimeout);
self.showTimeout = null;
}
};
// Mole kaçırılırsa
self.missed = function () {
if (!self.active) {
return;
}
self.active = false;
self.hide();
// Puanı azalt
LK.setScore(Math.max(0, LK.getScore() - 1));
scoreTxt.setText(LK.getScore());
// Ekranı kısa süre kırmızıya flashla
LK.effects.flashScreen(0xff0000, 200);
// Hata sayısını artır
missedCount++;
if (missedCount >= maxMissed) {
LK.showGameOver();
}
};
// Dokunma olayı
self.down = function (x, y, obj) {
if (self.active) {
self.hit();
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x4caf50 // Çimen yeşili arka plan
});
/****
* Game Code
****/
// Oyun alanı boyutları
// Puan göstergesi için fonta gerek yok, Text2 kullanılacak
// Animasyonlar için tween eklentisi
var GAME_W = 2048;
var GAME_H = 2732;
// Arka plan görseli ekle
var background = LK.getAsset('background', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0,
width: GAME_W,
height: GAME_H
});
game.addChildAt(background, 0); // En arkaya ekle
// Puan göstergesi
var scoreTxt = new Text2('0', {
size: 120,
fill: 0xFFF700
});
scoreTxt.anchor.set(0.5, 0);
// Puanı üstte ortala, üstten 40px boşluk bırak
scoreTxt.y = 40;
LK.gui.top.addChild(scoreTxt);
// Kaçırılan köstebek sayısı
var missedCount = 0;
var maxMissed = 3;
// Zorluk: köstebek gösterim süresi (ms)
var moleShowTime = 1100; // Başlangıçta 1.1 saniye
function updateMoleShowTime() {
// Skor arttıkça köstebek daha kısa süre görünür
var score = LK.getScore();
if (score >= 20) {
moleShowTime = 600;
} else if (score >= 10) {
moleShowTime = 800;
} else if (score >= 5) {
moleShowTime = 950;
}
}
// Oyun alanında köstebeklerin çıkacağı pozisyonlar (3x3 grid)
var molePositions = [];
(function () {
var cols = 3,
rows = 3;
var marginX = 320,
marginY = 400;
var spacingX = (GAME_W - 2 * marginX) / (cols - 1);
var spacingY = (GAME_H - 2 * marginY) / (rows - 1);
for (var r = 0; r < rows; r++) {
for (var c = 0; c < cols; c++) {
var x = marginX + c * spacingX;
var y = marginY + r * spacingY + 180; // Hafif aşağıda, daha doğal görünüm
molePositions.push({
x: x,
y: y
});
}
}
})();
// 3x3 gridde toplam 9 köstebek
var moles = [];
for (var i = 0; i < 9; i++) {
var mole = new Mole();
mole.hide();
moles.push(mole);
game.addChild(mole);
}
// Aktif köstebekleri takip et
var activeMoleIndex = -1;
// Yeni köstebek çıkar
function showRandomMole() {
// Önce tüm köstebekleri gizle
for (var i = 0; i < moles.length; i++) {
moles[i].hide();
}
// Rastgele bir pozisyon seç
var idx = Math.floor(Math.random() * molePositions.length);
activeMoleIndex = idx;
var pos = molePositions[idx];
moles[idx].show(pos.x, pos.y, moleShowTime);
}
// Oyun döngüsü: belirli aralıklarla yeni köstebek çıkar
var moleTimer = null;
function startMoleLoop() {
if (moleTimer) {
LK.clearInterval(moleTimer);
}
moleTimer = LK.setInterval(function () {
showRandomMole();
}, moleShowTime + 350); // Biraz aralık bırak
}
// Oyun başlatıldığında sıfırla
function resetGame() {
LK.setScore(0);
scoreTxt.setText('0');
missedCount = 0;
moleShowTime = 1100;
updateMoleShowTime();
for (var i = 0; i < moles.length; i++) {
moles[i].hide();
}
showRandomMole();
startMoleLoop();
}
// Oyun bittiğinde timerları temizle
LK.on('gameover', function () {
if (moleTimer) {
LK.clearInterval(moleTimer);
}
for (var i = 0; i < moles.length; i++) {
moles[i].hide();
}
});
// Oyun kazanınca (ör: 30 puan)
// Yeni alan kontrolü için flag
var areaLevel = 1;
var areaTransitioned = false;
game.update = function () {
// 50 puanda yeni alana geçiş
if (!areaTransitioned && LK.getScore() >= 50) {
areaTransitioned = true;
areaLevel = 2;
// Arka planı değiştir (farklı bir resim kullanılacaksa asset id'si burada değiştirilebilir)
var newBg = LK.getAsset('background', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0,
width: GAME_W,
height: GAME_H
});
if (background && background.parent) {
background.parent.removeChild(background);
}
background = newBg;
game.addChildAt(background, 0);
// Yeni alan için köstebek pozisyonlarını güncelle (4x4 grid)
molePositions = [];
var cols = 4,
rows = 4;
var marginX = 220,
marginY = 300;
var spacingX = (GAME_W - 2 * marginX) / (cols - 1);
var spacingY = (GAME_H - 2 * marginY) / (rows - 1);
for (var r = 0; r < rows; r++) {
for (var c = 0; c < cols; c++) {
var x = marginX + c * spacingX;
var y = marginY + r * spacingY + 120;
molePositions.push({
x: x,
y: y
});
}
}
// Eski köstebekleri temizle
for (var i = 0; i < moles.length; i++) {
moles[i].hide();
if (typeof moles[i].destroy === "function") {
moles[i].destroy();
}
}
moles = [];
for (var i = 0; i < 16; i++) {
var mole = new Mole();
mole.hide();
moles.push(mole);
game.addChild(mole);
}
// Yeni alan için zorluk ayarı
moleShowTime = 500;
updateMoleShowTime();
showRandomMole();
startMoleLoop();
}
// Oyun kazanınca (ör: 50 puan ve üzeri)
if (LK.getScore() >= 50) {
// Sadece bir kez tetiklensin diye flag
if (!game._winSequenceStarted) {
game._winSequenceStarted = true;
// Tüm köstebekleri ve timerları durdur
areaTransitioned = true;
if (moleTimer) {
LK.clearInterval(moleTimer);
}
for (var i = 0; i < moles.length; i++) {
moles[i].hide();
}
// "Canım Annem" yazısı ekrana gelsin
var annemTxt = new Text2("Canım Annem", {
size: 180,
fill: 0xff3e9e
});
annemTxt.anchor.set(0.5, 0.5);
annemTxt.x = GAME_W / 2;
annemTxt.y = GAME_H / 2;
game.addChild(annemTxt);
// 5 saniye sonra yazıyı kaldırıp you win göster
LK.setTimeout(function () {
if (annemTxt && annemTxt.parent) {
annemTxt.parent.removeChild(annemTxt);
}
LK.showYouWin();
}, 5000);
return;
}
return;
}
};
// Oyun başlatıldığında başlat
resetGame();