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