/**** * 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();