/**** * Plugins ****/ var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var AnswerSlot = Container.expand(function (index) { var self = Container.call(this); var bg = self.attachAsset('answerBox', { anchorX: 0.5, anchorY: 0.5 }); self.index = index; self.occupiedLetter = null; return self; }); var CategoryButton = Container.expand(function (category) { var self = Container.call(this); var bg = self.attachAsset('categoryButton', { anchorX: 0.5, anchorY: 0.5 }); // Set background color based on category if (category === 'Cars') { bg.tint = 0x000000; // Black background for Cars (Arabalar) } else if (category === 'Food') { bg.tint = 0xFF0000; // Red background for Food (Yemekler) } else if (category === 'Football') { bg.tint = 0x00FF00; // Green background for Football (Futbol) } var text = new Text2(category, { size: 80, fill: 0xFFFFFF }); text.anchor.set(0.5, 0.5); self.addChild(text); self.category = category; self.down = function (x, y, obj) { self.scaleX = 0.95; self.scaleY = 0.95; showCategoryLogos(self.category); }; self.up = function (x, y, obj) { self.scaleX = 1; self.scaleY = 1; }; return self; }); var ExitButton = Container.expand(function () { var self = Container.call(this); var bg = self.attachAsset('exitButton', { anchorX: 0.5, anchorY: 0.5 }); var text = new Text2('Exit', { size: 50, fill: 0xFFFFFF }); text.anchor.set(0.5, 0.5); self.addChild(text); self.down = function (x, y, obj) { self.scaleX = 0.95; self.scaleY = 0.95; showCategoryLogos(currentCategory); }; self.up = function (x, y, obj) { self.scaleX = 1; self.scaleY = 1; }; return self; }); var HintButton = Container.expand(function () { var self = Container.call(this); var bg = self.attachAsset('hintButton', { anchorX: 0.5, anchorY: 0.5 }); var text = new Text2('Hint (5 coins)', { size: 50, fill: 0xFFFFFF }); text.anchor.set(0.5, 0.5); self.addChild(text); self.down = function (x, y, obj) { if (goldCoins >= 5) { useHint(); } }; return self; }); var LetterTile = Container.expand(function (letter) { var self = Container.call(this); var bg = self.attachAsset('letterTile', { anchorX: 0.5, anchorY: 0.5 }); var text = new Text2(letter, { size: 60, fill: 0x333333 }); text.anchor.set(0.5, 0.5); // Ensure text is visible and properly positioned text.x = 0; text.y = 0; text.alpha = 1; text.visible = true; self.addChild(text); self.letter = letter; self.originalX = 0; self.originalY = 0; self.isPlaced = false; self.targetSlot = null; // Store reference to text for easier access self.letterText = text; self.down = function (x, y, obj) { if (!self.isPlaced) { // Find next available answer slot var nextSlot = null; for (var i = 0; i < answerSlots.length; i++) { if (!answerSlots[i].occupiedLetter) { nextSlot = answerSlots[i]; break; } } if (nextSlot) { placeLetter(self, nextSlot); checkAnswer(); } } else { // Letter is placed, remove it from answer slot removeLetter(self); } }; return self; }); var LogoButton = Container.expand(function (logoName, logoData) { var self = Container.call(this); var bg = self.attachAsset('logoContainer', { anchorX: 0.5, anchorY: 0.5 }); // Get logo asset name from company name var logoAssetName = logoData.name.toLowerCase() + 'Logo'; if (logoData.name === 'Real Madrid') { logoAssetName = 'realmadridLogo'; } if (logoData.name === 'Manchester United') { logoAssetName = 'manchesterLogo'; } if (logoData.name === 'McDonalds') { logoAssetName = 'mcdonaldsLogo'; } if (logoData.name === 'Pizza Hut') { logoAssetName = 'pizzahutLogo'; } if (logoData.name === 'Instagram') { logoAssetName = 'instagramLogo'; } if (logoData.name === 'TikTok') { logoAssetName = 'tiktokLogo'; } if (logoData.name === 'Burger King') { logoAssetName = 'burgerkingLogo'; } if (logoData.name === 'Bayern München') { logoAssetName = 'bayernmunchenLogo'; } if (logoData.name === 'Galatasaray') { logoAssetName = 'galatasarayLogo'; } if (logoData.name === 'Tesla') { logoAssetName = 'teslaLogo'; } if (logoData.name === 'Lamborghini') { logoAssetName = 'lamborghiniLogo'; } var logoVisual = self.attachAsset(logoAssetName, { anchorX: 0.5, anchorY: 0.5, scaleX: 0.8, scaleY: 0.8 }); self.logoData = logoData; self.down = function (x, y, obj) { // Check if logo is completed var logoKey = currentCategory + '_' + self.logoData.name; if (completedLogos[logoKey]) { // Show completed logo name instead of starting the game showCompletedLogo(self.logoData); return; } self.scaleX = 0.95; self.scaleY = 0.95; startLogoGuess(self.logoData); }; self.up = function (x, y, obj) { self.scaleX = 1; self.scaleY = 1; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2C3E50 }); /**** * Game Code ****/ // Game state variables // Logo assets - Technology // Logo assets - Football // Logo assets - Cars // Logo assets - Food var gameState = 'menu'; // 'menu', 'category', 'guessing' var goldCoins = storage.goldCoins || 10; var completedLogos = storage.completedLogos || {}; var currentCategory = ''; var currentLogo = null; var draggedLetter = null; var letterTiles = []; var answerSlots = []; var currentAnswer = ''; // Logo data var logoDatabase = { 'Technology': [{ name: 'Apple', answer: 'APPLE' }, { name: 'Google', answer: 'GOOGLE' }, { name: 'Microsoft', answer: 'MICROSOFT' }, { name: 'Samsung', answer: 'SAMSUNG' }, { name: 'Instagram', answer: 'INSTAGRAM' }, { name: 'TikTok', answer: 'TIKTOK' }], 'Football': [{ name: 'Barcelona', answer: 'BARCELONA' }, { name: 'Real Madrid', answer: 'REALMADRID' }, { name: 'Liverpool', answer: 'LIVERPOOL' }, { name: 'Manchester United', answer: 'MANCHESTER' }, { name: 'Arsenal', answer: 'ARSENAL' }, { name: 'Bayern München', answer: 'BAYERNMUNCHEN' }, { name: 'Galatasaray', answer: 'GALATASARAY' }], 'Cars': [{ name: 'BMW', answer: 'BMW' }, { name: 'Mercedes', answer: 'MERCEDES' }, { name: 'Toyota', answer: 'TOYOTA' }, { name: 'Ferrari', answer: 'FERRARI' }, { name: 'Audi', answer: 'AUDI' }, { name: 'Tesla', answer: 'TESLA' }, { name: 'Lamborghini', answer: 'LAMBORGHINI' }], 'Food': [{ name: 'McDonalds', answer: 'MCDONALDS' }, { name: 'KFC', answer: 'KFC' }, { name: 'Subway', answer: 'SUBWAY' }, { name: 'Pizza Hut', answer: 'PIZZAHUT' }, { name: 'Starbucks', answer: 'STARBUCKS' }, { name: 'Dominos', answer: 'DOMINOS' }, { name: 'Burger King', answer: 'BURGERKING' }] }; // UI Elements var coinDisplay; var backButton; function initializeMenu() { game.removeChildren(); gameState = 'menu'; // Title var title = new Text2('Logo Quiz Challenge', { size: 120, fill: 0xFFFFFF }); title.anchor.set(0.5, 0.5); title.x = 1024; title.y = 500; game.addChild(title); // Category buttons var categories = ['Technology', 'Football', 'Cars', 'Food']; for (var i = 0; i < categories.length; i++) { var button = new CategoryButton(categories[i]); button.x = 1024; button.y = 800 + i * 220; game.addChild(button); } // Settings icon - larger circular button below coin display var settingsIcon = LK.getAsset('settingsIcon', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.0, scaleY: 1.0 }); settingsIcon.x = 1848; // Same X position as coin display settingsIcon.y = 320; // Further below coin display settingsIcon.down = function (x, y, obj) { settingsIcon.scaleX = 0.95; settingsIcon.scaleY = 0.95; showSettings(); }; settingsIcon.up = function (x, y, obj) { settingsIcon.scaleX = 1.0; settingsIcon.scaleY = 1.0; }; game.addChild(settingsIcon); // Add gear symbol text on top of settings icon var gearSymbol = new Text2('⚙', { size: 60, fill: 0xFFFFFF }); gearSymbol.anchor.set(0.5, 0.5); gearSymbol.x = 1848; gearSymbol.y = 320; game.addChild(gearSymbol); updateCoinDisplay(); } function showCategoryLogos(category) { game.removeChildren(); gameState = 'category'; currentCategory = category; // Category title var title = new Text2(category + ' Logos', { size: 100, fill: 0xFFFFFF }); title.anchor.set(0.5, 0.5); title.x = 1024; title.y = 400; game.addChild(title); // Logo buttons - filter out completed logos var logos = logoDatabase[category]; var availableLogos = []; for (var i = 0; i < logos.length; i++) { var logoKey = category + '_' + logos[i].name; if (!completedLogos[logoKey]) { availableLogos.push(logos[i]); } } var cols = 3; var startX = 1024 - (cols - 1) * 250; var startY = 700; // Show all logos with completion status var allLogos = logoDatabase[category]; for (var i = 0; i < allLogos.length; i++) { var logoButton = new LogoButton(allLogos[i].name + 'Logo', allLogos[i]); logoButton.x = startX + i % cols * 500; logoButton.y = startY + Math.floor(i / cols) * 450; game.addChild(logoButton); // Check if this logo is completed and add checkmark var logoKey = category + '_' + allLogos[i].name; if (completedLogos[logoKey]) { var checkmark = logoButton.attachAsset('checkmark', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.8, scaleY: 0.8 }); checkmark.x = 150; // Position in top-right corner of logo button checkmark.y = -150; } } // Exit button var exitBtn = new ExitButton(); exitBtn.x = 1848; // Position in top right area, below coins exitBtn.y = 350; // Further below the coin display exitBtn.down = function (x, y, obj) { exitBtn.scaleX = 0.95; exitBtn.scaleY = 0.95; initializeMenu(); // Return to main menu instead of category }; exitBtn.up = function (x, y, obj) { exitBtn.scaleX = 1; exitBtn.scaleY = 1; }; game.addChild(exitBtn); updateCoinDisplay(); } function startLogoGuess(logoData) { game.removeChildren(); gameState = 'guessing'; currentLogo = logoData; letterTiles = []; answerSlots = []; // Logo display area - larger and more prominent visual logo var logoAssetName = logoData.name.toLowerCase() + 'Logo'; if (logoData.name === 'Real Madrid') { logoAssetName = 'realmadridLogo'; } if (logoData.name === 'Manchester United') { logoAssetName = 'manchesterLogo'; } if (logoData.name === 'McDonalds') { logoAssetName = 'mcdonaldsLogo'; } if (logoData.name === 'Pizza Hut') { logoAssetName = 'pizzahutLogo'; } if (logoData.name === 'Instagram') { logoAssetName = 'instagramLogo'; } if (logoData.name === 'TikTok') { logoAssetName = 'tiktokLogo'; } if (logoData.name === 'Burger King') { logoAssetName = 'burgerkingLogo'; } if (logoData.name === 'Bayern München') { logoAssetName = 'bayernmunchenLogo'; } if (logoData.name === 'Galatasaray') { logoAssetName = 'galatasarayLogo'; } if (logoData.name === 'Tesla') { logoAssetName = 'teslaLogo'; } if (logoData.name === 'Lamborghini') { logoAssetName = 'lamborghiniLogo'; } var logoVisual = LK.getAsset(logoAssetName, { anchorX: 0.5, anchorY: 0.5, scaleX: 1.5, scaleY: 1.5 }); logoVisual.x = 1024; logoVisual.y = 500; game.addChild(logoVisual); // Create answer slots var answerLength = logoData.answer.length; var slotSpacing = 140; var startX = 1024 - (answerLength - 1) * slotSpacing / 2; for (var i = 0; i < answerLength; i++) { var slot = new AnswerSlot(i); slot.x = startX + i * slotSpacing; slot.y = 900; answerSlots.push(slot); game.addChild(slot); } // Create letter tiles createLetterTiles(logoData.answer); // Hint button var hintBtn = new HintButton(); hintBtn.x = 1024; hintBtn.y = 1200; game.addChild(hintBtn); // Exit button var exitBtn = new ExitButton(); exitBtn.x = 1848; // Position in top right area, below coins exitBtn.y = 350; // Further below the coin display game.addChild(exitBtn); updateCoinDisplay(); } function createLetterTiles(answer) { var letters = answer.split(''); var decoyLetters = ['X', 'Z', 'Q', 'J', 'K', 'W', 'V', 'Y', 'H', 'P', 'C', 'U', 'N', 'D', 'F']; var allLetters = letters.slice(); // Copy answer letters // Add decoy letters to reach exactly 15 total letters var decoyCount = 15 - letters.length; if (decoyCount > 0) { // Add decoy letters, cycling through the decoy array if needed for (var d = 0; d < decoyCount; d++) { allLetters.push(decoyLetters[d % decoyLetters.length]); } } // If answer is longer than 15, just use the first 15 letters if (allLetters.length > 15) { allLetters = allLetters.slice(0, 15); } // Shuffle letters for (var i = allLetters.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = allLetters[i]; allLetters[i] = allLetters[j]; allLetters[j] = temp; } // Create tiles var cols = 5; var startX = 1024 - (cols - 1) * 80; var startY = 1450; for (var i = 0; i < allLetters.length; i++) { var tile = new LetterTile(allLetters[i]); tile.x = startX + i % cols * 160; tile.y = startY + Math.floor(i / cols) * 160; // Store original position for reset functionality tile.originalX = tile.x; tile.originalY = tile.y; // Ensure tile is visible tile.alpha = 1; tile.visible = true; letterTiles.push(tile); game.addChild(tile); } } function createBackButton() { // Back button functionality removed } function updateCoinDisplay() { if (coinDisplay) { coinDisplay.parent.removeChild(coinDisplay); } coinDisplay = new Container(); var coinIcon = coinDisplay.addChild(LK.getAsset('coinIcon', { anchorX: 0.5, anchorY: 0.5 })); var coinText = new Text2(goldCoins.toString(), { size: 60, fill: 0xFFD700 }); coinText.anchor.set(1, 0.5); coinText.x = -50; coinDisplay.addChild(coinText); coinDisplay.x = -80; coinDisplay.y = 150; LK.gui.topRight.addChild(coinDisplay); } function useHint() { if (goldCoins < 5 || !currentLogo) { return; } goldCoins -= 5; storage.goldCoins = goldCoins; updateCoinDisplay(); // Find an empty slot and place a correct letter for (var i = 0; i < answerSlots.length; i++) { var slot = answerSlots[i]; if (!slot.occupiedLetter) { var correctLetter = currentLogo.answer[i]; // Find the letter tile for (var j = 0; j < letterTiles.length; j++) { var tile = letterTiles[j]; if (tile.letter === correctLetter && !tile.isPlaced) { placeLetter(tile, slot); // Mark this as a hint letter - permanent and different color slot.letterCopy.isHintLetter = true; slot.letterCopy.letterText.fill = 0x00FF00; // Green color for hint letters break; } } break; } } checkAnswer(); } function removeLetter(letter) { if (!letter.isPlaced || !letter.targetSlot) { return; } var slot = letter.targetSlot; // Check if this is a hint letter - if so, don't remove it if (slot.letterCopy && slot.letterCopy.isHintLetter) { return; // Cannot remove hint letters } // Clear slot slot.occupiedLetter = null; // Remove letter copy from answer slot if (slot.letterCopy) { slot.letterCopy.destroy(); slot.letterCopy = null; } // Reset letter to original state letter.isPlaced = false; letter.targetSlot = null; letter.alpha = 1; letter.x = letter.originalX; letter.y = letter.originalY; } function placeLetter(letter, slot) { if (slot.occupiedLetter) { // Check if the current letter in slot is a hint letter - if so, don't replace it if (slot.letterCopy && slot.letterCopy.isHintLetter) { return; // Cannot replace hint letters } // Return previous letter to pool var prevLetter = slot.occupiedLetter; prevLetter.isPlaced = false; prevLetter.targetSlot = null; prevLetter.alpha = 1; // Remove the letter copy from answer slot if (slot.letterCopy) { slot.letterCopy.destroy(); slot.letterCopy = null; } prevLetter.x = prevLetter.originalX; prevLetter.y = prevLetter.originalY; } letter.isPlaced = true; letter.targetSlot = slot; slot.occupiedLetter = letter; // Make the original tile appear faded/hidden letter.alpha = 0.3; // Create a copy of the letter in the answer slot var letterCopy = new LetterTile(letter.letter); letterCopy.x = slot.x; letterCopy.y = slot.y; letterCopy.isPlaced = true; letterCopy.isHintLetter = false; // Initialize as not a hint letter letterCopy.down = function (x, y, obj) { // Only allow removal if not a hint letter if (!letterCopy.isHintLetter) { removeLetter(letter); } }; slot.letterCopy = letterCopy; game.addChild(letterCopy); } function showSettings() { game.removeChildren(); gameState = 'settings'; // Settings title var title = new Text2('Ayarlar', { size: 120, fill: 0xFFFFFF }); title.anchor.set(0.5, 0.5); title.x = 1024; title.y = 500; game.addChild(title); // Reset data button var resetButton = new CategoryButton('Tüm Verileri Sıfırla'); resetButton.x = 1024; resetButton.y = 900; resetButton.down = function (x, y, obj) { resetButton.scaleX = 0.95; resetButton.scaleY = 0.95; showResetConfirmation(); }; resetButton.up = function (x, y, obj) { resetButton.scaleX = 1; resetButton.scaleY = 1; }; game.addChild(resetButton); // Back to menu button var backButton = new CategoryButton('Ana Menüye Dön'); backButton.x = 1024; backButton.y = 1200; backButton.down = function (x, y, obj) { backButton.scaleX = 0.95; backButton.scaleY = 0.95; initializeMenu(); }; backButton.up = function (x, y, obj) { backButton.scaleX = 1; backButton.scaleY = 1; }; game.addChild(backButton); updateCoinDisplay(); } function showResetConfirmation() { game.removeChildren(); gameState = 'resetConfirm'; // Confirmation title var title = new Text2('Silmek İstediğinden Emin Misin?', { size: 100, fill: 0xFFFFFF }); title.anchor.set(0.5, 0.5); title.x = 1024; title.y = 600; game.addChild(title); // Yes button var yesButton = new CategoryButton('Evet'); yesButton.x = 700; yesButton.y = 1000; yesButton.down = function (x, y, obj) { yesButton.scaleX = 0.95; yesButton.scaleY = 0.95; // Reset only completed puzzles, preserve coins storage.completedLogos = {}; completedLogos = {}; // Flash screen to show reset happened LK.effects.flashScreen(0xFF0000, 500); // Go back to main menu after reset LK.setTimeout(function () { initializeMenu(); }, 1000); }; yesButton.up = function (x, y, obj) { yesButton.scaleX = 1; yesButton.scaleY = 1; }; game.addChild(yesButton); // No button var noButton = new CategoryButton('Hayır'); noButton.x = 1348; noButton.y = 1000; noButton.down = function (x, y, obj) { noButton.scaleX = 0.95; noButton.scaleY = 0.95; showSettings(); }; noButton.up = function (x, y, obj) { noButton.scaleX = 1; noButton.scaleY = 1; }; game.addChild(noButton); updateCoinDisplay(); } function showCompletedLogo(logoData) { game.removeChildren(); gameState = 'completed'; currentLogo = logoData; // Logo display area - larger and more prominent visual logo var logoAssetName = logoData.name.toLowerCase() + 'Logo'; if (logoData.name === 'Real Madrid') { logoAssetName = 'realmadridLogo'; } if (logoData.name === 'Manchester United') { logoAssetName = 'manchesterLogo'; } if (logoData.name === 'McDonalds') { logoAssetName = 'mcdonaldsLogo'; } if (logoData.name === 'Pizza Hut') { logoAssetName = 'pizzahutLogo'; } if (logoData.name === 'Instagram') { logoAssetName = 'instagramLogo'; } if (logoData.name === 'TikTok') { logoAssetName = 'tiktokLogo'; } if (logoData.name === 'Burger King') { logoAssetName = 'burgerkingLogo'; } if (logoData.name === 'Bayern München') { logoAssetName = 'bayernmunchenLogo'; } if (logoData.name === 'Galatasaray') { logoAssetName = 'galatasarayLogo'; } if (logoData.name === 'Tesla') { logoAssetName = 'teslaLogo'; } if (logoData.name === 'Lamborghini') { logoAssetName = 'lamborghiniLogo'; } var logoVisual = LK.getAsset(logoAssetName, { anchorX: 0.5, anchorY: 0.5, scaleX: 1.5, scaleY: 1.5 }); logoVisual.x = 1024; logoVisual.y = 500; game.addChild(logoVisual); // Show "COMPLETED" text var completedText = new Text2('TAMAMLANDI', { size: 100, fill: 0x00FF00 }); completedText.anchor.set(0.5, 0.5); completedText.x = 1024; completedText.y = 800; game.addChild(completedText); // Show the answer var displayName = logoData.name; if (logoData.name === 'Burger King') { displayName = 'Burger King'; // Ensure space between Burger and King } var answerText = new Text2(displayName, { size: 80, fill: 0xFFFFFF }); answerText.anchor.set(0.5, 0.5); answerText.x = 1024; answerText.y = 900; game.addChild(answerText); // Show coin reward text var coinRewardText = new Text2('+10', { size: 60, fill: 0xFFD700 }); coinRewardText.anchor.set(0.5, 0.5); coinRewardText.x = 1024; coinRewardText.y = 950; game.addChild(coinRewardText); // Add checkmark var checkmark = LK.getAsset('checkmark', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.5, scaleY: 1.5 }); checkmark.x = 1024; checkmark.y = 1050; game.addChild(checkmark); // Exit button var exitBtn = new ExitButton(); exitBtn.x = 1024; exitBtn.y = 1300; exitBtn.down = function (x, y, obj) { exitBtn.scaleX = 0.95; exitBtn.scaleY = 0.95; showCategoryLogos(currentCategory); // Return to category view }; exitBtn.up = function (x, y, obj) { exitBtn.scaleX = 1; exitBtn.scaleY = 1; }; game.addChild(exitBtn); updateCoinDisplay(); } function checkAnswer() { var playerAnswer = ''; for (var i = 0; i < answerSlots.length; i++) { var slot = answerSlots[i]; if (slot.occupiedLetter) { playerAnswer += slot.occupiedLetter.letter; } else { return; // Not all slots filled } } if (playerAnswer === currentLogo.answer) { // Correct answer goldCoins += 10; storage.goldCoins = goldCoins; // Mark logo as completed var logoKey = currentCategory + '_' + currentLogo.name; completedLogos[logoKey] = true; storage.completedLogos = completedLogos; LK.getSound('correctAnswer').play(); LK.getSound('coinEarned').play(); LK.effects.flashScreen(0x00FF00, 500); LK.setTimeout(function () { showCategoryLogos(currentCategory); }, 1000); } } function handleMove(x, y, obj) { // Move handler no longer needed for letter dragging } game.move = handleMove; game.up = function (x, y, obj) { // Up handler no longer needed for letter dragging }; // Initialize the game initializeMenu();
/****
* Plugins
****/
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var AnswerSlot = Container.expand(function (index) {
var self = Container.call(this);
var bg = self.attachAsset('answerBox', {
anchorX: 0.5,
anchorY: 0.5
});
self.index = index;
self.occupiedLetter = null;
return self;
});
var CategoryButton = Container.expand(function (category) {
var self = Container.call(this);
var bg = self.attachAsset('categoryButton', {
anchorX: 0.5,
anchorY: 0.5
});
// Set background color based on category
if (category === 'Cars') {
bg.tint = 0x000000; // Black background for Cars (Arabalar)
} else if (category === 'Food') {
bg.tint = 0xFF0000; // Red background for Food (Yemekler)
} else if (category === 'Football') {
bg.tint = 0x00FF00; // Green background for Football (Futbol)
}
var text = new Text2(category, {
size: 80,
fill: 0xFFFFFF
});
text.anchor.set(0.5, 0.5);
self.addChild(text);
self.category = category;
self.down = function (x, y, obj) {
self.scaleX = 0.95;
self.scaleY = 0.95;
showCategoryLogos(self.category);
};
self.up = function (x, y, obj) {
self.scaleX = 1;
self.scaleY = 1;
};
return self;
});
var ExitButton = Container.expand(function () {
var self = Container.call(this);
var bg = self.attachAsset('exitButton', {
anchorX: 0.5,
anchorY: 0.5
});
var text = new Text2('Exit', {
size: 50,
fill: 0xFFFFFF
});
text.anchor.set(0.5, 0.5);
self.addChild(text);
self.down = function (x, y, obj) {
self.scaleX = 0.95;
self.scaleY = 0.95;
showCategoryLogos(currentCategory);
};
self.up = function (x, y, obj) {
self.scaleX = 1;
self.scaleY = 1;
};
return self;
});
var HintButton = Container.expand(function () {
var self = Container.call(this);
var bg = self.attachAsset('hintButton', {
anchorX: 0.5,
anchorY: 0.5
});
var text = new Text2('Hint (5 coins)', {
size: 50,
fill: 0xFFFFFF
});
text.anchor.set(0.5, 0.5);
self.addChild(text);
self.down = function (x, y, obj) {
if (goldCoins >= 5) {
useHint();
}
};
return self;
});
var LetterTile = Container.expand(function (letter) {
var self = Container.call(this);
var bg = self.attachAsset('letterTile', {
anchorX: 0.5,
anchorY: 0.5
});
var text = new Text2(letter, {
size: 60,
fill: 0x333333
});
text.anchor.set(0.5, 0.5);
// Ensure text is visible and properly positioned
text.x = 0;
text.y = 0;
text.alpha = 1;
text.visible = true;
self.addChild(text);
self.letter = letter;
self.originalX = 0;
self.originalY = 0;
self.isPlaced = false;
self.targetSlot = null;
// Store reference to text for easier access
self.letterText = text;
self.down = function (x, y, obj) {
if (!self.isPlaced) {
// Find next available answer slot
var nextSlot = null;
for (var i = 0; i < answerSlots.length; i++) {
if (!answerSlots[i].occupiedLetter) {
nextSlot = answerSlots[i];
break;
}
}
if (nextSlot) {
placeLetter(self, nextSlot);
checkAnswer();
}
} else {
// Letter is placed, remove it from answer slot
removeLetter(self);
}
};
return self;
});
var LogoButton = Container.expand(function (logoName, logoData) {
var self = Container.call(this);
var bg = self.attachAsset('logoContainer', {
anchorX: 0.5,
anchorY: 0.5
});
// Get logo asset name from company name
var logoAssetName = logoData.name.toLowerCase() + 'Logo';
if (logoData.name === 'Real Madrid') {
logoAssetName = 'realmadridLogo';
}
if (logoData.name === 'Manchester United') {
logoAssetName = 'manchesterLogo';
}
if (logoData.name === 'McDonalds') {
logoAssetName = 'mcdonaldsLogo';
}
if (logoData.name === 'Pizza Hut') {
logoAssetName = 'pizzahutLogo';
}
if (logoData.name === 'Instagram') {
logoAssetName = 'instagramLogo';
}
if (logoData.name === 'TikTok') {
logoAssetName = 'tiktokLogo';
}
if (logoData.name === 'Burger King') {
logoAssetName = 'burgerkingLogo';
}
if (logoData.name === 'Bayern München') {
logoAssetName = 'bayernmunchenLogo';
}
if (logoData.name === 'Galatasaray') {
logoAssetName = 'galatasarayLogo';
}
if (logoData.name === 'Tesla') {
logoAssetName = 'teslaLogo';
}
if (logoData.name === 'Lamborghini') {
logoAssetName = 'lamborghiniLogo';
}
var logoVisual = self.attachAsset(logoAssetName, {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.8,
scaleY: 0.8
});
self.logoData = logoData;
self.down = function (x, y, obj) {
// Check if logo is completed
var logoKey = currentCategory + '_' + self.logoData.name;
if (completedLogos[logoKey]) {
// Show completed logo name instead of starting the game
showCompletedLogo(self.logoData);
return;
}
self.scaleX = 0.95;
self.scaleY = 0.95;
startLogoGuess(self.logoData);
};
self.up = function (x, y, obj) {
self.scaleX = 1;
self.scaleY = 1;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x2C3E50
});
/****
* Game Code
****/
// Game state variables
// Logo assets - Technology
// Logo assets - Football
// Logo assets - Cars
// Logo assets - Food
var gameState = 'menu'; // 'menu', 'category', 'guessing'
var goldCoins = storage.goldCoins || 10;
var completedLogos = storage.completedLogos || {};
var currentCategory = '';
var currentLogo = null;
var draggedLetter = null;
var letterTiles = [];
var answerSlots = [];
var currentAnswer = '';
// Logo data
var logoDatabase = {
'Technology': [{
name: 'Apple',
answer: 'APPLE'
}, {
name: 'Google',
answer: 'GOOGLE'
}, {
name: 'Microsoft',
answer: 'MICROSOFT'
}, {
name: 'Samsung',
answer: 'SAMSUNG'
}, {
name: 'Instagram',
answer: 'INSTAGRAM'
}, {
name: 'TikTok',
answer: 'TIKTOK'
}],
'Football': [{
name: 'Barcelona',
answer: 'BARCELONA'
}, {
name: 'Real Madrid',
answer: 'REALMADRID'
}, {
name: 'Liverpool',
answer: 'LIVERPOOL'
}, {
name: 'Manchester United',
answer: 'MANCHESTER'
}, {
name: 'Arsenal',
answer: 'ARSENAL'
}, {
name: 'Bayern München',
answer: 'BAYERNMUNCHEN'
}, {
name: 'Galatasaray',
answer: 'GALATASARAY'
}],
'Cars': [{
name: 'BMW',
answer: 'BMW'
}, {
name: 'Mercedes',
answer: 'MERCEDES'
}, {
name: 'Toyota',
answer: 'TOYOTA'
}, {
name: 'Ferrari',
answer: 'FERRARI'
}, {
name: 'Audi',
answer: 'AUDI'
}, {
name: 'Tesla',
answer: 'TESLA'
}, {
name: 'Lamborghini',
answer: 'LAMBORGHINI'
}],
'Food': [{
name: 'McDonalds',
answer: 'MCDONALDS'
}, {
name: 'KFC',
answer: 'KFC'
}, {
name: 'Subway',
answer: 'SUBWAY'
}, {
name: 'Pizza Hut',
answer: 'PIZZAHUT'
}, {
name: 'Starbucks',
answer: 'STARBUCKS'
}, {
name: 'Dominos',
answer: 'DOMINOS'
}, {
name: 'Burger King',
answer: 'BURGERKING'
}]
};
// UI Elements
var coinDisplay;
var backButton;
function initializeMenu() {
game.removeChildren();
gameState = 'menu';
// Title
var title = new Text2('Logo Quiz Challenge', {
size: 120,
fill: 0xFFFFFF
});
title.anchor.set(0.5, 0.5);
title.x = 1024;
title.y = 500;
game.addChild(title);
// Category buttons
var categories = ['Technology', 'Football', 'Cars', 'Food'];
for (var i = 0; i < categories.length; i++) {
var button = new CategoryButton(categories[i]);
button.x = 1024;
button.y = 800 + i * 220;
game.addChild(button);
}
// Settings icon - larger circular button below coin display
var settingsIcon = LK.getAsset('settingsIcon', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.0,
scaleY: 1.0
});
settingsIcon.x = 1848; // Same X position as coin display
settingsIcon.y = 320; // Further below coin display
settingsIcon.down = function (x, y, obj) {
settingsIcon.scaleX = 0.95;
settingsIcon.scaleY = 0.95;
showSettings();
};
settingsIcon.up = function (x, y, obj) {
settingsIcon.scaleX = 1.0;
settingsIcon.scaleY = 1.0;
};
game.addChild(settingsIcon);
// Add gear symbol text on top of settings icon
var gearSymbol = new Text2('⚙', {
size: 60,
fill: 0xFFFFFF
});
gearSymbol.anchor.set(0.5, 0.5);
gearSymbol.x = 1848;
gearSymbol.y = 320;
game.addChild(gearSymbol);
updateCoinDisplay();
}
function showCategoryLogos(category) {
game.removeChildren();
gameState = 'category';
currentCategory = category;
// Category title
var title = new Text2(category + ' Logos', {
size: 100,
fill: 0xFFFFFF
});
title.anchor.set(0.5, 0.5);
title.x = 1024;
title.y = 400;
game.addChild(title);
// Logo buttons - filter out completed logos
var logos = logoDatabase[category];
var availableLogos = [];
for (var i = 0; i < logos.length; i++) {
var logoKey = category + '_' + logos[i].name;
if (!completedLogos[logoKey]) {
availableLogos.push(logos[i]);
}
}
var cols = 3;
var startX = 1024 - (cols - 1) * 250;
var startY = 700;
// Show all logos with completion status
var allLogos = logoDatabase[category];
for (var i = 0; i < allLogos.length; i++) {
var logoButton = new LogoButton(allLogos[i].name + 'Logo', allLogos[i]);
logoButton.x = startX + i % cols * 500;
logoButton.y = startY + Math.floor(i / cols) * 450;
game.addChild(logoButton);
// Check if this logo is completed and add checkmark
var logoKey = category + '_' + allLogos[i].name;
if (completedLogos[logoKey]) {
var checkmark = logoButton.attachAsset('checkmark', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.8,
scaleY: 0.8
});
checkmark.x = 150; // Position in top-right corner of logo button
checkmark.y = -150;
}
}
// Exit button
var exitBtn = new ExitButton();
exitBtn.x = 1848; // Position in top right area, below coins
exitBtn.y = 350; // Further below the coin display
exitBtn.down = function (x, y, obj) {
exitBtn.scaleX = 0.95;
exitBtn.scaleY = 0.95;
initializeMenu(); // Return to main menu instead of category
};
exitBtn.up = function (x, y, obj) {
exitBtn.scaleX = 1;
exitBtn.scaleY = 1;
};
game.addChild(exitBtn);
updateCoinDisplay();
}
function startLogoGuess(logoData) {
game.removeChildren();
gameState = 'guessing';
currentLogo = logoData;
letterTiles = [];
answerSlots = [];
// Logo display area - larger and more prominent visual logo
var logoAssetName = logoData.name.toLowerCase() + 'Logo';
if (logoData.name === 'Real Madrid') {
logoAssetName = 'realmadridLogo';
}
if (logoData.name === 'Manchester United') {
logoAssetName = 'manchesterLogo';
}
if (logoData.name === 'McDonalds') {
logoAssetName = 'mcdonaldsLogo';
}
if (logoData.name === 'Pizza Hut') {
logoAssetName = 'pizzahutLogo';
}
if (logoData.name === 'Instagram') {
logoAssetName = 'instagramLogo';
}
if (logoData.name === 'TikTok') {
logoAssetName = 'tiktokLogo';
}
if (logoData.name === 'Burger King') {
logoAssetName = 'burgerkingLogo';
}
if (logoData.name === 'Bayern München') {
logoAssetName = 'bayernmunchenLogo';
}
if (logoData.name === 'Galatasaray') {
logoAssetName = 'galatasarayLogo';
}
if (logoData.name === 'Tesla') {
logoAssetName = 'teslaLogo';
}
if (logoData.name === 'Lamborghini') {
logoAssetName = 'lamborghiniLogo';
}
var logoVisual = LK.getAsset(logoAssetName, {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.5,
scaleY: 1.5
});
logoVisual.x = 1024;
logoVisual.y = 500;
game.addChild(logoVisual);
// Create answer slots
var answerLength = logoData.answer.length;
var slotSpacing = 140;
var startX = 1024 - (answerLength - 1) * slotSpacing / 2;
for (var i = 0; i < answerLength; i++) {
var slot = new AnswerSlot(i);
slot.x = startX + i * slotSpacing;
slot.y = 900;
answerSlots.push(slot);
game.addChild(slot);
}
// Create letter tiles
createLetterTiles(logoData.answer);
// Hint button
var hintBtn = new HintButton();
hintBtn.x = 1024;
hintBtn.y = 1200;
game.addChild(hintBtn);
// Exit button
var exitBtn = new ExitButton();
exitBtn.x = 1848; // Position in top right area, below coins
exitBtn.y = 350; // Further below the coin display
game.addChild(exitBtn);
updateCoinDisplay();
}
function createLetterTiles(answer) {
var letters = answer.split('');
var decoyLetters = ['X', 'Z', 'Q', 'J', 'K', 'W', 'V', 'Y', 'H', 'P', 'C', 'U', 'N', 'D', 'F'];
var allLetters = letters.slice(); // Copy answer letters
// Add decoy letters to reach exactly 15 total letters
var decoyCount = 15 - letters.length;
if (decoyCount > 0) {
// Add decoy letters, cycling through the decoy array if needed
for (var d = 0; d < decoyCount; d++) {
allLetters.push(decoyLetters[d % decoyLetters.length]);
}
}
// If answer is longer than 15, just use the first 15 letters
if (allLetters.length > 15) {
allLetters = allLetters.slice(0, 15);
}
// Shuffle letters
for (var i = allLetters.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = allLetters[i];
allLetters[i] = allLetters[j];
allLetters[j] = temp;
}
// Create tiles
var cols = 5;
var startX = 1024 - (cols - 1) * 80;
var startY = 1450;
for (var i = 0; i < allLetters.length; i++) {
var tile = new LetterTile(allLetters[i]);
tile.x = startX + i % cols * 160;
tile.y = startY + Math.floor(i / cols) * 160;
// Store original position for reset functionality
tile.originalX = tile.x;
tile.originalY = tile.y;
// Ensure tile is visible
tile.alpha = 1;
tile.visible = true;
letterTiles.push(tile);
game.addChild(tile);
}
}
function createBackButton() {
// Back button functionality removed
}
function updateCoinDisplay() {
if (coinDisplay) {
coinDisplay.parent.removeChild(coinDisplay);
}
coinDisplay = new Container();
var coinIcon = coinDisplay.addChild(LK.getAsset('coinIcon', {
anchorX: 0.5,
anchorY: 0.5
}));
var coinText = new Text2(goldCoins.toString(), {
size: 60,
fill: 0xFFD700
});
coinText.anchor.set(1, 0.5);
coinText.x = -50;
coinDisplay.addChild(coinText);
coinDisplay.x = -80;
coinDisplay.y = 150;
LK.gui.topRight.addChild(coinDisplay);
}
function useHint() {
if (goldCoins < 5 || !currentLogo) {
return;
}
goldCoins -= 5;
storage.goldCoins = goldCoins;
updateCoinDisplay();
// Find an empty slot and place a correct letter
for (var i = 0; i < answerSlots.length; i++) {
var slot = answerSlots[i];
if (!slot.occupiedLetter) {
var correctLetter = currentLogo.answer[i];
// Find the letter tile
for (var j = 0; j < letterTiles.length; j++) {
var tile = letterTiles[j];
if (tile.letter === correctLetter && !tile.isPlaced) {
placeLetter(tile, slot);
// Mark this as a hint letter - permanent and different color
slot.letterCopy.isHintLetter = true;
slot.letterCopy.letterText.fill = 0x00FF00; // Green color for hint letters
break;
}
}
break;
}
}
checkAnswer();
}
function removeLetter(letter) {
if (!letter.isPlaced || !letter.targetSlot) {
return;
}
var slot = letter.targetSlot;
// Check if this is a hint letter - if so, don't remove it
if (slot.letterCopy && slot.letterCopy.isHintLetter) {
return; // Cannot remove hint letters
}
// Clear slot
slot.occupiedLetter = null;
// Remove letter copy from answer slot
if (slot.letterCopy) {
slot.letterCopy.destroy();
slot.letterCopy = null;
}
// Reset letter to original state
letter.isPlaced = false;
letter.targetSlot = null;
letter.alpha = 1;
letter.x = letter.originalX;
letter.y = letter.originalY;
}
function placeLetter(letter, slot) {
if (slot.occupiedLetter) {
// Check if the current letter in slot is a hint letter - if so, don't replace it
if (slot.letterCopy && slot.letterCopy.isHintLetter) {
return; // Cannot replace hint letters
}
// Return previous letter to pool
var prevLetter = slot.occupiedLetter;
prevLetter.isPlaced = false;
prevLetter.targetSlot = null;
prevLetter.alpha = 1;
// Remove the letter copy from answer slot
if (slot.letterCopy) {
slot.letterCopy.destroy();
slot.letterCopy = null;
}
prevLetter.x = prevLetter.originalX;
prevLetter.y = prevLetter.originalY;
}
letter.isPlaced = true;
letter.targetSlot = slot;
slot.occupiedLetter = letter;
// Make the original tile appear faded/hidden
letter.alpha = 0.3;
// Create a copy of the letter in the answer slot
var letterCopy = new LetterTile(letter.letter);
letterCopy.x = slot.x;
letterCopy.y = slot.y;
letterCopy.isPlaced = true;
letterCopy.isHintLetter = false; // Initialize as not a hint letter
letterCopy.down = function (x, y, obj) {
// Only allow removal if not a hint letter
if (!letterCopy.isHintLetter) {
removeLetter(letter);
}
};
slot.letterCopy = letterCopy;
game.addChild(letterCopy);
}
function showSettings() {
game.removeChildren();
gameState = 'settings';
// Settings title
var title = new Text2('Ayarlar', {
size: 120,
fill: 0xFFFFFF
});
title.anchor.set(0.5, 0.5);
title.x = 1024;
title.y = 500;
game.addChild(title);
// Reset data button
var resetButton = new CategoryButton('Tüm Verileri Sıfırla');
resetButton.x = 1024;
resetButton.y = 900;
resetButton.down = function (x, y, obj) {
resetButton.scaleX = 0.95;
resetButton.scaleY = 0.95;
showResetConfirmation();
};
resetButton.up = function (x, y, obj) {
resetButton.scaleX = 1;
resetButton.scaleY = 1;
};
game.addChild(resetButton);
// Back to menu button
var backButton = new CategoryButton('Ana Menüye Dön');
backButton.x = 1024;
backButton.y = 1200;
backButton.down = function (x, y, obj) {
backButton.scaleX = 0.95;
backButton.scaleY = 0.95;
initializeMenu();
};
backButton.up = function (x, y, obj) {
backButton.scaleX = 1;
backButton.scaleY = 1;
};
game.addChild(backButton);
updateCoinDisplay();
}
function showResetConfirmation() {
game.removeChildren();
gameState = 'resetConfirm';
// Confirmation title
var title = new Text2('Silmek İstediğinden Emin Misin?', {
size: 100,
fill: 0xFFFFFF
});
title.anchor.set(0.5, 0.5);
title.x = 1024;
title.y = 600;
game.addChild(title);
// Yes button
var yesButton = new CategoryButton('Evet');
yesButton.x = 700;
yesButton.y = 1000;
yesButton.down = function (x, y, obj) {
yesButton.scaleX = 0.95;
yesButton.scaleY = 0.95;
// Reset only completed puzzles, preserve coins
storage.completedLogos = {};
completedLogos = {};
// Flash screen to show reset happened
LK.effects.flashScreen(0xFF0000, 500);
// Go back to main menu after reset
LK.setTimeout(function () {
initializeMenu();
}, 1000);
};
yesButton.up = function (x, y, obj) {
yesButton.scaleX = 1;
yesButton.scaleY = 1;
};
game.addChild(yesButton);
// No button
var noButton = new CategoryButton('Hayır');
noButton.x = 1348;
noButton.y = 1000;
noButton.down = function (x, y, obj) {
noButton.scaleX = 0.95;
noButton.scaleY = 0.95;
showSettings();
};
noButton.up = function (x, y, obj) {
noButton.scaleX = 1;
noButton.scaleY = 1;
};
game.addChild(noButton);
updateCoinDisplay();
}
function showCompletedLogo(logoData) {
game.removeChildren();
gameState = 'completed';
currentLogo = logoData;
// Logo display area - larger and more prominent visual logo
var logoAssetName = logoData.name.toLowerCase() + 'Logo';
if (logoData.name === 'Real Madrid') {
logoAssetName = 'realmadridLogo';
}
if (logoData.name === 'Manchester United') {
logoAssetName = 'manchesterLogo';
}
if (logoData.name === 'McDonalds') {
logoAssetName = 'mcdonaldsLogo';
}
if (logoData.name === 'Pizza Hut') {
logoAssetName = 'pizzahutLogo';
}
if (logoData.name === 'Instagram') {
logoAssetName = 'instagramLogo';
}
if (logoData.name === 'TikTok') {
logoAssetName = 'tiktokLogo';
}
if (logoData.name === 'Burger King') {
logoAssetName = 'burgerkingLogo';
}
if (logoData.name === 'Bayern München') {
logoAssetName = 'bayernmunchenLogo';
}
if (logoData.name === 'Galatasaray') {
logoAssetName = 'galatasarayLogo';
}
if (logoData.name === 'Tesla') {
logoAssetName = 'teslaLogo';
}
if (logoData.name === 'Lamborghini') {
logoAssetName = 'lamborghiniLogo';
}
var logoVisual = LK.getAsset(logoAssetName, {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.5,
scaleY: 1.5
});
logoVisual.x = 1024;
logoVisual.y = 500;
game.addChild(logoVisual);
// Show "COMPLETED" text
var completedText = new Text2('TAMAMLANDI', {
size: 100,
fill: 0x00FF00
});
completedText.anchor.set(0.5, 0.5);
completedText.x = 1024;
completedText.y = 800;
game.addChild(completedText);
// Show the answer
var displayName = logoData.name;
if (logoData.name === 'Burger King') {
displayName = 'Burger King'; // Ensure space between Burger and King
}
var answerText = new Text2(displayName, {
size: 80,
fill: 0xFFFFFF
});
answerText.anchor.set(0.5, 0.5);
answerText.x = 1024;
answerText.y = 900;
game.addChild(answerText);
// Show coin reward text
var coinRewardText = new Text2('+10', {
size: 60,
fill: 0xFFD700
});
coinRewardText.anchor.set(0.5, 0.5);
coinRewardText.x = 1024;
coinRewardText.y = 950;
game.addChild(coinRewardText);
// Add checkmark
var checkmark = LK.getAsset('checkmark', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.5,
scaleY: 1.5
});
checkmark.x = 1024;
checkmark.y = 1050;
game.addChild(checkmark);
// Exit button
var exitBtn = new ExitButton();
exitBtn.x = 1024;
exitBtn.y = 1300;
exitBtn.down = function (x, y, obj) {
exitBtn.scaleX = 0.95;
exitBtn.scaleY = 0.95;
showCategoryLogos(currentCategory); // Return to category view
};
exitBtn.up = function (x, y, obj) {
exitBtn.scaleX = 1;
exitBtn.scaleY = 1;
};
game.addChild(exitBtn);
updateCoinDisplay();
}
function checkAnswer() {
var playerAnswer = '';
for (var i = 0; i < answerSlots.length; i++) {
var slot = answerSlots[i];
if (slot.occupiedLetter) {
playerAnswer += slot.occupiedLetter.letter;
} else {
return; // Not all slots filled
}
}
if (playerAnswer === currentLogo.answer) {
// Correct answer
goldCoins += 10;
storage.goldCoins = goldCoins;
// Mark logo as completed
var logoKey = currentCategory + '_' + currentLogo.name;
completedLogos[logoKey] = true;
storage.completedLogos = completedLogos;
LK.getSound('correctAnswer').play();
LK.getSound('coinEarned').play();
LK.effects.flashScreen(0x00FF00, 500);
LK.setTimeout(function () {
showCategoryLogos(currentCategory);
}, 1000);
}
}
function handleMove(x, y, obj) {
// Move handler no longer needed for letter dragging
}
game.move = handleMove;
game.up = function (x, y, obj) {
// Up handler no longer needed for letter dragging
};
// Initialize the game
initializeMenu();