/****
* 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() {
// Eğer 'canım babam' yazısı gösteriliyorsa köstebek çıkarma
if (babamShown && babamText) return;
// Ö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 () {
// Eğer 'canım babam' yazısı gösteriliyorsa köstebek çıkmasın
if (babamShown && babamText) return;
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)
// 'canım babam' ve 'you win' için kontrol değişkenleri
var babamShown = false;
var babamText = null;
var babamTimeout = null;
game.update = function () {
// 30 puana ulaşıldıysa ve daha önce gösterilmediyse
if (LK.getScore() >= 30 && !babamShown) {
babamShown = true;
// 'canım babam' yazısını ekrana ortala
babamText = new Text2('canım babam', {
size: 180,
fill: 0xFF3B3B
});
babamText.anchor.set(0.5, 0.5);
babamText.x = GAME_W / 2;
babamText.y = GAME_H / 2;
game.addChild(babamText);
// 5 sn sonra 'you win' göster ve yazıyı kaldır
babamTimeout = LK.setTimeout(function () {
if (babamText) {
babamText.destroy();
babamText = null;
}
LK.showYouWin();
}, 5000);
}
};
// 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() {
// Eğer 'canım babam' yazısı gösteriliyorsa köstebek çıkarma
if (babamShown && babamText) return;
// Ö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 () {
// Eğer 'canım babam' yazısı gösteriliyorsa köstebek çıkmasın
if (babamShown && babamText) return;
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)
// 'canım babam' ve 'you win' için kontrol değişkenleri
var babamShown = false;
var babamText = null;
var babamTimeout = null;
game.update = function () {
// 30 puana ulaşıldıysa ve daha önce gösterilmediyse
if (LK.getScore() >= 30 && !babamShown) {
babamShown = true;
// 'canım babam' yazısını ekrana ortala
babamText = new Text2('canım babam', {
size: 180,
fill: 0xFF3B3B
});
babamText.anchor.set(0.5, 0.5);
babamText.x = GAME_W / 2;
babamText.y = GAME_H / 2;
game.addChild(babamText);
// 5 sn sonra 'you win' göster ve yazıyı kaldır
babamTimeout = LK.setTimeout(function () {
if (babamText) {
babamText.destroy();
babamText = null;
}
LK.showYouWin();
}, 5000);
}
};
// Oyun başlatıldığında başlat
resetGame();