/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var DropZone = Container.expand(function (index) { var self = Container.call(this); self.index = index; self.occupiedTile = null; self.background = self.attachAsset('dropZone', { anchorX: 0.5, anchorY: 0.5 }); // Add text display for showing placed letter self.placedLetterText = new Text2('', { size: 40, fill: 0x333333 }); self.placedLetterText.anchor.set(0.5, 0.5); self.placedLetterText.y = -80; // Position above the drop zone self.addChild(self.placedLetterText); self.isEmpty = function () { return self.occupiedTile === null; }; self.placeTile = function (tile) { if (self.occupiedTile) { self.occupiedTile.isPlaced = false; } self.occupiedTile = tile; tile.isPlaced = true; tile.x = self.x; tile.y = self.y; // Update the text display to show the placed letter self.placedLetterText.setText(tile.letter); }; self.removeTile = function () { if (self.occupiedTile) { self.occupiedTile.isPlaced = false; self.occupiedTile = null; } // Clear the text display when tile is removed self.placedLetterText.setText(''); }; return self; }); var LetterTile = Container.expand(function (letter, isCorrect) { var self = Container.call(this); self.letter = letter; self.isCorrect = isCorrect || false; self.isPlaced = false; self.originalX = 0; self.originalY = 0; self.isDragging = false; self.background = self.attachAsset('letterTile', { anchorX: 0.5, anchorY: 0.5 }); self.letterText = new Text2(letter, { size: 60, fill: 0x000000 }); self.letterText.anchor.set(0.5, 0.5); self.addChild(self.letterText); self.setCorrect = function () { self.removeChild(self.background); self.background = self.attachAsset('correctTile', { anchorX: 0.5, anchorY: 0.5 }); self.addChildAt(self.background, 0); self.isCorrect = true; }; self.setWrong = function () { self.removeChild(self.background); self.background = self.attachAsset('wrongTile', { anchorX: 0.5, anchorY: 0.5 }); self.addChildAt(self.background, 0); tween(self.background, { tint: 0xffffff }, { duration: 1000 }); }; self.resetTile = function () { self.removeChild(self.background); self.background = self.attachAsset('letterTile', { anchorX: 0.5, anchorY: 0.5 }); self.addChildAt(self.background, 0); self.isCorrect = false; self.isPlaced = false; }; self.down = function (x, y, obj) { if (!self.isCorrect) { self.isDragging = true; draggedTile = self; } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xf5f5f5 }); /**** * Game Code ****/ var words = [{ english: "CAT", hindi: "बिल्ली", letters: ["बि", "ल्ली"] }, { english: "DOG", hindi: "कुत्ता", letters: ["कु", "त्ता"] }, { english: "BOOK", hindi: "किताब", letters: ["कि", "ता", "ब"] }, { english: "WATER", hindi: "पानी", letters: ["पा", "नी"] }, { english: "HOUSE", hindi: "घर", letters: ["घ", "र"] }, { english: "FLOWER", hindi: "फूल", letters: ["फू", "ल"] }, { english: "TREE", hindi: "पेड़", letters: ["पे", "ड़"] }, { english: "BIRD", hindi: "पक्षी", letters: ["प", "क्षी"] }, { english: "FISH", hindi: "मछली", letters: ["म", "छ", "ली"] }, { english: "STAR", hindi: "तारा", letters: ["ता", "रा"] }]; // Shuffle all words at game start words = shuffleArray(words); var currentWordIndex = 0; var currentWord = words[currentWordIndex]; var letterTiles = []; var dropZones = []; var draggedTile = null; var gameCompleted = false; var currentLevel = 1; var wordsPerLevel = 3; var totalLevels = Math.ceil(words.length / wordsPerLevel); var wordsCompletedInLevel = 0; var levelScore = 0; var maxLives = 3; var currentLives = maxLives; var wrongAttempts = 0; var maxWrongAttempts = 2; // Allow 2 wrong attempts per word before losing a life // UI Elements var englishWordText = new Text2('', { size: 80, fill: 0x333333 }); englishWordText.anchor.set(0.5, 0.5); englishWordText.x = 1024; englishWordText.y = 300; game.addChild(englishWordText); var hindiWordText = new Text2('', { size: 60, fill: 0x666666 }); hindiWordText.anchor.set(0.5, 0.5); hindiWordText.x = 1024; hindiWordText.y = 380; game.addChild(hindiWordText); var instructionText = new Text2('Drag the Hindi letters to form the word:', { size: 40, fill: 0x888888 }); instructionText.anchor.set(0.5, 0.5); instructionText.x = 1024; instructionText.y = 500; game.addChild(instructionText); // Score display var scoreText = new Text2('Score: 0', { size: 50, fill: 0x333333 }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); // Level display var levelText = new Text2('Level: 1', { size: 50, fill: 0x333333 }); levelText.anchor.set(0.5, 0); levelText.x = 300; LK.gui.top.addChild(levelText); // Lives display var livesText = new Text2('Lives: ♥♥♥', { size: 50, fill: 0xff0000 }); livesText.anchor.set(0.5, 0); livesText.x = -300; LK.gui.top.addChild(livesText); function updateLivesDisplay() { var heartsText = ''; for (var i = 0; i < currentLives; i++) { heartsText += '♥'; } for (var i = currentLives; i < maxLives; i++) { heartsText += '♡'; } livesText.setText('Lives: ' + heartsText); } function shuffleArray(array) { var shuffled = array.slice(); 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; } function createLetterTiles() { // Clear existing tiles for (var i = 0; i < letterTiles.length; i++) { letterTiles[i].destroy(); } letterTiles = []; var shuffledLetters = shuffleArray(currentWord.letters); var startX = 1024 - (shuffledLetters.length - 1) * 140 / 2; for (var i = 0; i < shuffledLetters.length; i++) { var tile = new LetterTile(shuffledLetters[i]); tile.x = startX + i * 140; tile.y = 2000; tile.originalX = tile.x; tile.originalY = tile.y; letterTiles.push(tile); game.addChild(tile); } } function createDropZones() { // Clear existing zones for (var i = 0; i < dropZones.length; i++) { dropZones[i].destroy(); } dropZones = []; var startX = 1024 - (currentWord.letters.length - 1) * 140 / 2; for (var i = 0; i < currentWord.letters.length; i++) { var zone = new DropZone(i); zone.x = startX + i * 140; zone.y = 1200; dropZones.push(zone); game.addChild(zone); } } function checkWord() { var formedWord = ""; var allPlaced = true; for (var i = 0; i < dropZones.length; i++) { if (dropZones[i].occupiedTile) { formedWord += dropZones[i].occupiedTile.letter; } else { allPlaced = false; break; } } if (allPlaced) { if (formedWord === currentWord.hindi) { // Correct word LK.getSound('correct').play(); var pointsAwarded = 10 * currentLevel; // More points for higher levels LK.setScore(LK.getScore() + pointsAwarded); scoreText.setText('Score: ' + LK.getScore()); // Mark tiles as correct for (var i = 0; i < dropZones.length; i++) { if (dropZones[i].occupiedTile) { dropZones[i].occupiedTile.setCorrect(); } } // Show correct Hindi word hindiWordText.setText('✓ ' + currentWord.hindi); hindiWordText.tint = 0x00aa00; // Move to next word after delay - less time for higher levels var delayTime = Math.max(1000, 2500 - currentLevel * 200); LK.setTimeout(function () { nextWord(); }, delayTime); } else { // Wrong word LK.getSound('wrong').play(); wrongAttempts++; // Reduce life immediately for wrong answer currentLives--; updateLivesDisplay(); // Show wrong feedback for (var i = 0; i < dropZones.length; i++) { if (dropZones[i].occupiedTile) { dropZones[i].occupiedTile.setWrong(); } } // Check for game over if (currentLives <= 0) { LK.setTimeout(function () { LK.showGameOver(); }, 1500); return; } // Show life lost message var lifeLostText = new Text2('Life Lost!', { size: 60, fill: 0xff0000 }); lifeLostText.anchor.set(0.5, 0.5); lifeLostText.x = 1024; lifeLostText.y = 900; game.addChild(lifeLostText); LK.setTimeout(function () { lifeLostText.destroy(); }, 1500); // Reset after delay LK.setTimeout(function () { resetCurrentWord(); }, 1500); } } } function nextLevel() { currentLevel++; wordsCompletedInLevel = 0; levelScore = 0; // Update level display levelText.setText('Level: ' + currentLevel); // Show level complete message var levelCompleteText = new Text2('Level ' + (currentLevel - 1) + ' Complete!', { size: 60, fill: 0x00aa00 }); levelCompleteText.anchor.set(0.5, 0.5); levelCompleteText.x = 1024; levelCompleteText.y = 800; game.addChild(levelCompleteText); // Create options for player var winOptionText = new Text2('You Won This Level!', { size: 50, fill: 0x00aa00 }); winOptionText.anchor.set(0.5, 0.5); winOptionText.x = 1024; winOptionText.y = 900; game.addChild(winOptionText); var playNextButton = new Text2('Play Next', { size: 40, fill: 0x0066cc }); playNextButton.anchor.set(0.5, 0.5); playNextButton.x = 1024; playNextButton.y = 1000; game.addChild(playNextButton); var playAgainButton = new Text2('Play Again', { size: 40, fill: 0xcc6600 }); playAgainButton.anchor.set(0.5, 0.5); playAgainButton.x = 1024; playAgainButton.y = 1100; game.addChild(playAgainButton); // Add button functionality playNextButton.down = function () { levelCompleteText.destroy(); winOptionText.destroy(); playNextButton.destroy(); playAgainButton.destroy(); }; playAgainButton.down = function () { // Reset to current level beginning currentWordIndex = (currentLevel - 1) * wordsPerLevel; wordsCompletedInLevel = 0; currentWord = words[currentWordIndex]; levelCompleteText.destroy(); winOptionText.destroy(); playNextButton.destroy(); playAgainButton.destroy(); setupWord(); }; // Flash effect for visual feedback LK.effects.flashObject(levelCompleteText, 0x00aa00, 2000); } function nextWord() { currentWordIndex++; wordsCompletedInLevel++; levelScore += 10; wrongAttempts = 0; // Reset wrong attempts for new word // Check if level is complete if (wordsCompletedInLevel >= wordsPerLevel) { // Level completed if (currentLevel >= totalLevels) { // Game completed - all levels finished gameCompleted = true; LK.getSound('complete').play(); LK.showYouWin(); return; } else { // Move to next level nextLevel(); } } if (currentWordIndex >= words.length) { // All words completed gameCompleted = true; LK.getSound('complete').play(); LK.showYouWin(); return; } currentWord = words[currentWordIndex]; setupWord(); } function resetCurrentWord() { for (var i = 0; i < letterTiles.length; i++) { letterTiles[i].resetTile(); letterTiles[i].x = letterTiles[i].originalX; letterTiles[i].y = letterTiles[i].originalY; } for (var i = 0; i < dropZones.length; i++) { dropZones[i].removeTile(); } hindiWordText.setText(''); hindiWordText.tint = 0x666666; } function setupWord() { englishWordText.setText(currentWord.english); hindiWordText.setText(''); hindiWordText.tint = 0x666666; createLetterTiles(); createDropZones(); } function findNearestDropZone(x, y) { var nearest = null; var minDistance = Infinity; for (var i = 0; i < dropZones.length; i++) { var dx = x - dropZones[i].x; var dy = y - dropZones[i].y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < minDistance && distance < 100) { minDistance = distance; nearest = dropZones[i]; } } return nearest; } // Initialize lives display updateLivesDisplay(); // Initialize first word setupWord(); // Game controls game.move = function (x, y, obj) { if (draggedTile && draggedTile.isDragging) { draggedTile.x = x; draggedTile.y = y; } }; game.up = function (x, y, obj) { if (draggedTile && draggedTile.isDragging) { draggedTile.isDragging = false; var nearestZone = findNearestDropZone(x, y); if (nearestZone) { // Remove tile from previous zone if it was placed for (var i = 0; i < dropZones.length; i++) { if (dropZones[i].occupiedTile === draggedTile) { dropZones[i].removeTile(); break; } } // Place tile in new zone nearestZone.placeTile(draggedTile); // Check if word is complete LK.setTimeout(function () { checkWord(); }, 100); } else { // Return to original position if (draggedTile.isPlaced) { // Find and remove from current zone for (var i = 0; i < dropZones.length; i++) { if (dropZones[i].occupiedTile === draggedTile) { dropZones[i].removeTile(); break; } } } tween(draggedTile, { x: draggedTile.originalX, y: draggedTile.originalY }, { duration: 300, easing: tween.easeOut }); } draggedTile = null; } }; game.update = function () { // Update score display scoreText.setText('Score: ' + LK.getScore()); // Update level display levelText.setText('Level: ' + currentLevel + ' (' + wordsCompletedInLevel + '/' + wordsPerLevel + ')'); // Update lives display updateLivesDisplay(); };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var DropZone = Container.expand(function (index) {
var self = Container.call(this);
self.index = index;
self.occupiedTile = null;
self.background = self.attachAsset('dropZone', {
anchorX: 0.5,
anchorY: 0.5
});
// Add text display for showing placed letter
self.placedLetterText = new Text2('', {
size: 40,
fill: 0x333333
});
self.placedLetterText.anchor.set(0.5, 0.5);
self.placedLetterText.y = -80; // Position above the drop zone
self.addChild(self.placedLetterText);
self.isEmpty = function () {
return self.occupiedTile === null;
};
self.placeTile = function (tile) {
if (self.occupiedTile) {
self.occupiedTile.isPlaced = false;
}
self.occupiedTile = tile;
tile.isPlaced = true;
tile.x = self.x;
tile.y = self.y;
// Update the text display to show the placed letter
self.placedLetterText.setText(tile.letter);
};
self.removeTile = function () {
if (self.occupiedTile) {
self.occupiedTile.isPlaced = false;
self.occupiedTile = null;
}
// Clear the text display when tile is removed
self.placedLetterText.setText('');
};
return self;
});
var LetterTile = Container.expand(function (letter, isCorrect) {
var self = Container.call(this);
self.letter = letter;
self.isCorrect = isCorrect || false;
self.isPlaced = false;
self.originalX = 0;
self.originalY = 0;
self.isDragging = false;
self.background = self.attachAsset('letterTile', {
anchorX: 0.5,
anchorY: 0.5
});
self.letterText = new Text2(letter, {
size: 60,
fill: 0x000000
});
self.letterText.anchor.set(0.5, 0.5);
self.addChild(self.letterText);
self.setCorrect = function () {
self.removeChild(self.background);
self.background = self.attachAsset('correctTile', {
anchorX: 0.5,
anchorY: 0.5
});
self.addChildAt(self.background, 0);
self.isCorrect = true;
};
self.setWrong = function () {
self.removeChild(self.background);
self.background = self.attachAsset('wrongTile', {
anchorX: 0.5,
anchorY: 0.5
});
self.addChildAt(self.background, 0);
tween(self.background, {
tint: 0xffffff
}, {
duration: 1000
});
};
self.resetTile = function () {
self.removeChild(self.background);
self.background = self.attachAsset('letterTile', {
anchorX: 0.5,
anchorY: 0.5
});
self.addChildAt(self.background, 0);
self.isCorrect = false;
self.isPlaced = false;
};
self.down = function (x, y, obj) {
if (!self.isCorrect) {
self.isDragging = true;
draggedTile = self;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xf5f5f5
});
/****
* Game Code
****/
var words = [{
english: "CAT",
hindi: "बिल्ली",
letters: ["बि", "ल्ली"]
}, {
english: "DOG",
hindi: "कुत्ता",
letters: ["कु", "त्ता"]
}, {
english: "BOOK",
hindi: "किताब",
letters: ["कि", "ता", "ब"]
}, {
english: "WATER",
hindi: "पानी",
letters: ["पा", "नी"]
}, {
english: "HOUSE",
hindi: "घर",
letters: ["घ", "र"]
}, {
english: "FLOWER",
hindi: "फूल",
letters: ["फू", "ल"]
}, {
english: "TREE",
hindi: "पेड़",
letters: ["पे", "ड़"]
}, {
english: "BIRD",
hindi: "पक्षी",
letters: ["प", "क्षी"]
}, {
english: "FISH",
hindi: "मछली",
letters: ["म", "छ", "ली"]
}, {
english: "STAR",
hindi: "तारा",
letters: ["ता", "रा"]
}];
// Shuffle all words at game start
words = shuffleArray(words);
var currentWordIndex = 0;
var currentWord = words[currentWordIndex];
var letterTiles = [];
var dropZones = [];
var draggedTile = null;
var gameCompleted = false;
var currentLevel = 1;
var wordsPerLevel = 3;
var totalLevels = Math.ceil(words.length / wordsPerLevel);
var wordsCompletedInLevel = 0;
var levelScore = 0;
var maxLives = 3;
var currentLives = maxLives;
var wrongAttempts = 0;
var maxWrongAttempts = 2; // Allow 2 wrong attempts per word before losing a life
// UI Elements
var englishWordText = new Text2('', {
size: 80,
fill: 0x333333
});
englishWordText.anchor.set(0.5, 0.5);
englishWordText.x = 1024;
englishWordText.y = 300;
game.addChild(englishWordText);
var hindiWordText = new Text2('', {
size: 60,
fill: 0x666666
});
hindiWordText.anchor.set(0.5, 0.5);
hindiWordText.x = 1024;
hindiWordText.y = 380;
game.addChild(hindiWordText);
var instructionText = new Text2('Drag the Hindi letters to form the word:', {
size: 40,
fill: 0x888888
});
instructionText.anchor.set(0.5, 0.5);
instructionText.x = 1024;
instructionText.y = 500;
game.addChild(instructionText);
// Score display
var scoreText = new Text2('Score: 0', {
size: 50,
fill: 0x333333
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
// Level display
var levelText = new Text2('Level: 1', {
size: 50,
fill: 0x333333
});
levelText.anchor.set(0.5, 0);
levelText.x = 300;
LK.gui.top.addChild(levelText);
// Lives display
var livesText = new Text2('Lives: ♥♥♥', {
size: 50,
fill: 0xff0000
});
livesText.anchor.set(0.5, 0);
livesText.x = -300;
LK.gui.top.addChild(livesText);
function updateLivesDisplay() {
var heartsText = '';
for (var i = 0; i < currentLives; i++) {
heartsText += '♥';
}
for (var i = currentLives; i < maxLives; i++) {
heartsText += '♡';
}
livesText.setText('Lives: ' + heartsText);
}
function shuffleArray(array) {
var shuffled = array.slice();
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;
}
function createLetterTiles() {
// Clear existing tiles
for (var i = 0; i < letterTiles.length; i++) {
letterTiles[i].destroy();
}
letterTiles = [];
var shuffledLetters = shuffleArray(currentWord.letters);
var startX = 1024 - (shuffledLetters.length - 1) * 140 / 2;
for (var i = 0; i < shuffledLetters.length; i++) {
var tile = new LetterTile(shuffledLetters[i]);
tile.x = startX + i * 140;
tile.y = 2000;
tile.originalX = tile.x;
tile.originalY = tile.y;
letterTiles.push(tile);
game.addChild(tile);
}
}
function createDropZones() {
// Clear existing zones
for (var i = 0; i < dropZones.length; i++) {
dropZones[i].destroy();
}
dropZones = [];
var startX = 1024 - (currentWord.letters.length - 1) * 140 / 2;
for (var i = 0; i < currentWord.letters.length; i++) {
var zone = new DropZone(i);
zone.x = startX + i * 140;
zone.y = 1200;
dropZones.push(zone);
game.addChild(zone);
}
}
function checkWord() {
var formedWord = "";
var allPlaced = true;
for (var i = 0; i < dropZones.length; i++) {
if (dropZones[i].occupiedTile) {
formedWord += dropZones[i].occupiedTile.letter;
} else {
allPlaced = false;
break;
}
}
if (allPlaced) {
if (formedWord === currentWord.hindi) {
// Correct word
LK.getSound('correct').play();
var pointsAwarded = 10 * currentLevel; // More points for higher levels
LK.setScore(LK.getScore() + pointsAwarded);
scoreText.setText('Score: ' + LK.getScore());
// Mark tiles as correct
for (var i = 0; i < dropZones.length; i++) {
if (dropZones[i].occupiedTile) {
dropZones[i].occupiedTile.setCorrect();
}
}
// Show correct Hindi word
hindiWordText.setText('✓ ' + currentWord.hindi);
hindiWordText.tint = 0x00aa00;
// Move to next word after delay - less time for higher levels
var delayTime = Math.max(1000, 2500 - currentLevel * 200);
LK.setTimeout(function () {
nextWord();
}, delayTime);
} else {
// Wrong word
LK.getSound('wrong').play();
wrongAttempts++;
// Reduce life immediately for wrong answer
currentLives--;
updateLivesDisplay();
// Show wrong feedback
for (var i = 0; i < dropZones.length; i++) {
if (dropZones[i].occupiedTile) {
dropZones[i].occupiedTile.setWrong();
}
}
// Check for game over
if (currentLives <= 0) {
LK.setTimeout(function () {
LK.showGameOver();
}, 1500);
return;
}
// Show life lost message
var lifeLostText = new Text2('Life Lost!', {
size: 60,
fill: 0xff0000
});
lifeLostText.anchor.set(0.5, 0.5);
lifeLostText.x = 1024;
lifeLostText.y = 900;
game.addChild(lifeLostText);
LK.setTimeout(function () {
lifeLostText.destroy();
}, 1500);
// Reset after delay
LK.setTimeout(function () {
resetCurrentWord();
}, 1500);
}
}
}
function nextLevel() {
currentLevel++;
wordsCompletedInLevel = 0;
levelScore = 0;
// Update level display
levelText.setText('Level: ' + currentLevel);
// Show level complete message
var levelCompleteText = new Text2('Level ' + (currentLevel - 1) + ' Complete!', {
size: 60,
fill: 0x00aa00
});
levelCompleteText.anchor.set(0.5, 0.5);
levelCompleteText.x = 1024;
levelCompleteText.y = 800;
game.addChild(levelCompleteText);
// Create options for player
var winOptionText = new Text2('You Won This Level!', {
size: 50,
fill: 0x00aa00
});
winOptionText.anchor.set(0.5, 0.5);
winOptionText.x = 1024;
winOptionText.y = 900;
game.addChild(winOptionText);
var playNextButton = new Text2('Play Next', {
size: 40,
fill: 0x0066cc
});
playNextButton.anchor.set(0.5, 0.5);
playNextButton.x = 1024;
playNextButton.y = 1000;
game.addChild(playNextButton);
var playAgainButton = new Text2('Play Again', {
size: 40,
fill: 0xcc6600
});
playAgainButton.anchor.set(0.5, 0.5);
playAgainButton.x = 1024;
playAgainButton.y = 1100;
game.addChild(playAgainButton);
// Add button functionality
playNextButton.down = function () {
levelCompleteText.destroy();
winOptionText.destroy();
playNextButton.destroy();
playAgainButton.destroy();
};
playAgainButton.down = function () {
// Reset to current level beginning
currentWordIndex = (currentLevel - 1) * wordsPerLevel;
wordsCompletedInLevel = 0;
currentWord = words[currentWordIndex];
levelCompleteText.destroy();
winOptionText.destroy();
playNextButton.destroy();
playAgainButton.destroy();
setupWord();
};
// Flash effect for visual feedback
LK.effects.flashObject(levelCompleteText, 0x00aa00, 2000);
}
function nextWord() {
currentWordIndex++;
wordsCompletedInLevel++;
levelScore += 10;
wrongAttempts = 0; // Reset wrong attempts for new word
// Check if level is complete
if (wordsCompletedInLevel >= wordsPerLevel) {
// Level completed
if (currentLevel >= totalLevels) {
// Game completed - all levels finished
gameCompleted = true;
LK.getSound('complete').play();
LK.showYouWin();
return;
} else {
// Move to next level
nextLevel();
}
}
if (currentWordIndex >= words.length) {
// All words completed
gameCompleted = true;
LK.getSound('complete').play();
LK.showYouWin();
return;
}
currentWord = words[currentWordIndex];
setupWord();
}
function resetCurrentWord() {
for (var i = 0; i < letterTiles.length; i++) {
letterTiles[i].resetTile();
letterTiles[i].x = letterTiles[i].originalX;
letterTiles[i].y = letterTiles[i].originalY;
}
for (var i = 0; i < dropZones.length; i++) {
dropZones[i].removeTile();
}
hindiWordText.setText('');
hindiWordText.tint = 0x666666;
}
function setupWord() {
englishWordText.setText(currentWord.english);
hindiWordText.setText('');
hindiWordText.tint = 0x666666;
createLetterTiles();
createDropZones();
}
function findNearestDropZone(x, y) {
var nearest = null;
var minDistance = Infinity;
for (var i = 0; i < dropZones.length; i++) {
var dx = x - dropZones[i].x;
var dy = y - dropZones[i].y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < minDistance && distance < 100) {
minDistance = distance;
nearest = dropZones[i];
}
}
return nearest;
}
// Initialize lives display
updateLivesDisplay();
// Initialize first word
setupWord();
// Game controls
game.move = function (x, y, obj) {
if (draggedTile && draggedTile.isDragging) {
draggedTile.x = x;
draggedTile.y = y;
}
};
game.up = function (x, y, obj) {
if (draggedTile && draggedTile.isDragging) {
draggedTile.isDragging = false;
var nearestZone = findNearestDropZone(x, y);
if (nearestZone) {
// Remove tile from previous zone if it was placed
for (var i = 0; i < dropZones.length; i++) {
if (dropZones[i].occupiedTile === draggedTile) {
dropZones[i].removeTile();
break;
}
}
// Place tile in new zone
nearestZone.placeTile(draggedTile);
// Check if word is complete
LK.setTimeout(function () {
checkWord();
}, 100);
} else {
// Return to original position
if (draggedTile.isPlaced) {
// Find and remove from current zone
for (var i = 0; i < dropZones.length; i++) {
if (dropZones[i].occupiedTile === draggedTile) {
dropZones[i].removeTile();
break;
}
}
}
tween(draggedTile, {
x: draggedTile.originalX,
y: draggedTile.originalY
}, {
duration: 300,
easing: tween.easeOut
});
}
draggedTile = null;
}
};
game.update = function () {
// Update score display
scoreText.setText('Score: ' + LK.getScore());
// Update level display
levelText.setText('Level: ' + currentLevel + ' (' + wordsCompletedInLevel + '/' + wordsPerLevel + ')');
// Update lives display
updateLivesDisplay();
};