/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var OptionButton = Container.expand(function (text, isCorrect, index) {
var self = Container.call(this);
self.isCorrect = isCorrect;
self.isSelected = false;
self.buttonIndex = index;
var buttonBg = self.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5
});
var buttonText = new Text2(text, {
size: 48,
fill: 0x000000
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
self.setText = function (newText) {
buttonText.setText(newText);
};
self.showCorrect = function () {
buttonBg.destroy();
buttonBg = self.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5
});
self.addChildAt(buttonBg, 0);
tween(self, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 200,
easing: tween.easeOut
});
tween(self, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 200,
easing: tween.easeOut
});
};
self.showWrong = function () {
buttonBg.destroy();
buttonBg = self.attachAsset('optionButtonWrong', {
anchorX: 0.5,
anchorY: 0.5
});
self.addChildAt(buttonBg, 0);
tween(self, {
x: self.x + 10
}, {
duration: 50
});
tween(self, {
x: self.x - 10
}, {
duration: 50
});
tween(self, {
x: self.x
}, {
duration: 50
});
};
self.reset = function () {
self.isSelected = false;
buttonBg.destroy();
buttonBg = self.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5
});
self.addChildAt(buttonBg, 0);
self.scaleX = 1.0;
self.scaleY = 1.0;
};
self.down = function (x, y, obj) {
if (gameState !== 'playing') return;
if (self.isCorrect) {
self.showCorrect();
handleCorrectAnswer();
} else {
self.showWrong();
handleWrongAnswer();
}
};
return self;
});
var StarDisplay = Container.expand(function () {
var self = Container.call(this);
var starBg = self.attachAsset('starIcon', {
anchorX: 0.5,
anchorY: 0.5
});
var starText = new Text2('0', {
size: 72,
fill: 0x000000
});
starText.anchor.set(0.5, 0.5);
self.addChild(starText);
self.updateStars = function (count) {
starText.setText(count.toString());
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xFFF8E1
});
/****
* Game Code
****/
// Game state variables
// Brand Logo Assets
var gameState = 'playing';
var currentLevel = 1;
var currentQuestion = 0;
var score = 0;
var stars = storage.stars || 0;
var highScore = storage.highScore || 0;
// New leaderboard entry structure - load from flat arrays
var leaderboard = [];
var playerPasswords = storage.playerPasswords || {}; // Store passwords as object with name as key
if (storage.leaderboardNames && storage.leaderboardNames.length > 0 && storage.leaderboardScores && storage.leaderboardStars && storage.leaderboardDates) {
for (var i = 0; i < storage.leaderboardNames.length; i++) {
leaderboard.push({
name: storage.leaderboardNames[i],
score: storage.leaderboardScores[i],
stars: storage.leaderboardStars[i],
date: storage.leaderboardDates[i]
});
}
}
var usedQuestions = [];
var lives = 3; // Initialize player lives
var playerName = storage.playerName || ''; // Store player name - empty string for new players
// Logo database
var logoDatabase = [
// Level 1 - Indian Brands
{
name: 'टाटा',
options: ['टाटा', 'रिलायंस', 'अडानी', 'बिड़ला'],
correct: 0,
fact: 'टाटा ग्रुप की स्थापना 1868 में जमशेदजी टाटा ने की थी।',
level: 1,
logoColor: 0x0066CC,
logoAssetId: 'tataLogo'
}, {
name: 'रिलायंस',
options: ['टाटा', 'रिलायंस', 'अडानी', 'बिड़ला'],
correct: 1,
fact: 'रिलायंस इंडस्ट्रीज भारत की सबसे बड़ी निजी कंपनी है।',
level: 1,
logoColor: 0xFF0000,
logoAssetId: 'relianceLogo'
}, {
name: 'बजाज',
options: ['हीरो', 'बजाज', 'टीवीएस', 'महिंद्रा'],
correct: 1,
fact: 'बजाज ऑटो भारत की प्रमुख मोटरसाइकिल निर्माता कंपनी है।',
level: 1,
logoColor: 0x0066FF,
logoAssetId: 'bajajLogo'
},
// Level 2 - International Brands
{
name: 'कोका-कोला',
options: ['पेप्सी', 'कोका-कोला', 'स्प्राइट', 'फैंटा'],
correct: 1,
fact: 'कोका-कोला दुनिया का सबसे प्रसिद्ध पेय पदार्थ ब्रांड है।',
level: 2,
logoColor: 0xDC143C,
logoAssetId: 'cocaColaLogo'
}, {
name: 'मैकडॉनल्ड्स',
options: ['केएफसी', 'मैकडॉनल्ड्स', 'बर्गर किंग', 'सबवे'],
correct: 1,
fact: 'मैकडॉनल्ड्स दुनिया की सबसे बड़ी फास्ट फूड चेन है।',
level: 2,
logoColor: 0xFFD700,
logoAssetId: 'mcdonaldsLogo'
}, {
name: 'गूगल',
options: ['माइक्रोसॉफ्ट', 'गूगल', 'एप्पल', 'अमेज़न'],
correct: 1,
fact: 'गूगल दुनिया का सबसे बड़ा सर्च इंजन है।',
level: 2,
logoColor: 0x4285f4,
logoAssetId: 'googleLogo'
}, {
name: 'अमेज़न',
options: ['ईबे', 'अमेज़न', 'अलीबाबा', 'शॉपिफाई'],
correct: 1,
fact: 'अमेज़न दुनिया की सबसे बड़ी ई-कॉमर्स कंपनी है।',
level: 2,
logoColor: 0xFF9900,
logoAssetId: 'amazonLogo'
}, {
name: 'इंफोसिस',
options: ['टीसीएस', 'इंफोसिस', 'विप्रो', 'एचसीएल'],
correct: 1,
fact: 'इंफोसिस भारत की प्रमुख आईटी कंपनी है।',
level: 1,
logoColor: 0x0066CC,
logoAssetId: 'infosysLogo'
}, {
name: 'फ्लिपकार्ट',
options: ['अमेज़न', 'फ्लिपकार्ट', 'स्नैपडील', 'मिंत्रा'],
correct: 1,
fact: 'फ्लिपकार्ट भारत की सबसे बड़ी ई-कॉमर्स कंपनी है।',
level: 1,
logoColor: 0xF7971E,
logoAssetId: 'flipkartLogo'
}, {
name: 'ज़ोमैटो',
options: ['स्विगी', 'ज़ोमैटो', 'उबर ईट्स', 'फूडपांडा'],
correct: 1,
fact: 'ज़ोमैटो भारत की प्रमुख फूड डिलीवरी कंपनी है।',
level: 1,
logoColor: 0xE23744,
logoAssetId: 'zomatoLogo'
}, {
name: 'ओला',
options: ['उबर', 'ओला', 'मेरु', 'लिफ्ट'],
correct: 1,
fact: 'ओला भारत की सबसे बड़ी राइड-शेयरिंग कंपनी है।',
level: 1,
logoColor: 0x000000,
logoAssetId: 'olaLogo'
}, {
name: 'पेटीएम',
options: ['गूगल पे', 'पेटीएम', 'फोनपे', 'भीम'],
correct: 1,
fact: 'पेटीएम भारत की सबसे बड़ी डिजिटल पेमेंट कंपनी है।',
level: 1,
logoColor: 0x00BAF2,
logoAssetId: 'paytmLogo'
}, {
name: 'जियो',
options: ['एयरटेल', 'जियो', 'वोडाफोन', 'बीएसएनएल'],
correct: 1,
fact: 'रिलायंस जियो भारत की सबसे बड़ी 4G नेटवर्क कंपनी है।',
level: 1,
logoColor: 0x0066FF,
logoAssetId: 'jioLogo'
}, {
name: 'एयरटेल',
options: ['जियो', 'एयरटेल', 'वोडाफोन', 'आइडिया'],
correct: 1,
fact: 'भारती एयरटेल भारत की दूसरी सबसे बड़ी टेलीकॉम कंपनी है।',
level: 1,
logoColor: 0xFF0000,
logoAssetId: 'airtelLogo'
}, {
name: 'बायजूस',
options: ['अनएकेडमी', 'बायजूस', 'वेदांतु', 'व्हाइट हैट जूनियर'],
correct: 1,
fact: 'बायजूस भारत की सबसे बड़ी ऑनलाइन शिक्षा कंपनी है।',
level: 2,
logoColor: 0x6C63FF,
logoAssetId: 'byjusLogo'
}, {
name: 'पतंजलि',
options: ['हिमालया', 'पतंजलि', 'डाबर', 'झंडू'],
correct: 1,
fact: 'पतंजलि आयुर्वेद भारत की प्रमुख आयुर्वेदिक उत्पाद कंपनी है।',
level: 1,
logoColor: 0x00A86B,
logoAssetId: 'patanjaliLogo'
}];
// UI Elements
var logoContainer;
var logoDisplay;
var optionButtons = [];
var starDisplay;
var scoreText;
var levelText;
var questionText;
var factText;
// Background
var background = game.attachAsset('backgroundPattern', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0
});
// Logo container
logoContainer = game.attachAsset('logoContainer', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 400
});
// Logo display will be created dynamically in loadQuestion()
logoDisplay = null;
// Score display
scoreText = new Text2('स्कोर: ' + score, {
size: 48,
fill: 0xFF6B6B
});
scoreText.anchor.set(0.5, 0);
scoreText.x = 2048 / 2;
scoreText.y = 50;
game.addChild(scoreText);
// Fullscreen leaderboard overlay
var leaderboardOverlay = new Container();
leaderboardOverlay.visible = false; // Start hidden
game.addChild(leaderboardOverlay);
// Reload overlay
var reloadOverlay = new Container();
reloadOverlay.visible = false;
game.addChild(reloadOverlay);
// Semi-transparent background for reload overlay
var reloadBg = LK.getAsset('optionButton', {
anchorX: 0,
anchorY: 0,
scaleX: 20.48,
scaleY: 27.32,
x: 0,
y: 0
});
reloadBg.alpha = 0.95;
reloadBg.tint = 0x1a1a1a;
reloadOverlay.addChild(reloadBg);
// Reload container
var reloadContainer = new Container();
reloadContainer.x = 2048 / 2;
reloadContainer.y = 1366 / 2;
reloadOverlay.addChild(reloadContainer);
var reloadTitle = new Text2('डेटा रीलोड करें', {
size: 72,
fill: 0xFFD700
});
reloadTitle.anchor.set(0.5, 0.5);
reloadTitle.y = -300;
reloadContainer.addChild(reloadTitle);
// Password input
var passwordInputBg = LK.getAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 1
});
passwordInputBg.y = -150;
reloadContainer.addChild(passwordInputBg);
var passwordInputText = new Text2('पासवर्ड दर्ज करें', {
size: 42,
fill: 0x666666
});
passwordInputText.anchor.set(0.5, 0.5);
passwordInputText.y = -150;
reloadContainer.addChild(passwordInputText);
// Name input for reload
var nameInputReloadBg = LK.getAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 1
});
nameInputReloadBg.y = -50;
reloadContainer.addChild(nameInputReloadBg);
var nameInputReloadText = new Text2('नाम दर्ज करें', {
size: 42,
fill: 0x666666
});
nameInputReloadText.anchor.set(0.5, 0.5);
nameInputReloadText.y = -50;
reloadContainer.addChild(nameInputReloadText);
// Reload confirm button
var reloadConfirmBtn = new Container();
reloadConfirmBtn.y = 50;
var reloadConfirmBg = reloadConfirmBtn.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.5,
scaleY: 1
});
reloadConfirmBg.tint = 0x4CAF50;
var reloadConfirmText = new Text2('रीलोड करें', {
size: 42,
fill: 0xFFFFFF
});
reloadConfirmText.anchor.set(0.5, 0.5);
reloadConfirmBtn.addChild(reloadConfirmText);
reloadContainer.addChild(reloadConfirmBtn);
// Reload cancel button
var reloadCancelBtn = new Container();
reloadCancelBtn.y = 150;
var reloadCancelBg = reloadCancelBtn.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.5,
scaleY: 1
});
reloadCancelBg.tint = 0xf44336;
var reloadCancelText = new Text2('रद्द करें', {
size: 42,
fill: 0xFFFFFF
});
reloadCancelText.anchor.set(0.5, 0.5);
reloadCancelBtn.addChild(reloadCancelText);
reloadContainer.addChild(reloadCancelBtn);
// Reload state variables
var reloadPassword = '';
var reloadName = '';
var isPasswordInput = false;
var isNameInput = false;
var reloadKeyboardVisible = false;
// Semi-transparent background
var leaderboardBg = LK.getAsset('optionButton', {
anchorX: 0,
anchorY: 0,
scaleX: 20.48,
scaleY: 27.32,
x: 0,
y: 0
});
leaderboardBg.alpha = 0.95;
leaderboardBg.tint = 0x1a1a1a;
leaderboardOverlay.addChild(leaderboardBg);
// Leaderboard display container
var leaderboardContainer = new Container();
leaderboardContainer.x = 2048 / 2;
leaderboardContainer.y = 400;
leaderboardOverlay.addChild(leaderboardContainer);
var leaderboardTitle = new Text2('🏆 लीडरबोर्ड 🏆', {
size: 72,
fill: 0xFFD700
});
leaderboardTitle.anchor.set(0.5, 0);
leaderboardContainer.addChild(leaderboardTitle);
// Create header
var headerBg = LK.getAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 4,
scaleY: 0.8,
y: 100
});
headerBg.tint = 0x2c3e50;
leaderboardContainer.addChild(headerBg);
var headerText = new Text2('रैंक नाम स्कोर स्टार', {
size: 42,
fill: 0xFFFFFF
});
headerText.anchor.set(0.5, 0.5);
headerText.y = 100;
leaderboardContainer.addChild(headerText);
var leaderboardTexts = [];
for (var i = 0; i < 10; i++) {
// Entry background
var entryBg = LK.getAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 4,
scaleY: 0.8,
y: 180 + i * 80
});
entryBg.tint = i % 2 === 0 ? 0x34495e : 0x2c3e50;
entryBg.alpha = 0.8;
leaderboardContainer.addChild(entryBg);
var entryText = new Text2('', {
size: 38,
fill: 0xFFFFFF
});
entryText.anchor.set(0.5, 0.5);
entryText.y = 180 + i * 80;
leaderboardTexts.push(entryText);
leaderboardContainer.addChild(entryText);
}
// Close button
var closeBtn = new Container();
closeBtn.x = 0;
closeBtn.y = 1100;
var closeBtnBg = closeBtn.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.5,
scaleY: 1
});
closeBtnBg.tint = 0xe74c3c;
var closeBtnText = new Text2('बंद करें', {
size: 42,
fill: 0xFFFFFF
});
closeBtnText.anchor.set(0.5, 0.5);
closeBtn.addChild(closeBtnText);
leaderboardContainer.addChild(closeBtn);
closeBtn.down = function () {
leaderboardOverlay.visible = false;
// Show game elements again
if (logoDisplay) logoDisplay.visible = true;
questionText.visible = true;
for (var i = 0; i < optionButtons.length; i++) {
optionButtons[i].visible = true;
}
factText.visible = true;
feedbackText.visible = true;
};
function updateLeaderboardDisplay() {
for (var i = 0; i < 10; i++) {
if (i < leaderboard.length) {
var rank = i + 1;
var medal = '';
if (rank === 1) medal = '🥇';else if (rank === 2) medal = '🥈';else if (rank === 3) medal = '🥉';else medal = rank + '.';
var entry = leaderboard[i];
leaderboardTexts[i].setText(medal + ' ' + entry.name + ' ' + entry.score + ' ' + entry.stars + '⭐');
} else {
leaderboardTexts[i].setText('');
}
}
}
updateLeaderboardDisplay();
// Add leaderboard toggle button
var leaderboardBtn = new Container();
leaderboardBtn.x = 2048 - 300;
leaderboardBtn.y = 180;
var leaderboardBtnBg = leaderboardBtn.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.1,
scaleY: 1
});
var leaderboardBtnText = new Text2('लीडरबोर्ड देखें', {
size: 36,
fill: 0x000000
});
leaderboardBtnText.anchor.set(0.5, 0.5);
leaderboardBtn.addChild(leaderboardBtnText);
game.addChild(leaderboardBtn);
// Add reset button
var resetBtn = new Container();
resetBtn.x = 300;
resetBtn.y = 180;
var resetBtnBg = resetBtn.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.1,
scaleY: 1
});
resetBtnBg.tint = 0xFF5722;
var resetBtnText = new Text2('रीसेट करें', {
size: 36,
fill: 0xFFFFFF
});
resetBtnText.anchor.set(0.5, 0.5);
resetBtn.addChild(resetBtnText);
game.addChild(resetBtn);
// Add reload button
var reloadBtn = new Container();
reloadBtn.x = 300;
reloadBtn.y = 280;
var reloadBtnBg = reloadBtn.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.1,
scaleY: 1
});
reloadBtnBg.tint = 0x2196F3;
var reloadBtnText = new Text2('रीलोड करें', {
size: 36,
fill: 0xFFFFFF
});
reloadBtnText.anchor.set(0.5, 0.5);
reloadBtn.addChild(reloadBtnText);
game.addChild(reloadBtn);
leaderboardBtn.down = function () {
leaderboardOverlay.visible = true;
updateLeaderboardDisplay();
// Hide game elements
if (logoDisplay) logoDisplay.visible = false;
questionText.visible = false;
for (var i = 0; i < optionButtons.length; i++) {
optionButtons[i].visible = false;
}
factText.visible = false;
feedbackText.visible = false;
};
// Reset game function
function resetGame() {
// Reset game state variables
gameState = 'playing';
currentLevel = 1;
currentQuestion = 0;
score = 0;
stars = 0;
lives = 3;
usedQuestions = [];
playerName = '';
playerPassword = '';
isSettingPassword = false;
// Reset storage (except leaderboard data)
storage.stars = 0;
storage.playerName = '';
storage.playerPassword = '';
// Do not reset leaderboard data - keep it preserved
// storage.highScore = 0;
// storage.leaderboardNames = [];
// storage.leaderboardScores = [];
// storage.leaderboardStars = [];
// storage.leaderboardDates = [];
// Do not reset leaderboard array
// leaderboard = [];
// Update UI displays
scoreText.setText('स्कोर: ' + score);
levelText.setText('स्तर: ' + currentLevel);
starDisplay.updateStars(stars);
livesText.setText('जीवन: ' + lives);
factText.setText('');
feedbackText.setText('');
// Update leaderboard display
updateLeaderboardDisplay();
// Hide any overlays
leaderboardOverlay.visible = false;
nameInputContainer.visible = true;
// Reset name input
nameInputText.setText('टैप करके नाम दर्ज करें');
nameInputText.tint = 0x666666;
virtualKeyboard.visible = false;
// Remove logo display if exists
if (logoDisplay) {
logoDisplay.destroy();
logoDisplay = null;
}
// Reset option buttons
for (var i = 0; i < optionButtons.length; i++) {
optionButtons[i].reset();
}
// Set score to 0 in LK system
LK.setScore(0);
}
// Reset button click handler
resetBtn.down = function () {
resetGame();
};
// Reload button click handler
reloadBtn.down = function () {
reloadOverlay.visible = true;
reloadPassword = '';
reloadName = '';
isPasswordInput = false;
isNameInput = false;
passwordInputText.setText('पासवर्ड दर्ज करें');
passwordInputText.tint = 0x666666;
nameInputReloadText.setText('नाम दर्ज करें');
nameInputReloadText.tint = 0x666666;
// Hide game elements
if (logoDisplay) logoDisplay.visible = false;
questionText.visible = false;
for (var i = 0; i < optionButtons.length; i++) {
optionButtons[i].visible = false;
}
factText.visible = false;
feedbackText.visible = false;
nameInputContainer.visible = false;
};
// Create reload keyboard container (buttons will be created after keyboardChars is defined)
var reloadKeyboard = new Container();
reloadKeyboard.y = 250;
reloadKeyboard.visible = false;
reloadContainer.addChild(reloadKeyboard);
var reloadKeyButtons = [];
// Create number keyboard for reload overlay
var reloadNumberKeyboard = new Container();
reloadNumberKeyboard.y = 250;
reloadNumberKeyboard.visible = false;
reloadContainer.addChild(reloadNumberKeyboard);
// Placeholder for reload number keyboard buttons - will be created after numberChars is defined
var reloadNumberKeyButtons = [];
// Password input handler
passwordInputBg.down = function () {
isPasswordInput = true;
isNameInput = false;
reloadNumberKeyboard.visible = true;
reloadKeyboard.visible = false;
reloadKeyboardVisible = false;
if (passwordInputText.text === 'पासवर्ड दर्ज करें') {
reloadPassword = '';
passwordInputText.setText('');
passwordInputText.tint = 0x000000;
}
};
// Name input handler for reload
nameInputReloadBg.down = function () {
isNameInput = true;
isPasswordInput = false;
reloadNumberKeyboard.visible = false;
reloadKeyboard.visible = true;
reloadKeyboardVisible = true;
if (nameInputReloadText.text === 'नाम दर्ज करें') {
reloadName = '';
nameInputReloadText.setText('');
nameInputReloadText.tint = 0x000000;
}
};
// Reload confirm handler
reloadConfirmBtn.down = function () {
if (reloadName && reloadName.length > 0 && reloadPassword && reloadPassword.length > 0) {
// Find player in leaderboard
var foundPlayer = null;
for (var i = 0; i < leaderboard.length; i++) {
if (leaderboard[i].name === reloadName) {
foundPlayer = leaderboard[i];
break;
}
}
// Check if player exists in leaderboard
if (!foundPlayer) {
// Player does not exist in the game
feedbackText.setText('यह खिलाड़ी गेम में नहीं है!');
feedbackText.tint = 0xFF0000;
feedbackText.visible = true;
LK.setTimeout(function () {
feedbackText.setText('');
}, 3000);
return;
}
// Check if we have a stored password for this player
var storedPassword = playerPasswords[reloadName] || null;
// If no stored password found or wrong password
if (!storedPassword || storedPassword !== reloadPassword) {
// Wrong password or no password stored
feedbackText.setText('गलत पासवर्ड या पासवर्ड नहीं मिला!');
feedbackText.tint = 0xFF0000;
feedbackText.visible = true;
LK.setTimeout(function () {
feedbackText.setText('');
}, 3000);
return;
}
// Password matches, restore player data
playerName = foundPlayer.name;
score = foundPlayer.score;
stars = foundPlayer.stars;
playerPassword = storedPassword;
storage.playerName = playerName;
storage.playerPassword = playerPassword;
storage.stars = stars;
// Update UI
scoreText.setText('स्कोर: ' + score);
starDisplay.updateStars(stars);
LK.setScore(score);
// Reset game state
gameState = 'playing';
currentLevel = 1;
currentQuestion = 0;
lives = 3;
usedQuestions = [];
livesText.setText('जीवन: ' + lives);
levelText.setText('स्तर: ' + currentLevel);
// Show success message
feedbackText.setText('डेटा सफलतापूर्वक रीलोड किया गया!');
feedbackText.tint = 0x4CAF50;
feedbackText.visible = true;
// Hide reload overlay
reloadOverlay.visible = false;
reloadKeyboard.visible = false;
reloadNumberKeyboard.visible = false;
reloadKeyboardVisible = false;
nameInputContainer.visible = false;
// Show game elements again
if (logoDisplay) logoDisplay.visible = true;
questionText.visible = true;
for (var i = 0; i < optionButtons.length; i++) {
optionButtons[i].visible = true;
}
factText.visible = true;
feedbackText.visible = true;
loadQuestion();
// Clear success message after 3 seconds
LK.setTimeout(function () {
feedbackText.setText('');
}, 3000);
} else {
// Empty name or password
feedbackText.setText('कृपया नाम और पासवर्ड दोनों दर्ज करें!');
feedbackText.tint = 0xFF0000;
feedbackText.visible = true;
LK.setTimeout(function () {
feedbackText.setText('');
}, 3000);
}
};
// Reload cancel handler
reloadCancelBtn.down = function () {
reloadOverlay.visible = false;
reloadNumberKeyboard.visible = false;
reloadKeyboard.visible = false;
reloadKeyboardVisible = false;
// Show game elements again
if (logoDisplay) logoDisplay.visible = true;
questionText.visible = true;
for (var i = 0; i < optionButtons.length; i++) {
optionButtons[i].visible = true;
}
factText.visible = true;
feedbackText.visible = true;
if (!playerName || playerName === '') {
nameInputContainer.visible = true;
}
};
// Level display
levelText = new Text2('स्तर: ' + currentLevel, {
size: 42,
fill: 0x4ECDC4
});
levelText.anchor.set(0, 0);
levelText.x = 150;
levelText.y = 50;
game.addChild(levelText);
// Stars display
starDisplay = new StarDisplay();
starDisplay.x = 2048 - 150;
starDisplay.y = 80;
starDisplay.updateStars(stars);
game.addChild(starDisplay);
// Lives display
var livesText = new Text2('जीवन: ' + lives, {
size: 42,
fill: 0xFF0000
});
livesText.anchor.set(0.5, 0);
livesText.x = 2048 / 2;
livesText.y = 120;
game.addChild(livesText);
// Question text
questionText = new Text2('लोगो पहचानें:', {
size: 72,
fill: 0x000000
});
questionText.anchor.set(0.5, 0);
questionText.x = 2048 / 2;
questionText.y = 700;
game.addChild(questionText);
// Create option buttons
for (var i = 0; i < 4; i++) {
var button = new OptionButton('विकल्प ' + (i + 1), false, i);
button.x = 2048 / 2;
button.y = 900 + i * 120;
optionButtons.push(button);
game.addChild(button);
}
// Fact display text
factText = new Text2('', {
size: 36,
fill: 0x7B68EE
});
factText.anchor.set(0.5, 0);
factText.x = 2048 / 2;
factText.y = 1500;
game.addChild(factText);
// Name input display
var nameInputContainer = new Container();
nameInputContainer.x = 2048 / 2;
nameInputContainer.y = 1366; // Center of screen
nameInputContainer.visible = false;
game.addChild(nameInputContainer);
var nameInputBg = LK.getAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 2
});
nameInputContainer.addChild(nameInputBg);
var nameInputTitle = new Text2('अपना नाम दर्ज करें:', {
size: 48,
fill: 0x000000
});
nameInputTitle.anchor.set(0.5, 0.5);
nameInputTitle.y = -60;
nameInputContainer.addChild(nameInputTitle);
var nameInputText = new Text2(playerName || 'टैप करके नाम दर्ज करें', {
size: 42,
fill: playerName ? 0x000000 : 0x666666
});
nameInputText.anchor.set(0.5, 0.5);
nameInputText.y = -20;
nameInputContainer.addChild(nameInputText);
// Add password input field for new players
var passwordInputFieldBg = LK.getAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2.5,
scaleY: 0.8,
y: 40
});
passwordInputFieldBg.tint = 0xE0E0E0;
nameInputContainer.addChild(passwordInputFieldBg);
var passwordInputFieldText = new Text2('पासवर्ड सेट करें', {
size: 36,
fill: 0x666666
});
passwordInputFieldText.anchor.set(0.5, 0.5);
passwordInputFieldText.y = 40;
nameInputContainer.addChild(passwordInputFieldText);
// Add password variable for new player registration
var playerPassword = '';
var isSettingPassword = false;
var nameInputSaveBtn = new Container();
nameInputSaveBtn.y = 120;
var saveBtn = nameInputSaveBtn.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.8,
scaleY: 0.8
});
var saveBtnText = new Text2('सहेजें', {
size: 36,
fill: 0x000000
});
saveBtnText.anchor.set(0.5, 0.5);
nameInputSaveBtn.addChild(saveBtnText);
nameInputContainer.addChild(nameInputSaveBtn);
// Virtual keyboard for name input
var virtualKeyboard = new Container();
virtualKeyboard.y = 200;
virtualKeyboard.visible = false;
nameInputContainer.addChild(virtualKeyboard);
var keyboardChars = ['अ', 'आ', 'इ', 'ई', 'उ', 'ऊ', 'ए', 'ऐ', 'ओ', 'औ', 'क', 'ख', 'ग', 'घ', 'च', 'छ', 'ज', 'झ', 'ट', 'ठ', 'ड', 'ढ', 'त', 'थ', 'द', 'ध', 'न', 'प', 'फ', 'ब', 'भ', 'म', 'य', 'र', 'ल', 'व', 'श', 'ष', 'स', 'ह', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ' ', '⌫'];
// Create reload keyboard buttons now that keyboardChars is defined
for (var i = 0; i < keyboardChars.length; i++) {
var reloadKeyBtn = new Container();
var row = Math.floor(i / 10);
var col = i % 10;
reloadKeyBtn.x = (col - 4.5) * 80;
reloadKeyBtn.y = row * 60;
var reloadKeyBg = reloadKeyBtn.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.15,
scaleY: 0.6
});
var reloadKeyText = new Text2(keyboardChars[i], {
size: 30,
fill: 0x000000
});
reloadKeyText.anchor.set(0.5, 0.5);
reloadKeyBtn.addChild(reloadKeyText);
reloadKeyBtn.charValue = keyboardChars[i];
reloadKeyButtons.push(reloadKeyBtn);
reloadKeyboard.addChild(reloadKeyBtn);
}
// Number keyboard for password input
var numberKeyboard = new Container();
numberKeyboard.y = 200;
numberKeyboard.visible = false;
nameInputContainer.addChild(numberKeyboard);
var numberChars = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '⌫'];
var numberKeyButtons = [];
// Now create reload number keyboard buttons after numberChars is defined
for (var i = 0; i < numberChars.length; i++) {
var reloadNumKeyBtn = new Container();
var row = Math.floor(i / 4);
var col = i % 4;
reloadNumKeyBtn.x = (col - 1.5) * 100;
reloadNumKeyBtn.y = row * 70;
var reloadNumKeyBg = reloadNumKeyBtn.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.2,
scaleY: 0.7
});
var reloadNumKeyText = new Text2(numberChars[i], {
size: 36,
fill: 0x000000
});
reloadNumKeyText.anchor.set(0.5, 0.5);
reloadNumKeyBtn.addChild(reloadNumKeyText);
reloadNumKeyBtn.charValue = numberChars[i];
reloadNumberKeyButtons.push(reloadNumKeyBtn);
reloadNumberKeyboard.addChild(reloadNumKeyBtn);
}
// Add handlers for reload keyboard buttons
for (var i = 0; i < reloadKeyButtons.length; i++) {
(function (index) {
reloadKeyButtons[index].down = function () {
var _char = reloadKeyButtons[index].charValue;
if (isNameInput) {
if (_char === '⌫') {
if (reloadName.length > 0) {
reloadName = reloadName.substring(0, reloadName.length - 1);
nameInputReloadText.setText(reloadName || 'नाम दर्ज करें');
nameInputReloadText.tint = reloadName ? 0x000000 : 0x666666;
}
} else if (reloadName.length < 20) {
reloadName += _char;
nameInputReloadText.setText(reloadName);
nameInputReloadText.tint = 0x000000;
}
}
};
})(i);
}
// Add handlers for reload number keyboard
for (var i = 0; i < reloadNumberKeyButtons.length; i++) {
(function (index) {
reloadNumberKeyButtons[index].down = function () {
var _char = reloadNumberKeyButtons[index].charValue;
if (isPasswordInput) {
if (_char === '⌫') {
if (reloadPassword.length > 0) {
reloadPassword = reloadPassword.substring(0, reloadPassword.length - 1);
passwordInputText.setText(reloadPassword || 'पासवर्ड दर्ज करें');
passwordInputText.tint = reloadPassword ? 0x000000 : 0x666666;
}
} else if (reloadPassword.length < 20) {
reloadPassword += _char;
passwordInputText.setText(reloadPassword);
passwordInputText.tint = 0x000000;
}
}
};
})(i);
}
var keyButtons = [];
for (var i = 0; i < keyboardChars.length; i++) {
var keyBtn = new Container();
var row = Math.floor(i / 10);
var col = i % 10;
keyBtn.x = (col - 4.5) * 80;
keyBtn.y = row * 60;
var keyBg = keyBtn.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.15,
scaleY: 0.6
});
var keyText = new Text2(keyboardChars[i], {
size: 30,
fill: 0x000000
});
keyText.anchor.set(0.5, 0.5);
keyBtn.addChild(keyText);
keyBtn.charValue = keyboardChars[i];
keyButtons.push(keyBtn);
virtualKeyboard.addChild(keyBtn);
}
// Create number keyboard buttons
for (var i = 0; i < numberChars.length; i++) {
var numKeyBtn = new Container();
var row = Math.floor(i / 4);
var col = i % 4;
numKeyBtn.x = (col - 1.5) * 100;
numKeyBtn.y = row * 70;
var numKeyBg = numKeyBtn.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.2,
scaleY: 0.7
});
var numKeyText = new Text2(numberChars[i], {
size: 36,
fill: 0x000000
});
numKeyText.anchor.set(0.5, 0.5);
numKeyBtn.addChild(numKeyText);
numKeyBtn.charValue = numberChars[i];
numberKeyButtons.push(numKeyBtn);
numberKeyboard.addChild(numKeyBtn);
}
// Feedback text
var feedbackText = new Text2('', {
size: 60,
fill: 0x00D300
});
feedbackText.anchor.set(0.5, 0.5);
feedbackText.x = 2048 / 2;
feedbackText.y = 1700;
game.addChild(feedbackText);
// Utility function to shuffle array
function shuffleArray(array) {
var shuffled = array.slice(); // Create a copy
for (var i = shuffled.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = shuffled[i];
shuffled[i] = shuffled[j];
shuffled[j] = temp;
}
return shuffled;
}
// Game functions
function loadQuestion() {
if (usedQuestions.length >= logoDatabase.length) {
// Game completed
showGameComplete();
return;
}
// Get available questions (not used yet)
var availableQuestions = [];
for (var i = 0; i < logoDatabase.length; i++) {
if (usedQuestions.indexOf(i) === -1) {
availableQuestions.push(i);
}
}
// Select random question from available ones
var randomIndex = Math.floor(Math.random() * availableQuestions.length);
currentQuestion = availableQuestions[randomIndex];
usedQuestions.push(currentQuestion);
var question = logoDatabase[currentQuestion];
// Remove old logo display
if (logoDisplay) {
logoDisplay.destroy();
}
// Create new logo display with actual brand logo
logoDisplay = LK.getAsset(question.logoAssetId, {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 400
});
game.addChild(logoDisplay);
// Update question text
questionText.setText('यह कौन सा ब्रांड है?');
questionText.tint = 0x000000;
questionText.y = 700;
// Shuffle options while keeping track of correct answer
var originalOptions = question.options.slice(); // Create copy
var correctAnswer = originalOptions[question.correct];
var shuffledOptions = shuffleArray(originalOptions);
var newCorrectIndex = shuffledOptions.indexOf(correctAnswer);
// Update option buttons
for (var i = 0; i < 4; i++) {
optionButtons[i].setText(shuffledOptions[i]);
optionButtons[i].isCorrect = i === newCorrectIndex;
optionButtons[i].reset();
}
// Clear fact text
factText.setText('');
feedbackText.setText('');
// Update level if needed
if (question.level !== currentLevel) {
currentLevel = question.level;
levelText.setText('स्तर: ' + currentLevel);
}
gameState = 'playing';
}
function handleCorrectAnswer() {
gameState = 'answered';
// Play correct sound
LK.getSound('correctSound').play();
// Update score
score += 10;
LK.setScore(score);
scoreText.setText('स्कोर: ' + score);
// Award stars
stars += 1;
storage.stars = stars;
starDisplay.updateStars(stars);
// Show feedback
var praises = ['सही जवाब!', 'बहुत बढ़िया!', 'शाबाश!', 'उत्कृष्ट!'];
var randomPraise = praises[Math.floor(Math.random() * praises.length)];
feedbackText.setText(randomPraise);
feedbackText.tint = 0x4CAF50;
// Show fact
var question = logoDatabase[currentQuestion];
factText.setText(question.fact);
// Create confetti effect
createConfetti();
// Move to next question after delay
LK.setTimeout(function () {
loadQuestion();
}, 3000);
}
function updateLeaderboardWithScore(finalScore) {
if (!playerName || playerName === '') return;
// Always add new entry without checking for existing players
var newEntry = {
name: playerName,
score: finalScore,
stars: stars,
date: Date.now()
};
leaderboard.push(newEntry);
// Sort by score (highest first)
leaderboard.sort(function (a, b) {
return b.score - a.score;
});
// Keep only top 10 entries
if (leaderboard.length > 10) {
leaderboard = leaderboard.slice(0, 10);
}
// Update high score
if (leaderboard.length > 0) {
highScore = leaderboard[0].score;
storage.highScore = highScore;
}
// Save leaderboard using separate arrays for each property
storage.leaderboardNames = [];
storage.leaderboardScores = [];
storage.leaderboardStars = [];
storage.leaderboardDates = [];
for (var i = 0; i < leaderboard.length; i++) {
storage.leaderboardNames[i] = leaderboard[i].name;
storage.leaderboardScores[i] = leaderboard[i].score;
storage.leaderboardStars[i] = leaderboard[i].stars;
storage.leaderboardDates[i] = leaderboard[i].date;
}
// Update display
updateLeaderboardDisplay();
}
function handleWrongAnswer() {
// Play wrong sound
LK.getSound('wrongSound').play();
// Show feedback
feedbackText.setText('फिर से कोशिश करें!');
feedbackText.tint = 0xf44336;
// Decrease life
lives -= 1;
livesText.setText('जीवन: ' + lives);
// Check for game over
if (lives <= 0) {
gameState = 'gameover';
// Update leaderboard before showing game over
updateLeaderboardWithScore(score);
LK.showGameOver();
return;
}
// Clear feedback after delay
LK.setTimeout(function () {
feedbackText.setText('');
}, 1500);
}
function createConfetti() {
// Simple confetti effect using colored rectangles
for (var i = 0; i < 10; i++) {
var confetti = LK.getAsset('starIcon', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2 + (Math.random() - 0.5) * 400,
y: 400,
scaleX: 0.3,
scaleY: 0.3
});
var colors = [0xFF6B6B, 0x4ECDC4, 0x45B7D1, 0xFFA07A, 0x98D8C8];
confetti.tint = colors[Math.floor(Math.random() * colors.length)];
game.addChild(confetti);
// Animate confetti
tween(confetti, {
y: 800 + Math.random() * 200,
x: confetti.x + (Math.random() - 0.5) * 300,
rotation: Math.random() * Math.PI * 2,
alpha: 0
}, {
duration: 1500,
easing: tween.easeOut,
onFinish: function onFinish() {
confetti.destroy();
}
});
}
}
function showGameComplete() {
gameState = 'complete';
// Update leaderboard with final score
updateLeaderboardWithScore(score);
// Show completion message
var completionText = new Text2('बधाई हो! आपने सभी लोगो पहचान लिए!', {
size: 56,
fill: 0x00C853
});
completionText.anchor.set(0.5, 0.5);
completionText.x = 2048 / 2;
completionText.y = 1200;
game.addChild(completionText);
// Show final score
var finalScoreText = new Text2('अंतिम स्कोर: ' + score, {
size: 48,
fill: 0xFF1744
});
finalScoreText.anchor.set(0.5, 0.5);
finalScoreText.x = 2048 / 2;
finalScoreText.y = 1300;
game.addChild(finalScoreText);
// Reset lives
lives = 3;
livesText.setText('जीवन: ' + lives);
// Show you win after delay
LK.setTimeout(function () {
LK.showYouWin();
}, 2000);
}
// Name input handlers
nameInputBg.down = function () {
virtualKeyboard.visible = true;
numberKeyboard.visible = false;
isSettingPassword = false;
if (nameInputText.text === 'टैप करके नाम दर्ज करें') {
playerName = '';
nameInputText.setText('');
nameInputText.tint = 0x000000;
}
};
// Password field click handler
passwordInputFieldBg.down = function () {
virtualKeyboard.visible = false;
numberKeyboard.visible = true;
isSettingPassword = true;
if (passwordInputFieldText.text === 'पासवर्ड सेट करें') {
playerPassword = '';
passwordInputFieldText.setText('');
passwordInputFieldText.tint = 0x000000;
}
};
nameInputSaveBtn.down = function () {
if (playerName && playerName.length > 0 && playerPassword && playerPassword.length > 0) {
// Check if name already exists in leaderboard
var nameExists = false;
for (var i = 0; i < leaderboard.length; i++) {
if (leaderboard[i].name === playerName) {
nameExists = true;
break;
}
}
if (nameExists) {
// Show error message for duplicate name
feedbackText.setText('यह नाम पहले से मौजूद है! कृपया दूसरा नाम चुनें।');
feedbackText.tint = 0xFF0000;
feedbackText.visible = true;
// Clear error message after 3 seconds
LK.setTimeout(function () {
feedbackText.setText('');
}, 3000);
return;
}
storage.playerName = playerName;
storage.playerPassword = playerPassword; // Save password
// Also save password in playerPasswords object
playerPasswords[playerName] = playerPassword;
storage.playerPasswords = playerPasswords;
nameInputContainer.visible = false;
virtualKeyboard.visible = false;
numberKeyboard.visible = false;
loadQuestion();
} else {
// Show error if name or password is empty
feedbackText.setText('कृपया नाम और पासवर्ड दोनों दर्ज करें!');
feedbackText.tint = 0xFF0000;
feedbackText.visible = true;
LK.setTimeout(function () {
feedbackText.setText('');
}, 3000);
}
};
for (var i = 0; i < keyButtons.length; i++) {
(function (index) {
keyButtons[index].down = function () {
var _char = keyButtons[index].charValue;
// Handle reload overlay inputs
if (reloadOverlay.visible) {
if (isPasswordInput) {
if (_char === '⌫') {
if (reloadPassword.length > 0) {
reloadPassword = reloadPassword.substring(0, reloadPassword.length - 1);
passwordInputText.setText(reloadPassword || 'पासवर्ड दर्ज करें');
passwordInputText.tint = reloadPassword ? 0x000000 : 0x666666;
}
} else if (reloadPassword.length < 20) {
reloadPassword += _char;
passwordInputText.setText(reloadPassword);
passwordInputText.tint = 0x000000;
}
} else if (isNameInput) {
if (_char === '⌫') {
if (reloadName.length > 0) {
reloadName = reloadName.substring(0, reloadName.length - 1);
nameInputReloadText.setText(reloadName || 'नाम दर्ज करें');
nameInputReloadText.tint = reloadName ? 0x000000 : 0x666666;
}
} else if (reloadName.length < 20) {
reloadName += _char;
nameInputReloadText.setText(reloadName);
nameInputReloadText.tint = 0x000000;
}
}
} else {
// Handle regular name input
if (nameInputContainer.visible) {
if (isSettingPassword) {
if (_char === '⌫') {
if (playerPassword.length > 0) {
playerPassword = playerPassword.substring(0, playerPassword.length - 1);
passwordInputFieldText.setText(playerPassword || 'पासवर्ड सेट करें');
passwordInputFieldText.tint = playerPassword ? 0x000000 : 0x666666;
}
} else if (playerPassword.length < 20) {
playerPassword += _char;
passwordInputFieldText.setText(playerPassword);
passwordInputFieldText.tint = 0x000000;
}
} else {
if (_char === '⌫') {
if (playerName.length > 0) {
playerName = playerName.substring(0, playerName.length - 1);
nameInputText.setText(playerName || 'टैप करके नाम दर्ज करें');
nameInputText.tint = playerName ? 0x000000 : 0x666666;
}
} else if (playerName.length < 20) {
playerName += _char;
nameInputText.setText(playerName);
nameInputText.tint = 0x000000;
}
}
}
}
};
})(i);
}
// Number keyboard button handlers
for (var i = 0; i < numberKeyButtons.length; i++) {
(function (index) {
numberKeyButtons[index].down = function () {
var _char = numberKeyButtons[index].charValue;
if (isSettingPassword) {
if (_char === '⌫') {
if (playerPassword.length > 0) {
playerPassword = playerPassword.substring(0, playerPassword.length - 1);
passwordInputFieldText.setText(playerPassword || 'पासवर्ड सेट करें');
passwordInputFieldText.tint = playerPassword ? 0x000000 : 0x666666;
}
} else if (playerPassword.length < 20) {
playerPassword += _char;
passwordInputFieldText.setText(playerPassword);
passwordInputFieldText.tint = 0x000000;
}
}
};
})(i);
}
// Check if player has entered name - ensure new players can enter name
if (!playerName || playerName === '') {
nameInputContainer.visible = true;
} else {
// Hide name input container once name is entered
nameInputContainer.visible = false;
// Initialize first question
loadQuestion();
}
// Play background music
LK.playMusic('backgroundMusic');
// Game update loop
game.update = function () {
// Update any animations or game logic here
if (gameState === 'playing') {
// Game is active, handle any continuous updates
}
}; /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var OptionButton = Container.expand(function (text, isCorrect, index) {
var self = Container.call(this);
self.isCorrect = isCorrect;
self.isSelected = false;
self.buttonIndex = index;
var buttonBg = self.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5
});
var buttonText = new Text2(text, {
size: 48,
fill: 0x000000
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
self.setText = function (newText) {
buttonText.setText(newText);
};
self.showCorrect = function () {
buttonBg.destroy();
buttonBg = self.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5
});
self.addChildAt(buttonBg, 0);
tween(self, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 200,
easing: tween.easeOut
});
tween(self, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 200,
easing: tween.easeOut
});
};
self.showWrong = function () {
buttonBg.destroy();
buttonBg = self.attachAsset('optionButtonWrong', {
anchorX: 0.5,
anchorY: 0.5
});
self.addChildAt(buttonBg, 0);
tween(self, {
x: self.x + 10
}, {
duration: 50
});
tween(self, {
x: self.x - 10
}, {
duration: 50
});
tween(self, {
x: self.x
}, {
duration: 50
});
};
self.reset = function () {
self.isSelected = false;
buttonBg.destroy();
buttonBg = self.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5
});
self.addChildAt(buttonBg, 0);
self.scaleX = 1.0;
self.scaleY = 1.0;
};
self.down = function (x, y, obj) {
if (gameState !== 'playing') return;
if (self.isCorrect) {
self.showCorrect();
handleCorrectAnswer();
} else {
self.showWrong();
handleWrongAnswer();
}
};
return self;
});
var StarDisplay = Container.expand(function () {
var self = Container.call(this);
var starBg = self.attachAsset('starIcon', {
anchorX: 0.5,
anchorY: 0.5
});
var starText = new Text2('0', {
size: 72,
fill: 0x000000
});
starText.anchor.set(0.5, 0.5);
self.addChild(starText);
self.updateStars = function (count) {
starText.setText(count.toString());
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xFFF8E1
});
/****
* Game Code
****/
// Game state variables
// Brand Logo Assets
var gameState = 'playing';
var currentLevel = 1;
var currentQuestion = 0;
var score = 0;
var stars = storage.stars || 0;
var highScore = storage.highScore || 0;
// New leaderboard entry structure - load from flat arrays
var leaderboard = [];
var playerPasswords = storage.playerPasswords || {}; // Store passwords as object with name as key
if (storage.leaderboardNames && storage.leaderboardNames.length > 0 && storage.leaderboardScores && storage.leaderboardStars && storage.leaderboardDates) {
for (var i = 0; i < storage.leaderboardNames.length; i++) {
leaderboard.push({
name: storage.leaderboardNames[i],
score: storage.leaderboardScores[i],
stars: storage.leaderboardStars[i],
date: storage.leaderboardDates[i]
});
}
}
var usedQuestions = [];
var lives = 3; // Initialize player lives
var playerName = storage.playerName || ''; // Store player name - empty string for new players
// Logo database
var logoDatabase = [
// Level 1 - Indian Brands
{
name: 'टाटा',
options: ['टाटा', 'रिलायंस', 'अडानी', 'बिड़ला'],
correct: 0,
fact: 'टाटा ग्रुप की स्थापना 1868 में जमशेदजी टाटा ने की थी।',
level: 1,
logoColor: 0x0066CC,
logoAssetId: 'tataLogo'
}, {
name: 'रिलायंस',
options: ['टाटा', 'रिलायंस', 'अडानी', 'बिड़ला'],
correct: 1,
fact: 'रिलायंस इंडस्ट्रीज भारत की सबसे बड़ी निजी कंपनी है।',
level: 1,
logoColor: 0xFF0000,
logoAssetId: 'relianceLogo'
}, {
name: 'बजाज',
options: ['हीरो', 'बजाज', 'टीवीएस', 'महिंद्रा'],
correct: 1,
fact: 'बजाज ऑटो भारत की प्रमुख मोटरसाइकिल निर्माता कंपनी है।',
level: 1,
logoColor: 0x0066FF,
logoAssetId: 'bajajLogo'
},
// Level 2 - International Brands
{
name: 'कोका-कोला',
options: ['पेप्सी', 'कोका-कोला', 'स्प्राइट', 'फैंटा'],
correct: 1,
fact: 'कोका-कोला दुनिया का सबसे प्रसिद्ध पेय पदार्थ ब्रांड है।',
level: 2,
logoColor: 0xDC143C,
logoAssetId: 'cocaColaLogo'
}, {
name: 'मैकडॉनल्ड्स',
options: ['केएफसी', 'मैकडॉनल्ड्स', 'बर्गर किंग', 'सबवे'],
correct: 1,
fact: 'मैकडॉनल्ड्स दुनिया की सबसे बड़ी फास्ट फूड चेन है।',
level: 2,
logoColor: 0xFFD700,
logoAssetId: 'mcdonaldsLogo'
}, {
name: 'गूगल',
options: ['माइक्रोसॉफ्ट', 'गूगल', 'एप्पल', 'अमेज़न'],
correct: 1,
fact: 'गूगल दुनिया का सबसे बड़ा सर्च इंजन है।',
level: 2,
logoColor: 0x4285f4,
logoAssetId: 'googleLogo'
}, {
name: 'अमेज़न',
options: ['ईबे', 'अमेज़न', 'अलीबाबा', 'शॉपिफाई'],
correct: 1,
fact: 'अमेज़न दुनिया की सबसे बड़ी ई-कॉमर्स कंपनी है।',
level: 2,
logoColor: 0xFF9900,
logoAssetId: 'amazonLogo'
}, {
name: 'इंफोसिस',
options: ['टीसीएस', 'इंफोसिस', 'विप्रो', 'एचसीएल'],
correct: 1,
fact: 'इंफोसिस भारत की प्रमुख आईटी कंपनी है।',
level: 1,
logoColor: 0x0066CC,
logoAssetId: 'infosysLogo'
}, {
name: 'फ्लिपकार्ट',
options: ['अमेज़न', 'फ्लिपकार्ट', 'स्नैपडील', 'मिंत्रा'],
correct: 1,
fact: 'फ्लिपकार्ट भारत की सबसे बड़ी ई-कॉमर्स कंपनी है।',
level: 1,
logoColor: 0xF7971E,
logoAssetId: 'flipkartLogo'
}, {
name: 'ज़ोमैटो',
options: ['स्विगी', 'ज़ोमैटो', 'उबर ईट्स', 'फूडपांडा'],
correct: 1,
fact: 'ज़ोमैटो भारत की प्रमुख फूड डिलीवरी कंपनी है।',
level: 1,
logoColor: 0xE23744,
logoAssetId: 'zomatoLogo'
}, {
name: 'ओला',
options: ['उबर', 'ओला', 'मेरु', 'लिफ्ट'],
correct: 1,
fact: 'ओला भारत की सबसे बड़ी राइड-शेयरिंग कंपनी है।',
level: 1,
logoColor: 0x000000,
logoAssetId: 'olaLogo'
}, {
name: 'पेटीएम',
options: ['गूगल पे', 'पेटीएम', 'फोनपे', 'भीम'],
correct: 1,
fact: 'पेटीएम भारत की सबसे बड़ी डिजिटल पेमेंट कंपनी है।',
level: 1,
logoColor: 0x00BAF2,
logoAssetId: 'paytmLogo'
}, {
name: 'जियो',
options: ['एयरटेल', 'जियो', 'वोडाफोन', 'बीएसएनएल'],
correct: 1,
fact: 'रिलायंस जियो भारत की सबसे बड़ी 4G नेटवर्क कंपनी है।',
level: 1,
logoColor: 0x0066FF,
logoAssetId: 'jioLogo'
}, {
name: 'एयरटेल',
options: ['जियो', 'एयरटेल', 'वोडाफोन', 'आइडिया'],
correct: 1,
fact: 'भारती एयरटेल भारत की दूसरी सबसे बड़ी टेलीकॉम कंपनी है।',
level: 1,
logoColor: 0xFF0000,
logoAssetId: 'airtelLogo'
}, {
name: 'बायजूस',
options: ['अनएकेडमी', 'बायजूस', 'वेदांतु', 'व्हाइट हैट जूनियर'],
correct: 1,
fact: 'बायजूस भारत की सबसे बड़ी ऑनलाइन शिक्षा कंपनी है।',
level: 2,
logoColor: 0x6C63FF,
logoAssetId: 'byjusLogo'
}, {
name: 'पतंजलि',
options: ['हिमालया', 'पतंजलि', 'डाबर', 'झंडू'],
correct: 1,
fact: 'पतंजलि आयुर्वेद भारत की प्रमुख आयुर्वेदिक उत्पाद कंपनी है।',
level: 1,
logoColor: 0x00A86B,
logoAssetId: 'patanjaliLogo'
}];
// UI Elements
var logoContainer;
var logoDisplay;
var optionButtons = [];
var starDisplay;
var scoreText;
var levelText;
var questionText;
var factText;
// Background
var background = game.attachAsset('backgroundPattern', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0
});
// Logo container
logoContainer = game.attachAsset('logoContainer', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 400
});
// Logo display will be created dynamically in loadQuestion()
logoDisplay = null;
// Score display
scoreText = new Text2('स्कोर: ' + score, {
size: 48,
fill: 0xFF6B6B
});
scoreText.anchor.set(0.5, 0);
scoreText.x = 2048 / 2;
scoreText.y = 50;
game.addChild(scoreText);
// Fullscreen leaderboard overlay
var leaderboardOverlay = new Container();
leaderboardOverlay.visible = false; // Start hidden
game.addChild(leaderboardOverlay);
// Reload overlay
var reloadOverlay = new Container();
reloadOverlay.visible = false;
game.addChild(reloadOverlay);
// Semi-transparent background for reload overlay
var reloadBg = LK.getAsset('optionButton', {
anchorX: 0,
anchorY: 0,
scaleX: 20.48,
scaleY: 27.32,
x: 0,
y: 0
});
reloadBg.alpha = 0.95;
reloadBg.tint = 0x1a1a1a;
reloadOverlay.addChild(reloadBg);
// Reload container
var reloadContainer = new Container();
reloadContainer.x = 2048 / 2;
reloadContainer.y = 1366 / 2;
reloadOverlay.addChild(reloadContainer);
var reloadTitle = new Text2('डेटा रीलोड करें', {
size: 72,
fill: 0xFFD700
});
reloadTitle.anchor.set(0.5, 0.5);
reloadTitle.y = -300;
reloadContainer.addChild(reloadTitle);
// Password input
var passwordInputBg = LK.getAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 1
});
passwordInputBg.y = -150;
reloadContainer.addChild(passwordInputBg);
var passwordInputText = new Text2('पासवर्ड दर्ज करें', {
size: 42,
fill: 0x666666
});
passwordInputText.anchor.set(0.5, 0.5);
passwordInputText.y = -150;
reloadContainer.addChild(passwordInputText);
// Name input for reload
var nameInputReloadBg = LK.getAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 1
});
nameInputReloadBg.y = -50;
reloadContainer.addChild(nameInputReloadBg);
var nameInputReloadText = new Text2('नाम दर्ज करें', {
size: 42,
fill: 0x666666
});
nameInputReloadText.anchor.set(0.5, 0.5);
nameInputReloadText.y = -50;
reloadContainer.addChild(nameInputReloadText);
// Reload confirm button
var reloadConfirmBtn = new Container();
reloadConfirmBtn.y = 50;
var reloadConfirmBg = reloadConfirmBtn.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.5,
scaleY: 1
});
reloadConfirmBg.tint = 0x4CAF50;
var reloadConfirmText = new Text2('रीलोड करें', {
size: 42,
fill: 0xFFFFFF
});
reloadConfirmText.anchor.set(0.5, 0.5);
reloadConfirmBtn.addChild(reloadConfirmText);
reloadContainer.addChild(reloadConfirmBtn);
// Reload cancel button
var reloadCancelBtn = new Container();
reloadCancelBtn.y = 150;
var reloadCancelBg = reloadCancelBtn.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.5,
scaleY: 1
});
reloadCancelBg.tint = 0xf44336;
var reloadCancelText = new Text2('रद्द करें', {
size: 42,
fill: 0xFFFFFF
});
reloadCancelText.anchor.set(0.5, 0.5);
reloadCancelBtn.addChild(reloadCancelText);
reloadContainer.addChild(reloadCancelBtn);
// Reload state variables
var reloadPassword = '';
var reloadName = '';
var isPasswordInput = false;
var isNameInput = false;
var reloadKeyboardVisible = false;
// Semi-transparent background
var leaderboardBg = LK.getAsset('optionButton', {
anchorX: 0,
anchorY: 0,
scaleX: 20.48,
scaleY: 27.32,
x: 0,
y: 0
});
leaderboardBg.alpha = 0.95;
leaderboardBg.tint = 0x1a1a1a;
leaderboardOverlay.addChild(leaderboardBg);
// Leaderboard display container
var leaderboardContainer = new Container();
leaderboardContainer.x = 2048 / 2;
leaderboardContainer.y = 400;
leaderboardOverlay.addChild(leaderboardContainer);
var leaderboardTitle = new Text2('🏆 लीडरबोर्ड 🏆', {
size: 72,
fill: 0xFFD700
});
leaderboardTitle.anchor.set(0.5, 0);
leaderboardContainer.addChild(leaderboardTitle);
// Create header
var headerBg = LK.getAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 4,
scaleY: 0.8,
y: 100
});
headerBg.tint = 0x2c3e50;
leaderboardContainer.addChild(headerBg);
var headerText = new Text2('रैंक नाम स्कोर स्टार', {
size: 42,
fill: 0xFFFFFF
});
headerText.anchor.set(0.5, 0.5);
headerText.y = 100;
leaderboardContainer.addChild(headerText);
var leaderboardTexts = [];
for (var i = 0; i < 10; i++) {
// Entry background
var entryBg = LK.getAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 4,
scaleY: 0.8,
y: 180 + i * 80
});
entryBg.tint = i % 2 === 0 ? 0x34495e : 0x2c3e50;
entryBg.alpha = 0.8;
leaderboardContainer.addChild(entryBg);
var entryText = new Text2('', {
size: 38,
fill: 0xFFFFFF
});
entryText.anchor.set(0.5, 0.5);
entryText.y = 180 + i * 80;
leaderboardTexts.push(entryText);
leaderboardContainer.addChild(entryText);
}
// Close button
var closeBtn = new Container();
closeBtn.x = 0;
closeBtn.y = 1100;
var closeBtnBg = closeBtn.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.5,
scaleY: 1
});
closeBtnBg.tint = 0xe74c3c;
var closeBtnText = new Text2('बंद करें', {
size: 42,
fill: 0xFFFFFF
});
closeBtnText.anchor.set(0.5, 0.5);
closeBtn.addChild(closeBtnText);
leaderboardContainer.addChild(closeBtn);
closeBtn.down = function () {
leaderboardOverlay.visible = false;
// Show game elements again
if (logoDisplay) logoDisplay.visible = true;
questionText.visible = true;
for (var i = 0; i < optionButtons.length; i++) {
optionButtons[i].visible = true;
}
factText.visible = true;
feedbackText.visible = true;
};
function updateLeaderboardDisplay() {
for (var i = 0; i < 10; i++) {
if (i < leaderboard.length) {
var rank = i + 1;
var medal = '';
if (rank === 1) medal = '🥇';else if (rank === 2) medal = '🥈';else if (rank === 3) medal = '🥉';else medal = rank + '.';
var entry = leaderboard[i];
leaderboardTexts[i].setText(medal + ' ' + entry.name + ' ' + entry.score + ' ' + entry.stars + '⭐');
} else {
leaderboardTexts[i].setText('');
}
}
}
updateLeaderboardDisplay();
// Add leaderboard toggle button
var leaderboardBtn = new Container();
leaderboardBtn.x = 2048 - 300;
leaderboardBtn.y = 180;
var leaderboardBtnBg = leaderboardBtn.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.1,
scaleY: 1
});
var leaderboardBtnText = new Text2('लीडरबोर्ड देखें', {
size: 36,
fill: 0x000000
});
leaderboardBtnText.anchor.set(0.5, 0.5);
leaderboardBtn.addChild(leaderboardBtnText);
game.addChild(leaderboardBtn);
// Add reset button
var resetBtn = new Container();
resetBtn.x = 300;
resetBtn.y = 180;
var resetBtnBg = resetBtn.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.1,
scaleY: 1
});
resetBtnBg.tint = 0xFF5722;
var resetBtnText = new Text2('रीसेट करें', {
size: 36,
fill: 0xFFFFFF
});
resetBtnText.anchor.set(0.5, 0.5);
resetBtn.addChild(resetBtnText);
game.addChild(resetBtn);
// Add reload button
var reloadBtn = new Container();
reloadBtn.x = 300;
reloadBtn.y = 280;
var reloadBtnBg = reloadBtn.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.1,
scaleY: 1
});
reloadBtnBg.tint = 0x2196F3;
var reloadBtnText = new Text2('रीलोड करें', {
size: 36,
fill: 0xFFFFFF
});
reloadBtnText.anchor.set(0.5, 0.5);
reloadBtn.addChild(reloadBtnText);
game.addChild(reloadBtn);
leaderboardBtn.down = function () {
leaderboardOverlay.visible = true;
updateLeaderboardDisplay();
// Hide game elements
if (logoDisplay) logoDisplay.visible = false;
questionText.visible = false;
for (var i = 0; i < optionButtons.length; i++) {
optionButtons[i].visible = false;
}
factText.visible = false;
feedbackText.visible = false;
};
// Reset game function
function resetGame() {
// Reset game state variables
gameState = 'playing';
currentLevel = 1;
currentQuestion = 0;
score = 0;
stars = 0;
lives = 3;
usedQuestions = [];
playerName = '';
playerPassword = '';
isSettingPassword = false;
// Reset storage (except leaderboard data)
storage.stars = 0;
storage.playerName = '';
storage.playerPassword = '';
// Do not reset leaderboard data - keep it preserved
// storage.highScore = 0;
// storage.leaderboardNames = [];
// storage.leaderboardScores = [];
// storage.leaderboardStars = [];
// storage.leaderboardDates = [];
// Do not reset leaderboard array
// leaderboard = [];
// Update UI displays
scoreText.setText('स्कोर: ' + score);
levelText.setText('स्तर: ' + currentLevel);
starDisplay.updateStars(stars);
livesText.setText('जीवन: ' + lives);
factText.setText('');
feedbackText.setText('');
// Update leaderboard display
updateLeaderboardDisplay();
// Hide any overlays
leaderboardOverlay.visible = false;
nameInputContainer.visible = true;
// Reset name input
nameInputText.setText('टैप करके नाम दर्ज करें');
nameInputText.tint = 0x666666;
virtualKeyboard.visible = false;
// Remove logo display if exists
if (logoDisplay) {
logoDisplay.destroy();
logoDisplay = null;
}
// Reset option buttons
for (var i = 0; i < optionButtons.length; i++) {
optionButtons[i].reset();
}
// Set score to 0 in LK system
LK.setScore(0);
}
// Reset button click handler
resetBtn.down = function () {
resetGame();
};
// Reload button click handler
reloadBtn.down = function () {
reloadOverlay.visible = true;
reloadPassword = '';
reloadName = '';
isPasswordInput = false;
isNameInput = false;
passwordInputText.setText('पासवर्ड दर्ज करें');
passwordInputText.tint = 0x666666;
nameInputReloadText.setText('नाम दर्ज करें');
nameInputReloadText.tint = 0x666666;
// Hide game elements
if (logoDisplay) logoDisplay.visible = false;
questionText.visible = false;
for (var i = 0; i < optionButtons.length; i++) {
optionButtons[i].visible = false;
}
factText.visible = false;
feedbackText.visible = false;
nameInputContainer.visible = false;
};
// Create reload keyboard container (buttons will be created after keyboardChars is defined)
var reloadKeyboard = new Container();
reloadKeyboard.y = 250;
reloadKeyboard.visible = false;
reloadContainer.addChild(reloadKeyboard);
var reloadKeyButtons = [];
// Create number keyboard for reload overlay
var reloadNumberKeyboard = new Container();
reloadNumberKeyboard.y = 250;
reloadNumberKeyboard.visible = false;
reloadContainer.addChild(reloadNumberKeyboard);
// Placeholder for reload number keyboard buttons - will be created after numberChars is defined
var reloadNumberKeyButtons = [];
// Password input handler
passwordInputBg.down = function () {
isPasswordInput = true;
isNameInput = false;
reloadNumberKeyboard.visible = true;
reloadKeyboard.visible = false;
reloadKeyboardVisible = false;
if (passwordInputText.text === 'पासवर्ड दर्ज करें') {
reloadPassword = '';
passwordInputText.setText('');
passwordInputText.tint = 0x000000;
}
};
// Name input handler for reload
nameInputReloadBg.down = function () {
isNameInput = true;
isPasswordInput = false;
reloadNumberKeyboard.visible = false;
reloadKeyboard.visible = true;
reloadKeyboardVisible = true;
if (nameInputReloadText.text === 'नाम दर्ज करें') {
reloadName = '';
nameInputReloadText.setText('');
nameInputReloadText.tint = 0x000000;
}
};
// Reload confirm handler
reloadConfirmBtn.down = function () {
if (reloadName && reloadName.length > 0 && reloadPassword && reloadPassword.length > 0) {
// Find player in leaderboard
var foundPlayer = null;
for (var i = 0; i < leaderboard.length; i++) {
if (leaderboard[i].name === reloadName) {
foundPlayer = leaderboard[i];
break;
}
}
// Check if player exists in leaderboard
if (!foundPlayer) {
// Player does not exist in the game
feedbackText.setText('यह खिलाड़ी गेम में नहीं है!');
feedbackText.tint = 0xFF0000;
feedbackText.visible = true;
LK.setTimeout(function () {
feedbackText.setText('');
}, 3000);
return;
}
// Check if we have a stored password for this player
var storedPassword = playerPasswords[reloadName] || null;
// If no stored password found or wrong password
if (!storedPassword || storedPassword !== reloadPassword) {
// Wrong password or no password stored
feedbackText.setText('गलत पासवर्ड या पासवर्ड नहीं मिला!');
feedbackText.tint = 0xFF0000;
feedbackText.visible = true;
LK.setTimeout(function () {
feedbackText.setText('');
}, 3000);
return;
}
// Password matches, restore player data
playerName = foundPlayer.name;
score = foundPlayer.score;
stars = foundPlayer.stars;
playerPassword = storedPassword;
storage.playerName = playerName;
storage.playerPassword = playerPassword;
storage.stars = stars;
// Update UI
scoreText.setText('स्कोर: ' + score);
starDisplay.updateStars(stars);
LK.setScore(score);
// Reset game state
gameState = 'playing';
currentLevel = 1;
currentQuestion = 0;
lives = 3;
usedQuestions = [];
livesText.setText('जीवन: ' + lives);
levelText.setText('स्तर: ' + currentLevel);
// Show success message
feedbackText.setText('डेटा सफलतापूर्वक रीलोड किया गया!');
feedbackText.tint = 0x4CAF50;
feedbackText.visible = true;
// Hide reload overlay
reloadOverlay.visible = false;
reloadKeyboard.visible = false;
reloadNumberKeyboard.visible = false;
reloadKeyboardVisible = false;
nameInputContainer.visible = false;
// Show game elements again
if (logoDisplay) logoDisplay.visible = true;
questionText.visible = true;
for (var i = 0; i < optionButtons.length; i++) {
optionButtons[i].visible = true;
}
factText.visible = true;
feedbackText.visible = true;
loadQuestion();
// Clear success message after 3 seconds
LK.setTimeout(function () {
feedbackText.setText('');
}, 3000);
} else {
// Empty name or password
feedbackText.setText('कृपया नाम और पासवर्ड दोनों दर्ज करें!');
feedbackText.tint = 0xFF0000;
feedbackText.visible = true;
LK.setTimeout(function () {
feedbackText.setText('');
}, 3000);
}
};
// Reload cancel handler
reloadCancelBtn.down = function () {
reloadOverlay.visible = false;
reloadNumberKeyboard.visible = false;
reloadKeyboard.visible = false;
reloadKeyboardVisible = false;
// Show game elements again
if (logoDisplay) logoDisplay.visible = true;
questionText.visible = true;
for (var i = 0; i < optionButtons.length; i++) {
optionButtons[i].visible = true;
}
factText.visible = true;
feedbackText.visible = true;
if (!playerName || playerName === '') {
nameInputContainer.visible = true;
}
};
// Level display
levelText = new Text2('स्तर: ' + currentLevel, {
size: 42,
fill: 0x4ECDC4
});
levelText.anchor.set(0, 0);
levelText.x = 150;
levelText.y = 50;
game.addChild(levelText);
// Stars display
starDisplay = new StarDisplay();
starDisplay.x = 2048 - 150;
starDisplay.y = 80;
starDisplay.updateStars(stars);
game.addChild(starDisplay);
// Lives display
var livesText = new Text2('जीवन: ' + lives, {
size: 42,
fill: 0xFF0000
});
livesText.anchor.set(0.5, 0);
livesText.x = 2048 / 2;
livesText.y = 120;
game.addChild(livesText);
// Question text
questionText = new Text2('लोगो पहचानें:', {
size: 72,
fill: 0x000000
});
questionText.anchor.set(0.5, 0);
questionText.x = 2048 / 2;
questionText.y = 700;
game.addChild(questionText);
// Create option buttons
for (var i = 0; i < 4; i++) {
var button = new OptionButton('विकल्प ' + (i + 1), false, i);
button.x = 2048 / 2;
button.y = 900 + i * 120;
optionButtons.push(button);
game.addChild(button);
}
// Fact display text
factText = new Text2('', {
size: 36,
fill: 0x7B68EE
});
factText.anchor.set(0.5, 0);
factText.x = 2048 / 2;
factText.y = 1500;
game.addChild(factText);
// Name input display
var nameInputContainer = new Container();
nameInputContainer.x = 2048 / 2;
nameInputContainer.y = 1366; // Center of screen
nameInputContainer.visible = false;
game.addChild(nameInputContainer);
var nameInputBg = LK.getAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3,
scaleY: 2
});
nameInputContainer.addChild(nameInputBg);
var nameInputTitle = new Text2('अपना नाम दर्ज करें:', {
size: 48,
fill: 0x000000
});
nameInputTitle.anchor.set(0.5, 0.5);
nameInputTitle.y = -60;
nameInputContainer.addChild(nameInputTitle);
var nameInputText = new Text2(playerName || 'टैप करके नाम दर्ज करें', {
size: 42,
fill: playerName ? 0x000000 : 0x666666
});
nameInputText.anchor.set(0.5, 0.5);
nameInputText.y = -20;
nameInputContainer.addChild(nameInputText);
// Add password input field for new players
var passwordInputFieldBg = LK.getAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2.5,
scaleY: 0.8,
y: 40
});
passwordInputFieldBg.tint = 0xE0E0E0;
nameInputContainer.addChild(passwordInputFieldBg);
var passwordInputFieldText = new Text2('पासवर्ड सेट करें', {
size: 36,
fill: 0x666666
});
passwordInputFieldText.anchor.set(0.5, 0.5);
passwordInputFieldText.y = 40;
nameInputContainer.addChild(passwordInputFieldText);
// Add password variable for new player registration
var playerPassword = '';
var isSettingPassword = false;
var nameInputSaveBtn = new Container();
nameInputSaveBtn.y = 120;
var saveBtn = nameInputSaveBtn.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.8,
scaleY: 0.8
});
var saveBtnText = new Text2('सहेजें', {
size: 36,
fill: 0x000000
});
saveBtnText.anchor.set(0.5, 0.5);
nameInputSaveBtn.addChild(saveBtnText);
nameInputContainer.addChild(nameInputSaveBtn);
// Virtual keyboard for name input
var virtualKeyboard = new Container();
virtualKeyboard.y = 200;
virtualKeyboard.visible = false;
nameInputContainer.addChild(virtualKeyboard);
var keyboardChars = ['अ', 'आ', 'इ', 'ई', 'उ', 'ऊ', 'ए', 'ऐ', 'ओ', 'औ', 'क', 'ख', 'ग', 'घ', 'च', 'छ', 'ज', 'झ', 'ट', 'ठ', 'ड', 'ढ', 'त', 'थ', 'द', 'ध', 'न', 'प', 'फ', 'ब', 'भ', 'म', 'य', 'र', 'ल', 'व', 'श', 'ष', 'स', 'ह', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ' ', '⌫'];
// Create reload keyboard buttons now that keyboardChars is defined
for (var i = 0; i < keyboardChars.length; i++) {
var reloadKeyBtn = new Container();
var row = Math.floor(i / 10);
var col = i % 10;
reloadKeyBtn.x = (col - 4.5) * 80;
reloadKeyBtn.y = row * 60;
var reloadKeyBg = reloadKeyBtn.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.15,
scaleY: 0.6
});
var reloadKeyText = new Text2(keyboardChars[i], {
size: 30,
fill: 0x000000
});
reloadKeyText.anchor.set(0.5, 0.5);
reloadKeyBtn.addChild(reloadKeyText);
reloadKeyBtn.charValue = keyboardChars[i];
reloadKeyButtons.push(reloadKeyBtn);
reloadKeyboard.addChild(reloadKeyBtn);
}
// Number keyboard for password input
var numberKeyboard = new Container();
numberKeyboard.y = 200;
numberKeyboard.visible = false;
nameInputContainer.addChild(numberKeyboard);
var numberChars = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '⌫'];
var numberKeyButtons = [];
// Now create reload number keyboard buttons after numberChars is defined
for (var i = 0; i < numberChars.length; i++) {
var reloadNumKeyBtn = new Container();
var row = Math.floor(i / 4);
var col = i % 4;
reloadNumKeyBtn.x = (col - 1.5) * 100;
reloadNumKeyBtn.y = row * 70;
var reloadNumKeyBg = reloadNumKeyBtn.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.2,
scaleY: 0.7
});
var reloadNumKeyText = new Text2(numberChars[i], {
size: 36,
fill: 0x000000
});
reloadNumKeyText.anchor.set(0.5, 0.5);
reloadNumKeyBtn.addChild(reloadNumKeyText);
reloadNumKeyBtn.charValue = numberChars[i];
reloadNumberKeyButtons.push(reloadNumKeyBtn);
reloadNumberKeyboard.addChild(reloadNumKeyBtn);
}
// Add handlers for reload keyboard buttons
for (var i = 0; i < reloadKeyButtons.length; i++) {
(function (index) {
reloadKeyButtons[index].down = function () {
var _char = reloadKeyButtons[index].charValue;
if (isNameInput) {
if (_char === '⌫') {
if (reloadName.length > 0) {
reloadName = reloadName.substring(0, reloadName.length - 1);
nameInputReloadText.setText(reloadName || 'नाम दर्ज करें');
nameInputReloadText.tint = reloadName ? 0x000000 : 0x666666;
}
} else if (reloadName.length < 20) {
reloadName += _char;
nameInputReloadText.setText(reloadName);
nameInputReloadText.tint = 0x000000;
}
}
};
})(i);
}
// Add handlers for reload number keyboard
for (var i = 0; i < reloadNumberKeyButtons.length; i++) {
(function (index) {
reloadNumberKeyButtons[index].down = function () {
var _char = reloadNumberKeyButtons[index].charValue;
if (isPasswordInput) {
if (_char === '⌫') {
if (reloadPassword.length > 0) {
reloadPassword = reloadPassword.substring(0, reloadPassword.length - 1);
passwordInputText.setText(reloadPassword || 'पासवर्ड दर्ज करें');
passwordInputText.tint = reloadPassword ? 0x000000 : 0x666666;
}
} else if (reloadPassword.length < 20) {
reloadPassword += _char;
passwordInputText.setText(reloadPassword);
passwordInputText.tint = 0x000000;
}
}
};
})(i);
}
var keyButtons = [];
for (var i = 0; i < keyboardChars.length; i++) {
var keyBtn = new Container();
var row = Math.floor(i / 10);
var col = i % 10;
keyBtn.x = (col - 4.5) * 80;
keyBtn.y = row * 60;
var keyBg = keyBtn.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.15,
scaleY: 0.6
});
var keyText = new Text2(keyboardChars[i], {
size: 30,
fill: 0x000000
});
keyText.anchor.set(0.5, 0.5);
keyBtn.addChild(keyText);
keyBtn.charValue = keyboardChars[i];
keyButtons.push(keyBtn);
virtualKeyboard.addChild(keyBtn);
}
// Create number keyboard buttons
for (var i = 0; i < numberChars.length; i++) {
var numKeyBtn = new Container();
var row = Math.floor(i / 4);
var col = i % 4;
numKeyBtn.x = (col - 1.5) * 100;
numKeyBtn.y = row * 70;
var numKeyBg = numKeyBtn.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.2,
scaleY: 0.7
});
var numKeyText = new Text2(numberChars[i], {
size: 36,
fill: 0x000000
});
numKeyText.anchor.set(0.5, 0.5);
numKeyBtn.addChild(numKeyText);
numKeyBtn.charValue = numberChars[i];
numberKeyButtons.push(numKeyBtn);
numberKeyboard.addChild(numKeyBtn);
}
// Feedback text
var feedbackText = new Text2('', {
size: 60,
fill: 0x00D300
});
feedbackText.anchor.set(0.5, 0.5);
feedbackText.x = 2048 / 2;
feedbackText.y = 1700;
game.addChild(feedbackText);
// Utility function to shuffle array
function shuffleArray(array) {
var shuffled = array.slice(); // Create a copy
for (var i = shuffled.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = shuffled[i];
shuffled[i] = shuffled[j];
shuffled[j] = temp;
}
return shuffled;
}
// Game functions
function loadQuestion() {
if (usedQuestions.length >= logoDatabase.length) {
// Game completed
showGameComplete();
return;
}
// Get available questions (not used yet)
var availableQuestions = [];
for (var i = 0; i < logoDatabase.length; i++) {
if (usedQuestions.indexOf(i) === -1) {
availableQuestions.push(i);
}
}
// Select random question from available ones
var randomIndex = Math.floor(Math.random() * availableQuestions.length);
currentQuestion = availableQuestions[randomIndex];
usedQuestions.push(currentQuestion);
var question = logoDatabase[currentQuestion];
// Remove old logo display
if (logoDisplay) {
logoDisplay.destroy();
}
// Create new logo display with actual brand logo
logoDisplay = LK.getAsset(question.logoAssetId, {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 400
});
game.addChild(logoDisplay);
// Update question text
questionText.setText('यह कौन सा ब्रांड है?');
questionText.tint = 0x000000;
questionText.y = 700;
// Shuffle options while keeping track of correct answer
var originalOptions = question.options.slice(); // Create copy
var correctAnswer = originalOptions[question.correct];
var shuffledOptions = shuffleArray(originalOptions);
var newCorrectIndex = shuffledOptions.indexOf(correctAnswer);
// Update option buttons
for (var i = 0; i < 4; i++) {
optionButtons[i].setText(shuffledOptions[i]);
optionButtons[i].isCorrect = i === newCorrectIndex;
optionButtons[i].reset();
}
// Clear fact text
factText.setText('');
feedbackText.setText('');
// Update level if needed
if (question.level !== currentLevel) {
currentLevel = question.level;
levelText.setText('स्तर: ' + currentLevel);
}
gameState = 'playing';
}
function handleCorrectAnswer() {
gameState = 'answered';
// Play correct sound
LK.getSound('correctSound').play();
// Update score
score += 10;
LK.setScore(score);
scoreText.setText('स्कोर: ' + score);
// Award stars
stars += 1;
storage.stars = stars;
starDisplay.updateStars(stars);
// Show feedback
var praises = ['सही जवाब!', 'बहुत बढ़िया!', 'शाबाश!', 'उत्कृष्ट!'];
var randomPraise = praises[Math.floor(Math.random() * praises.length)];
feedbackText.setText(randomPraise);
feedbackText.tint = 0x4CAF50;
// Show fact
var question = logoDatabase[currentQuestion];
factText.setText(question.fact);
// Create confetti effect
createConfetti();
// Move to next question after delay
LK.setTimeout(function () {
loadQuestion();
}, 3000);
}
function updateLeaderboardWithScore(finalScore) {
if (!playerName || playerName === '') return;
// Always add new entry without checking for existing players
var newEntry = {
name: playerName,
score: finalScore,
stars: stars,
date: Date.now()
};
leaderboard.push(newEntry);
// Sort by score (highest first)
leaderboard.sort(function (a, b) {
return b.score - a.score;
});
// Keep only top 10 entries
if (leaderboard.length > 10) {
leaderboard = leaderboard.slice(0, 10);
}
// Update high score
if (leaderboard.length > 0) {
highScore = leaderboard[0].score;
storage.highScore = highScore;
}
// Save leaderboard using separate arrays for each property
storage.leaderboardNames = [];
storage.leaderboardScores = [];
storage.leaderboardStars = [];
storage.leaderboardDates = [];
for (var i = 0; i < leaderboard.length; i++) {
storage.leaderboardNames[i] = leaderboard[i].name;
storage.leaderboardScores[i] = leaderboard[i].score;
storage.leaderboardStars[i] = leaderboard[i].stars;
storage.leaderboardDates[i] = leaderboard[i].date;
}
// Update display
updateLeaderboardDisplay();
}
function handleWrongAnswer() {
// Play wrong sound
LK.getSound('wrongSound').play();
// Show feedback
feedbackText.setText('फिर से कोशिश करें!');
feedbackText.tint = 0xf44336;
// Decrease life
lives -= 1;
livesText.setText('जीवन: ' + lives);
// Check for game over
if (lives <= 0) {
gameState = 'gameover';
// Update leaderboard before showing game over
updateLeaderboardWithScore(score);
LK.showGameOver();
return;
}
// Clear feedback after delay
LK.setTimeout(function () {
feedbackText.setText('');
}, 1500);
}
function createConfetti() {
// Simple confetti effect using colored rectangles
for (var i = 0; i < 10; i++) {
var confetti = LK.getAsset('starIcon', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2 + (Math.random() - 0.5) * 400,
y: 400,
scaleX: 0.3,
scaleY: 0.3
});
var colors = [0xFF6B6B, 0x4ECDC4, 0x45B7D1, 0xFFA07A, 0x98D8C8];
confetti.tint = colors[Math.floor(Math.random() * colors.length)];
game.addChild(confetti);
// Animate confetti
tween(confetti, {
y: 800 + Math.random() * 200,
x: confetti.x + (Math.random() - 0.5) * 300,
rotation: Math.random() * Math.PI * 2,
alpha: 0
}, {
duration: 1500,
easing: tween.easeOut,
onFinish: function onFinish() {
confetti.destroy();
}
});
}
}
function showGameComplete() {
gameState = 'complete';
// Update leaderboard with final score
updateLeaderboardWithScore(score);
// Show completion message
var completionText = new Text2('बधाई हो! आपने सभी लोगो पहचान लिए!', {
size: 56,
fill: 0x00C853
});
completionText.anchor.set(0.5, 0.5);
completionText.x = 2048 / 2;
completionText.y = 1200;
game.addChild(completionText);
// Show final score
var finalScoreText = new Text2('अंतिम स्कोर: ' + score, {
size: 48,
fill: 0xFF1744
});
finalScoreText.anchor.set(0.5, 0.5);
finalScoreText.x = 2048 / 2;
finalScoreText.y = 1300;
game.addChild(finalScoreText);
// Reset lives
lives = 3;
livesText.setText('जीवन: ' + lives);
// Show you win after delay
LK.setTimeout(function () {
LK.showYouWin();
}, 2000);
}
// Name input handlers
nameInputBg.down = function () {
virtualKeyboard.visible = true;
numberKeyboard.visible = false;
isSettingPassword = false;
if (nameInputText.text === 'टैप करके नाम दर्ज करें') {
playerName = '';
nameInputText.setText('');
nameInputText.tint = 0x000000;
}
};
// Password field click handler
passwordInputFieldBg.down = function () {
virtualKeyboard.visible = false;
numberKeyboard.visible = true;
isSettingPassword = true;
if (passwordInputFieldText.text === 'पासवर्ड सेट करें') {
playerPassword = '';
passwordInputFieldText.setText('');
passwordInputFieldText.tint = 0x000000;
}
};
nameInputSaveBtn.down = function () {
if (playerName && playerName.length > 0 && playerPassword && playerPassword.length > 0) {
// Check if name already exists in leaderboard
var nameExists = false;
for (var i = 0; i < leaderboard.length; i++) {
if (leaderboard[i].name === playerName) {
nameExists = true;
break;
}
}
if (nameExists) {
// Show error message for duplicate name
feedbackText.setText('यह नाम पहले से मौजूद है! कृपया दूसरा नाम चुनें।');
feedbackText.tint = 0xFF0000;
feedbackText.visible = true;
// Clear error message after 3 seconds
LK.setTimeout(function () {
feedbackText.setText('');
}, 3000);
return;
}
storage.playerName = playerName;
storage.playerPassword = playerPassword; // Save password
// Also save password in playerPasswords object
playerPasswords[playerName] = playerPassword;
storage.playerPasswords = playerPasswords;
nameInputContainer.visible = false;
virtualKeyboard.visible = false;
numberKeyboard.visible = false;
loadQuestion();
} else {
// Show error if name or password is empty
feedbackText.setText('कृपया नाम और पासवर्ड दोनों दर्ज करें!');
feedbackText.tint = 0xFF0000;
feedbackText.visible = true;
LK.setTimeout(function () {
feedbackText.setText('');
}, 3000);
}
};
for (var i = 0; i < keyButtons.length; i++) {
(function (index) {
keyButtons[index].down = function () {
var _char = keyButtons[index].charValue;
// Handle reload overlay inputs
if (reloadOverlay.visible) {
if (isPasswordInput) {
if (_char === '⌫') {
if (reloadPassword.length > 0) {
reloadPassword = reloadPassword.substring(0, reloadPassword.length - 1);
passwordInputText.setText(reloadPassword || 'पासवर्ड दर्ज करें');
passwordInputText.tint = reloadPassword ? 0x000000 : 0x666666;
}
} else if (reloadPassword.length < 20) {
reloadPassword += _char;
passwordInputText.setText(reloadPassword);
passwordInputText.tint = 0x000000;
}
} else if (isNameInput) {
if (_char === '⌫') {
if (reloadName.length > 0) {
reloadName = reloadName.substring(0, reloadName.length - 1);
nameInputReloadText.setText(reloadName || 'नाम दर्ज करें');
nameInputReloadText.tint = reloadName ? 0x000000 : 0x666666;
}
} else if (reloadName.length < 20) {
reloadName += _char;
nameInputReloadText.setText(reloadName);
nameInputReloadText.tint = 0x000000;
}
}
} else {
// Handle regular name input
if (nameInputContainer.visible) {
if (isSettingPassword) {
if (_char === '⌫') {
if (playerPassword.length > 0) {
playerPassword = playerPassword.substring(0, playerPassword.length - 1);
passwordInputFieldText.setText(playerPassword || 'पासवर्ड सेट करें');
passwordInputFieldText.tint = playerPassword ? 0x000000 : 0x666666;
}
} else if (playerPassword.length < 20) {
playerPassword += _char;
passwordInputFieldText.setText(playerPassword);
passwordInputFieldText.tint = 0x000000;
}
} else {
if (_char === '⌫') {
if (playerName.length > 0) {
playerName = playerName.substring(0, playerName.length - 1);
nameInputText.setText(playerName || 'टैप करके नाम दर्ज करें');
nameInputText.tint = playerName ? 0x000000 : 0x666666;
}
} else if (playerName.length < 20) {
playerName += _char;
nameInputText.setText(playerName);
nameInputText.tint = 0x000000;
}
}
}
}
};
})(i);
}
// Number keyboard button handlers
for (var i = 0; i < numberKeyButtons.length; i++) {
(function (index) {
numberKeyButtons[index].down = function () {
var _char = numberKeyButtons[index].charValue;
if (isSettingPassword) {
if (_char === '⌫') {
if (playerPassword.length > 0) {
playerPassword = playerPassword.substring(0, playerPassword.length - 1);
passwordInputFieldText.setText(playerPassword || 'पासवर्ड सेट करें');
passwordInputFieldText.tint = playerPassword ? 0x000000 : 0x666666;
}
} else if (playerPassword.length < 20) {
playerPassword += _char;
passwordInputFieldText.setText(playerPassword);
passwordInputFieldText.tint = 0x000000;
}
}
};
})(i);
}
// Check if player has entered name - ensure new players can enter name
if (!playerName || playerName === '') {
nameInputContainer.visible = true;
} else {
// Hide name input container once name is entered
nameInputContainer.visible = false;
// Initialize first question
loadQuestion();
}
// Play background music
LK.playMusic('backgroundMusic');
// Game update loop
game.update = function () {
// Update any animations or game logic here
if (gameState === 'playing') {
// Game is active, handle any continuous updates
}
};