/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xffffff // White background for clarity
});
/****
* Game Code
****/
// --- HELP BUTTON & POPUP ---
// Help button (bottom right, avoid bottom 100px for safe area)
var helpBtnSize = 140;
var helpBtnMargin = 80;
var helpBtn = LK.getAsset('buttonBox', {
width: helpBtnSize,
height: helpBtnSize,
color: 0xc3abe3,
shape: 'box',
anchorX: 0.5,
anchorY: 0.5,
x: 2048 - helpBtnSize / 2 - helpBtnMargin,
y: 2732 - helpBtnSize / 2 - helpBtnMargin
});
game.addChild(helpBtn);
var helpBtnText = new Text2("?", {
size: 100,
fill: 0x4b2e83
});
helpBtnText.anchor.set(0.5, 0.5);
helpBtnText.x = helpBtn.x;
helpBtnText.y = helpBtn.y;
game.addChild(helpBtnText);
// Help popup (hidden by default)
var helpPopupWidth = 1200;
var helpPopupHeight = 900;
var helpPopupBg = LK.getAsset('inputBox', {
width: helpPopupWidth,
height: helpPopupHeight,
color: 0xffffff,
shape: 'box',
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2
});
helpPopupBg.visible = false;
game.addChild(helpPopupBg);
var helpPopupText = new Text2("Ekranda çıkan kelimelerin harf sayılarını rakamlara basarak yaz. Ok veya cevapla tuşuna basarak gönderebilirsiniz. Sile basarak yazınızı silebilirsiniz.", {
size: 70,
fill: 0x333333,
wordWrap: true,
wordWrapWidth: helpPopupWidth - 120,
align: "center"
});
helpPopupText.anchor.set(0.5, 0.5);
helpPopupText.x = helpPopupBg.x;
helpPopupText.y = helpPopupBg.y - 100;
helpPopupText.visible = false;
game.addChild(helpPopupText);
// Close button for popup
var closeBtnSize = 120;
var closeBtn = LK.getAsset('buttonBox', {
width: closeBtnSize,
height: closeBtnSize,
color: 0xc3abe3,
shape: 'box',
anchorX: 0.5,
anchorY: 0.5,
x: helpPopupBg.x + helpPopupWidth / 2 - closeBtnSize / 2 - 30,
y: helpPopupBg.y - helpPopupHeight / 2 + closeBtnSize / 2 + 30
});
closeBtn.visible = false;
game.addChild(closeBtn);
var closeBtnText = new Text2("X", {
size: 80,
fill: 0x4b2e83
});
closeBtnText.anchor.set(0.5, 0.5);
closeBtnText.x = closeBtn.x;
closeBtnText.y = closeBtn.y;
closeBtnText.visible = false;
game.addChild(closeBtnText);
// Show popup function
function showHelpPopup() {
helpPopupBg.visible = true;
helpPopupText.visible = true;
closeBtn.visible = true;
closeBtnText.visible = true;
inputActive = false;
}
// Hide popup function
function hideHelpPopup() {
helpPopupBg.visible = false;
helpPopupText.visible = false;
closeBtn.visible = false;
closeBtnText.visible = false;
inputActive = true;
}
// Button handlers
helpBtn.down = function (x, y, obj) {
showHelpPopup();
};
helpBtnText.down = helpBtn.down;
closeBtn.down = function (x, y, obj) {
hideHelpPopup();
};
closeBtnText.down = closeBtn.down;
// --- END ---;
var words = ["tarih", "okul", "merhaba", "günlük", "kitap", "hayat", "zaman", "insanlar", "kural", "üzgün", "mutluluk"];
var currentWord = "";
var score = 0;
var inputValue = "";
var inputBoxes = [];
var inputBoxWidth = 200;
var inputBoxHeight = 180;
var inputFontSize = 120;
var wordFontSize = 180;
var scoreFontSize = 100;
var inputActive = true;
// --- UI ELEMENTS ---
// Show current word at the top center
var wordText = new Text2("", {
size: wordFontSize,
fill: 0x222222
});
wordText.anchor.set(0.5, 0);
wordText.x = 2048 / 2;
wordText.y = 180;
game.addChild(wordText);
// Score display at top right (avoid top left for menu)
var scoreText = new Text2("0", {
size: scoreFontSize,
fill: 0x008080
});
scoreText.anchor.set(1, 0);
scoreText.x = 2048 - 80;
scoreText.y = 80;
game.addChild(scoreText);
// Input box centered
var inputBox = LK.getAsset('inputBox', {
width: inputBoxWidth,
height: inputBoxHeight,
color: 0xeeeeee,
shape: 'box',
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2 + 200
});
game.addChild(inputBox);
// Input text (user's answer)
var inputText = new Text2("", {
size: inputFontSize,
fill: 0x333333
});
inputText.anchor.set(0.5, 0.5);
inputText.x = inputBox.x;
inputText.y = inputBox.y;
game.addChild(inputText);
// "Cevapla" button
var buttonWidth = 400;
var buttonHeight = 140;
var buttonY = inputBox.y + inputBoxHeight / 2 + 120;
var buttonBox = LK.getAsset('buttonBox', {
width: buttonWidth,
height: buttonHeight,
color: 0x008080,
shape: 'box',
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: buttonY
});
game.addChild(buttonBox);
var buttonText = new Text2("Cevapla", {
size: 80,
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
buttonText.x = buttonBox.x;
buttonText.y = buttonBox.y;
game.addChild(buttonText);
// --- LOGIC ---
function pickRandomWord() {
var idx = Math.floor(Math.random() * words.length);
return words[idx];
}
function setNewWord() {
currentWord = pickRandomWord();
wordText.setText(currentWord);
inputValue = "";
inputText.setText("");
inputActive = true;
}
function updateScore() {
scoreText.setText(score);
}
// --- INPUT HANDLING ---
// Virtual number pad (0-9) for mobile
var keypadButtons = [];
var keypadLayout = [[1, 2, 3], [4, 5, 6], [7, 8, 9], ["Sil", 0, "OK"]];
var keypadStartX = 2048 / 2 - 1.5 * inputBoxWidth - 40;
var keypadStartY = buttonBox.y + buttonHeight / 2 + 80;
var keypadButtonW = inputBoxWidth;
var keypadButtonH = 120;
var keypadGap = 40;
for (var row = 0; row < keypadLayout.length; row++) {
for (var col = 0; col < keypadLayout[row].length; col++) {
var val = keypadLayout[row][col];
var btnX = keypadStartX + col * (keypadButtonW + keypadGap);
var btnY = keypadStartY + row * (keypadButtonH + keypadGap);
var btnAsset = LK.getAsset('keypadBtn', {
width: keypadButtonW,
height: keypadButtonH,
color: typeof val === "number" ? 0xffffff : 0xcccccc,
shape: 'box',
anchorX: 0.5,
anchorY: 0.5,
x: btnX + keypadButtonW / 2,
y: btnY + keypadButtonH / 2
});
game.addChild(btnAsset);
var btnText = new Text2(val + "", {
size: 70,
fill: 0x222222
});
btnText.anchor.set(0.5, 0.5);
btnText.x = btnAsset.x;
btnText.y = btnAsset.y;
game.addChild(btnText);
(function (val, btnAsset) {
btnAsset.down = function (x, y, obj) {
if (!inputActive) return;
if (val === "Sil") {
if (inputValue.length > 0) {
inputValue = inputValue.slice(0, -1);
inputText.setText(inputValue);
}
} else if (val === "OK") {
submitInput();
} else {
if (inputValue.length < 2) {
// Max 2 digits (for 10+ letter words, not needed here)
inputValue += val;
inputText.setText(inputValue);
}
}
};
})(val, btnAsset);
keypadButtons.push(btnAsset);
}
}
// Input box also focuses for input (for touch)
inputBox.down = function (x, y, obj) {
// No-op, just visual feedback
if (!inputActive) return;
LK.effects.flashObject(inputBox, 0x008080, 200);
};
// "Cevapla" button handler
buttonBox.down = function (x, y, obj) {
if (!inputActive) return;
submitInput();
};
buttonText.down = buttonBox.down;
// --- SUBMIT LOGIC ---
function submitInput() {
if (!inputActive) return;
inputActive = false;
var correct = parseInt(inputValue) === currentWord.length;
if (correct) {
score += 1;
updateScore();
LK.effects.flashObject(inputBox, 0x83de44, 300);
LK.setTimeout(function () {
setNewWord();
}, 350);
} else {
LK.effects.flashScreen(0xff0000, 600);
LK.showGameOver();
}
}
// --- GAME STARTUP ---
function resetGame() {
score = 0;
updateScore();
setNewWord();
inputActive = true;
}
resetGame();
// --- GAME UPDATE (not used, but required for tick-based logic if needed) ---
game.update = function () {
// No per-frame logic needed
};
// --- END --- /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xffffff // White background for clarity
});
/****
* Game Code
****/
// --- HELP BUTTON & POPUP ---
// Help button (bottom right, avoid bottom 100px for safe area)
var helpBtnSize = 140;
var helpBtnMargin = 80;
var helpBtn = LK.getAsset('buttonBox', {
width: helpBtnSize,
height: helpBtnSize,
color: 0xc3abe3,
shape: 'box',
anchorX: 0.5,
anchorY: 0.5,
x: 2048 - helpBtnSize / 2 - helpBtnMargin,
y: 2732 - helpBtnSize / 2 - helpBtnMargin
});
game.addChild(helpBtn);
var helpBtnText = new Text2("?", {
size: 100,
fill: 0x4b2e83
});
helpBtnText.anchor.set(0.5, 0.5);
helpBtnText.x = helpBtn.x;
helpBtnText.y = helpBtn.y;
game.addChild(helpBtnText);
// Help popup (hidden by default)
var helpPopupWidth = 1200;
var helpPopupHeight = 900;
var helpPopupBg = LK.getAsset('inputBox', {
width: helpPopupWidth,
height: helpPopupHeight,
color: 0xffffff,
shape: 'box',
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2
});
helpPopupBg.visible = false;
game.addChild(helpPopupBg);
var helpPopupText = new Text2("Ekranda çıkan kelimelerin harf sayılarını rakamlara basarak yaz. Ok veya cevapla tuşuna basarak gönderebilirsiniz. Sile basarak yazınızı silebilirsiniz.", {
size: 70,
fill: 0x333333,
wordWrap: true,
wordWrapWidth: helpPopupWidth - 120,
align: "center"
});
helpPopupText.anchor.set(0.5, 0.5);
helpPopupText.x = helpPopupBg.x;
helpPopupText.y = helpPopupBg.y - 100;
helpPopupText.visible = false;
game.addChild(helpPopupText);
// Close button for popup
var closeBtnSize = 120;
var closeBtn = LK.getAsset('buttonBox', {
width: closeBtnSize,
height: closeBtnSize,
color: 0xc3abe3,
shape: 'box',
anchorX: 0.5,
anchorY: 0.5,
x: helpPopupBg.x + helpPopupWidth / 2 - closeBtnSize / 2 - 30,
y: helpPopupBg.y - helpPopupHeight / 2 + closeBtnSize / 2 + 30
});
closeBtn.visible = false;
game.addChild(closeBtn);
var closeBtnText = new Text2("X", {
size: 80,
fill: 0x4b2e83
});
closeBtnText.anchor.set(0.5, 0.5);
closeBtnText.x = closeBtn.x;
closeBtnText.y = closeBtn.y;
closeBtnText.visible = false;
game.addChild(closeBtnText);
// Show popup function
function showHelpPopup() {
helpPopupBg.visible = true;
helpPopupText.visible = true;
closeBtn.visible = true;
closeBtnText.visible = true;
inputActive = false;
}
// Hide popup function
function hideHelpPopup() {
helpPopupBg.visible = false;
helpPopupText.visible = false;
closeBtn.visible = false;
closeBtnText.visible = false;
inputActive = true;
}
// Button handlers
helpBtn.down = function (x, y, obj) {
showHelpPopup();
};
helpBtnText.down = helpBtn.down;
closeBtn.down = function (x, y, obj) {
hideHelpPopup();
};
closeBtnText.down = closeBtn.down;
// --- END ---;
var words = ["tarih", "okul", "merhaba", "günlük", "kitap", "hayat", "zaman", "insanlar", "kural", "üzgün", "mutluluk"];
var currentWord = "";
var score = 0;
var inputValue = "";
var inputBoxes = [];
var inputBoxWidth = 200;
var inputBoxHeight = 180;
var inputFontSize = 120;
var wordFontSize = 180;
var scoreFontSize = 100;
var inputActive = true;
// --- UI ELEMENTS ---
// Show current word at the top center
var wordText = new Text2("", {
size: wordFontSize,
fill: 0x222222
});
wordText.anchor.set(0.5, 0);
wordText.x = 2048 / 2;
wordText.y = 180;
game.addChild(wordText);
// Score display at top right (avoid top left for menu)
var scoreText = new Text2("0", {
size: scoreFontSize,
fill: 0x008080
});
scoreText.anchor.set(1, 0);
scoreText.x = 2048 - 80;
scoreText.y = 80;
game.addChild(scoreText);
// Input box centered
var inputBox = LK.getAsset('inputBox', {
width: inputBoxWidth,
height: inputBoxHeight,
color: 0xeeeeee,
shape: 'box',
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2 + 200
});
game.addChild(inputBox);
// Input text (user's answer)
var inputText = new Text2("", {
size: inputFontSize,
fill: 0x333333
});
inputText.anchor.set(0.5, 0.5);
inputText.x = inputBox.x;
inputText.y = inputBox.y;
game.addChild(inputText);
// "Cevapla" button
var buttonWidth = 400;
var buttonHeight = 140;
var buttonY = inputBox.y + inputBoxHeight / 2 + 120;
var buttonBox = LK.getAsset('buttonBox', {
width: buttonWidth,
height: buttonHeight,
color: 0x008080,
shape: 'box',
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: buttonY
});
game.addChild(buttonBox);
var buttonText = new Text2("Cevapla", {
size: 80,
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
buttonText.x = buttonBox.x;
buttonText.y = buttonBox.y;
game.addChild(buttonText);
// --- LOGIC ---
function pickRandomWord() {
var idx = Math.floor(Math.random() * words.length);
return words[idx];
}
function setNewWord() {
currentWord = pickRandomWord();
wordText.setText(currentWord);
inputValue = "";
inputText.setText("");
inputActive = true;
}
function updateScore() {
scoreText.setText(score);
}
// --- INPUT HANDLING ---
// Virtual number pad (0-9) for mobile
var keypadButtons = [];
var keypadLayout = [[1, 2, 3], [4, 5, 6], [7, 8, 9], ["Sil", 0, "OK"]];
var keypadStartX = 2048 / 2 - 1.5 * inputBoxWidth - 40;
var keypadStartY = buttonBox.y + buttonHeight / 2 + 80;
var keypadButtonW = inputBoxWidth;
var keypadButtonH = 120;
var keypadGap = 40;
for (var row = 0; row < keypadLayout.length; row++) {
for (var col = 0; col < keypadLayout[row].length; col++) {
var val = keypadLayout[row][col];
var btnX = keypadStartX + col * (keypadButtonW + keypadGap);
var btnY = keypadStartY + row * (keypadButtonH + keypadGap);
var btnAsset = LK.getAsset('keypadBtn', {
width: keypadButtonW,
height: keypadButtonH,
color: typeof val === "number" ? 0xffffff : 0xcccccc,
shape: 'box',
anchorX: 0.5,
anchorY: 0.5,
x: btnX + keypadButtonW / 2,
y: btnY + keypadButtonH / 2
});
game.addChild(btnAsset);
var btnText = new Text2(val + "", {
size: 70,
fill: 0x222222
});
btnText.anchor.set(0.5, 0.5);
btnText.x = btnAsset.x;
btnText.y = btnAsset.y;
game.addChild(btnText);
(function (val, btnAsset) {
btnAsset.down = function (x, y, obj) {
if (!inputActive) return;
if (val === "Sil") {
if (inputValue.length > 0) {
inputValue = inputValue.slice(0, -1);
inputText.setText(inputValue);
}
} else if (val === "OK") {
submitInput();
} else {
if (inputValue.length < 2) {
// Max 2 digits (for 10+ letter words, not needed here)
inputValue += val;
inputText.setText(inputValue);
}
}
};
})(val, btnAsset);
keypadButtons.push(btnAsset);
}
}
// Input box also focuses for input (for touch)
inputBox.down = function (x, y, obj) {
// No-op, just visual feedback
if (!inputActive) return;
LK.effects.flashObject(inputBox, 0x008080, 200);
};
// "Cevapla" button handler
buttonBox.down = function (x, y, obj) {
if (!inputActive) return;
submitInput();
};
buttonText.down = buttonBox.down;
// --- SUBMIT LOGIC ---
function submitInput() {
if (!inputActive) return;
inputActive = false;
var correct = parseInt(inputValue) === currentWord.length;
if (correct) {
score += 1;
updateScore();
LK.effects.flashObject(inputBox, 0x83de44, 300);
LK.setTimeout(function () {
setNewWord();
}, 350);
} else {
LK.effects.flashScreen(0xff0000, 600);
LK.showGameOver();
}
}
// --- GAME STARTUP ---
function resetGame() {
score = 0;
updateScore();
setNewWord();
inputActive = true;
}
resetGame();
// --- GAME UPDATE (not used, but required for tick-based logic if needed) ---
game.update = function () {
// No per-frame logic needed
};
// --- END ---