/**** 
* Classes
****/ 
var BlackboardPlaceholder = Container.expand(function () {
	var self = Container.call(this);
	var bpGraphics = self.attachAsset('blackboardPlaceholder', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	return self;
});
var Cat = Container.expand(function () {
	var self = Container.call(this);
	var catGraphics = self.attachAsset('cat', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.count = 0;
	self.down = function (x, y, obj) {
		//gameWon();
		LK.getSound('meow').play();
		self.update = function () {
			if (self.y > 1550) {
				self.y -= 10;
			}
			self.count++;
			if (self.count > 90) {
				self.y = 1670;
				self.count = 0;
				self.update = null;
			}
		};
	};
	return self;
});
var LetterOnBlackboard = Container.expand(function () {
	var self = Container.call(this);
	self.letter = '';
	var blackboardText = new Text2(self.letter, {
		size: 120,
		fill: 0xFFFFFF,
		stroke: 0x000000,
		strokeThickness: 10
	});
	blackboardText.anchor.set(0.5, 0.5);
	self.addChild(blackboardText);
	self.setLetter = function (letter) {
		self.letter = letter;
		blackboardText.setText(letter);
	};
	return self;
});
//<Assets used in the game will automatically appear here>
// Class for Letter Tiles
var LetterTile = Container.expand(function () {
	var self = Container.call(this);
	self.letter = '';
	var tileGraphics = self.attachAsset('tile', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	var letterText = new Text2(self.letter, {
		size: 150,
		fill: 0x000000,
		weight: 300
	});
	letterText.anchor.set(0.5, 0.5);
	self.addChild(letterText);
	self.setLetter = function (letter) {
		self.letter = letter;
		letterText.setText(letter);
	};
	self.clickAddRemove = true;
	self.clickable = true;
	self.down = function (x, y, obj) {
		if (self.clickAddRemove) {
			LK.getSound('tap').play();
			writeLetterOnBlackboard(self.letter);
			currentWord += self.letter;
			self.alpha = 0.5;
			self.clickAddRemove = false; // Make it unclickable
		} else {
			LK.getSound('tap').play();
			//writeLetterOnBlackboard(self.letter);
			if (removeLastLetterOnBlackBoard(self.letter)) {
				self.alpha = 1;
				self.clickAddRemove = true;
			}
			//currentWord += self.letter;
		}
	};
	return self;
});
var LevelText = Container.expand(function () {
	var self = Container.call(this);
	self.levelTxt = new Text2('Level 1', {
		size: 80,
		fill: 0xDDDDDD,
		stroke: 0x000000,
		strokeThickness: 10,
		weight: 800
	});
	self.levelTxt.anchor.x = 0.5;
	//levelTxt.x = 2048 / 2;
	//levelTxt.y = 200;
	self.addChild(self.levelTxt);
	self.updateLabel = function (val) {
		self.levelTxt.setText('Level ' + val);
	};
	return self;
});
var NextLevelBackground = Container.expand(function () {
	var self = Container.call(this);
	var bgGrpahics = self.attachAsset('nextLevelBg', {
		anchorX: 0,
		anchorY: 0.5,
		alpha: 0.8
	});
	return self;
});
var Rabbit = Container.expand(function () {
	var self = Container.call(this);
	var rabbitGraphics = self.attachAsset('rabbit', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.count = 0;
	self.down = function (x, y, obj) {
		LK.getSound('rabbitSound').play();
		self.update = function () {
			if (self.y > 1550) {
				self.y -= 10;
			}
			self.count++;
			if (self.count > 90) {
				self.y = 1700;
				self.count = 0;
				self.update = null;
			}
		};
	};
	return self;
});
var SubmitButton = Container.expand(function () {
	var self = Container.call(this);
	var buttonGraphics = self.attachAsset('submitButton', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	var buttonText = new Text2('Submit', {
		size: 100,
		fill: 0x000000
	});
	buttonText.anchor.set(0.5, 0.5);
	self.addChild(buttonText);
	self.down = function (x, y, obj) {
		//console.log("Submit button clicked: ", currentWord);
		// Add logic to handle submit action
		if (levels[currentLevel].words.includes(currentWord)) {
			//LK.getSound('correctWord').play();
			// Remove the correct word from the levels[currentLevel].words array
			levels[currentLevel].words = levels[currentLevel].words.filter(function (word) {
				return word !== currentWord;
			});
			//console.log('correct');
			var scoreIncrement = currentWord.length;
			scoreIncrement *= streakMult;
			streak += 1;
			updateStreakText();
			LK.setScore(LK.getScore() + scoreIncrement);
			scoreTxt.setText('Score: ' + LK.getScore());
			// Create star explosion effect
			createStarExplosion(500, 400 + blackboardOffsetY);
			createScoreNotice(500, 400 + blackboardOffsetY, scoreIncrement);
			blackBoardArr = [];
			blackboardOffsetX = 0;
			blackboardOffsetY += 120;
			game.children.forEach(function (child) {
				if (child instanceof LetterTile) {
					child.alpha = 1;
					child.clickable = true;
					child.clickAddRemove = true;
				}
			});
			currentWord = "";
			//console.log('length: ', levels[currentLevel].words.length);
			if (levels[currentLevel].words.length == 0) {
				LK.getSound('nextLevel').play();
				advanceToNextLevel();
			} else {
				LK.getSound('correctWord').play();
			}
		} else {
			//console.log('incorrect');
			LK.getSound('wrongWord').play();
			streak = 0;
			updateStreakText();
			// Destroy the letters on the blackboard
			clearBlackBoard(false);
			// Reset the letter tiles
			game.children.forEach(function (child) {
				if (child instanceof LetterTile) {
					child.alpha = 1;
					child.clickable = true;
					child.clickAddRemove = true;
				}
			});
			blackboardOffsetX = 0;
			currentWord = "";
			LK.setScore(LK.getScore() - 1);
			scoreTxt.setText('Score: ' + LK.getScore());
		}
	};
	return self;
});
var Teacher = Container.expand(function () {
	var self = Container.call(this);
	var teacherGraphics = self.attachAsset('teacher', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x000000 //Init game with black background
});
/**** 
* Game Code
****/ 
function clearBlackBoard() {
	var placeholdersToo = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
	blackBoardArr.forEach(function (child) {
		child.destroy();
	});
	blackBoardArr = [];
	if (placeholdersToo) {
		placeholderArr.forEach(function (child) {
			child.destroy();
		});
		placeholderArr = [];
	}
}
var streak = 0;
var streakText = new Text2('Streak: 0', {
	size: 60,
	fill: 0xFFFFED,
	stroke: 0x000000,
	strokeThickness: 10,
	weight: 800
});
//streakText.anchor.set(-0.5, 0);
//streakText.anchor.set(0, 0);
streakText.anchor.set(1.1, 0);
//LK.gui.topLeft.addChild(streakText);
LK.gui.topRight.addChild(streakText);
//streakText.x += 100;
// Add event listener to streakText
streakText.down = function (x, y, obj) {
	showStreakInfoWindow();
};
var streakMult = 1;
var blackBoardArr = [];
var wholeBlackBoardArr = [];
var currentWord = "";
function updateStreakText() {
	var streakBonus = '';
	if (streak >= 60) {
		streakBonus = ' (x10)';
		streakMult = 10;
	} else if (streak >= 50) {
		streakBonus = ' (x8)';
		streakMult = 8;
	} else if (streak >= 40) {
		streakBonus = ' (x7)';
		streakMult = 7;
	} else if (streak >= 30) {
		streakBonus = ' (x6)';
		streakMult = 6;
	} else if (streak >= 20) {
		streakBonus = ' (x5)';
		streakMult = 5;
	} else if (streak >= 10) {
		streakBonus = ' (x4)';
		streakMult = 4;
	} else if (streak >= 5) {
		streakBonus = ' (x3)';
		streakMult = 3;
	} else if (streak >= 1) {
		streakBonus = ' (x2)';
		streakMult = 2;
	} else {
		streakBonus = '';
		streakMult = 1;
	}
	streakText.setText("Streak: " + streak + streakBonus);
}
var scoreTxt = new Text2('Score: 0', {
	size: 70,
	fill: 0x609e8f,
	stroke: 0x000000,
	strokeThickness: 10,
	weight: 800
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
/* 
var levelTxt = new Text2('Level 1', {
	size: 60,
	fill: "#ADD8E6",
	stroke: "#000000",
	strokeThickness: 10,
	weight: 800
});
levelTxt.anchor.set(1.2, 0);
LK.gui.topRight.addChild(levelTxt);
*/ 
var blackboardOffsetX = 0;
var blackboardOffsetY = 0;
function removeLastLetterOnBlackBoard(value) {
	console.log('hm');
	var letterVal = blackBoardArr[blackBoardArr.length - 1].letter;
	console.log('value and letterVal:' + value + ' ' + letterVal);
	if (value == letterVal) {
		var letter = blackBoardArr.splice(blackBoardArr.length - 1, 1)[0];
		//game.addChild(blackboardText);
		//blackBoardArr.push(blackboardText);
		wholeBlackBoardArr.splice(wholeBlackBoardArr.length - 1, 1); //push(blackboardText);
		letter.destroy();
		blackboardOffsetX -= 80;
		currentWord = currentWord.substr(0, currentWord.length - 1);
		return true;
	} else {
		return false;
	}
}
function writeLetterOnBlackboard(letter) {
	var blackboardText = new LetterOnBlackboard();
	blackboardText.x = 400 + blackboardOffsetX;
	blackboardText.y = 400 + blackboardOffsetY;
	blackboardText.setLetter(letter);
	game.addChild(blackboardText);
	blackBoardArr.push(blackboardText);
	wholeBlackBoardArr.push(blackboardText);
	blackboardOffsetX += 80; // Adjust the offset value as needed
	// Check if this is the first letter clicked
	if (blackboardOffsetX === 80) {
		//submitButton = new SubmitButton();
		submitButton.x = 2048 / 2;
		submitButton.y = 2400;
		game.addChild(submitButton);
	}
}
var submitButton = new SubmitButton();
;
// Add background graphic object covering the whole screen
var background = LK.getAsset('background', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 2048 / 2 - 50,
	y: 2732 / 2 - 200
});
game.addChild(background);
/* 
var levelTxt = new Text2('Level 1', {
	size: 60,
	fill: "#ffffff",
	stroke: "#000000",
	strokeThickness: 10,
	weight: 800
});
levelTxt.x = 2048 / 2;
levelTxt.y = 200;
game.addChild(levelTxt);*/
var rabbit = new Rabbit();
rabbit.x = 250;
rabbit.y = 1700;
game.addChild(rabbit);
var cat = new Cat();
cat.x = 1800;
cat.y = 1670;
game.addChild(cat);
var tables = LK.getAsset('tables', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 2048 / 2 - 50,
	y: 2732 / 2 - 200
});
game.addChild(tables);
var levelText = new LevelText();
levelText.x = 2048 / 2;
levelText.y = 250;
game.addChild(levelText);
var teacher = new Teacher();
teacher.x = 2048 / 2 + 380;
teacher.y = 2732 / 2 - 250;
game.addChild(teacher);
// Function to reset the game state for the new level
function resetGameStateForNewLevel() {
	// Logic to reset the game state for the new level
	letterTilesArr.forEach(function (child) {
		child.destroy();
	});
	wholeBlackBoardArr.forEach(function (child) {
		child.destroy();
	});
	submitButton.destroy();
	blackboardOffsetX = 0;
	blackboardOffsetXY = 0;
	currentWord = "";
	var nextLevelBackground = new NextLevelBackground();
	nextLevelBackground.x = 0;
	nextLevelBackground.y = 1500;
	game.addChild(nextLevelBackground);
	var nextLevelText = new Text2('Level ' + (currentLevel + 1), {
		size: 200,
		fill: 0xFFFFFF,
		stroke: 0x000000,
		strokeThickness: 10,
		align: 'center',
		weight: 800
	});
	nextLevelText.anchor.set(0.5, 0.5);
	nextLevelText.x = 2048 / 2;
	nextLevelText.y = 1500;
	game.addChild(nextLevelText);
	//LK.getSound('nextLevel').play();
	LK.setTimeout(function () {
		nextLevelText.destroy();
		nextLevelBackground.destroy();
		displayLettersInLine();
	}, 2000);
	/*LK.setTimeout(function () {
		nextLevelText.destroy();
		displayLettersInLine();
	}, 2000); // Pause for 2 seconds before displaying letters
	*/ 
}
var letterTilesArr = [];
// Function to display letters in a line centered at height 2000
function displayLettersInLine() {
	var startX = 2048 / 2 - letters.length * 320 / 2 + 180;
	var y = 2000;
	for (var i = 0; i < letters.length; i++) {
		var x = startX + i * 320;
		var letterTile = new LetterTile();
		letterTile.setLetter(letters[i]);
		letterTile.x = x;
		letterTile.y = y;
		game.addChild(letterTile);
		letterTilesArr.push(letterTile);
	}
	displayBlackboardPlaceholders();
}
var placeholderArr = [];
function displayBlackboardPlaceholders() {
	console.log('ok');
	var words = levels[currentLevel].words;
	var offsetX = 0;
	var offsetY = 60;
	for (var i = 0; i < words.length; i++) {
		console.log('ok i');
		for (var j = 0; j < words[i].length; j++) {
			console.log('ok j');
			var p = new BlackboardPlaceholder();
			p.x = 400 + offsetX;
			p.y = 400 + offsetY;
			game.addChild(p);
			placeholderArr.push(p);
			offsetX += 80;
			if (j == words[i].length - 1) {
				offsetX = 0;
				offsetY += 118;
			}
		}
	}
}
// Function to advance to the next level
function advanceToNextLevel() {
	if (currentLevel < levels.length - 1) {
		currentLevel++;
		letters = getLettersForCurrentLevel();
		//levelTxt.levelText.setText('Level ' + (currentLevel + 1));
		levelText.updateLabel(currentLevel + 1);
		clearBlackBoard();
		blackboardOffsetY = 0;
		resetGameStateForNewLevel();
	} else {
		console.log("All levels completed!");
		gameWon();
	}
}
function gameWon() {
	letterTilesArr.forEach(function (child) {
		child.destroy();
	});
	submitButton.destroy();
	cat.y = 1580;
	rabbit.y = 1550;
	var congratsText = new Text2('Congratulations!\nYou found all the words!', {
		size: 150,
		fill: 0xFFFFFF,
		stroke: 0x000000,
		strokeThickness: 10,
		align: 'center',
		weight: 800
	});
	congratsText.anchor.set(0.5, 0.5);
	congratsText.x = 2048 / 2;
	congratsText.y = 900;
	game.addChild(congratsText);
	LK.setTimeout(function () {
		congratsText.destroy();
		LK.stopMusic();
		//LK.showGameOver();
		LK.showYouWin();
	}, 2000); // Display the message for 3 seconds
}
// Define levels with different sets of letters and acceptable words
var levels3 = [{
	letters: ['N', 'W', 'O'],
	words: ['NOW', 'WON', 'OWN']
}, {
	letters: ['A', 'E', 'T'],
	words: ['TEA', 'EAT', 'ATE']
}, {
	letters: ['A', 'M', 'R'],
	words: ['MAR', 'ARM', 'RAM']
}, {
	letters: ['A', 'T', 'P'],
	words: ['APT', 'PAT', 'TAP']
}, {
	letters: ['A', 'T', 'R'],
	words: ['TAR', 'ART', 'RAT']
}, {
	letters: ['O', 'T', 'P'],
	words: ['OPT', 'TOP', 'POT']
}, {
	letters: ['A', 'E', 'R'],
	words: ['EAR', 'ARE', 'ERA']
}];
var levels4 = [{
	letters: ['E', 'C', 'A', 'R'],
	words: ['ACRE', 'CARE', 'RACE', 'ACER']
}, {
	letters: ['E', 'S', 'N', 'T'],
	words: ['NETS', 'TENS', 'SENT', 'NEST']
}, {
	letters: ['E', 'L', 'A', 'M'],
	words: ['LAME', 'MALE', 'MEAL']
}, {
	letters: ['S', 'D', 'E', 'U'],
	words: ['DUES', 'SUED', 'USED']
}, {
	letters: ['P', 'S', 'A', 'N'],
	words: ['NAPS', 'SNAP', 'PANS', 'SPAN']
}, {
	letters: ['A', 'L', 'R', 'I'],
	words: ['LAIR', 'LIAR', 'RAIL']
}, {
	letters: ['T', 'D', 'E', 'I'],
	words: ['DIET', 'EDIT', 'TIDE', 'TIED']
}];
var levels5 = [{
	letters: ['T', 'E', 'L', 'A', 'R'],
	words: ['ALERT', 'ALTER', 'LATER']
}, {
	letters: ['E', 'S', 'M', 'L', 'I'],
	words: ['LIMES', 'SMILE', 'MILES', 'SLIME']
}, {
	letters: ['S', 'R', 'T', 'I', 'E'],
	words: ['RITES', 'TIERS', 'TRIES', 'TIRES']
}, {
	letters: ['P', 'S', 'A', 'E', 'H'],
	words: ['HEAPS', 'SHAPE', 'PHASE']
}, {
	letters: ['O', 'D', 'Y', 'R', 'W'],
	words: ['DOWRY', 'ROWDY', 'WORDY']
}, {
	letters: ['E', 'B', 'O', 'R', 'S'],
	words: ['BORES', 'ROBES', 'SOBER']
}, {
	letters: ['P', 'L', 'E', 'S', 'O'],
	words: ['LOPES', 'POLES', 'SLOPE']
}];
// Initialize the first level's letters and show level 1 when the game starts
var currentLevel = 0;
function shuffleArray(array) {
	for (var i = array.length - 1; i > 0; i--) {
		var j = Math.floor(Math.random() * (i + 1));
		var temp = array[i];
		array[i] = array[j];
		array[j] = temp;
	}
}
shuffleArray(levels3);
shuffleArray(levels4);
shuffleArray(levels5);
var levels = levels3.concat(levels4, levels5);
var letters = getLettersForCurrentLevel();
displayLettersInLine();
// Current level index
// Function to get letters for the current level
function getLettersForCurrentLevel() {
	return levels[currentLevel].letters;
}
// Update function
game.update = function () {
	// Game update logic
};
function createScoreNotice(x, y, value) {
	var label = new Text2('+' + value, {
		size: 120,
		fill: 0xADE6D8,
		stroke: 0x000000,
		strokeThickness: 10,
		weight: 800
	});
	label.anchor.set(0.5, 0.5);
	label.x = x;
	label.y = y;
	game.addChild(label);
	var vy = -3;
	(function (label, vy) {
		var lifetime = 30;
		var tick = 0;
		var interval = LK.setInterval(function () {
			label.y += vy;
			label.alpha -= 0.25 / lifetime;
			tick++;
			if (tick >= lifetime) {
				label.destroy();
				LK.clearInterval(interval);
			}
		}, 16);
	})(label, vy);
}
function createStarExplosion(x, y) {
	for (var i = 0; i < 20; i++) {
		var star = LK.getAsset('centerCircle', {
			anchorX: 0.5,
			anchorY: 0.5,
			scaleX: Math.random() * 0.5 + 0.5,
			scaleY: Math.random() * 0.5 + 0.5,
			x: x,
			y: y
		});
		game.addChild(star);
		var angle = Math.random() * Math.PI * 2;
		var speed = Math.random() * 10 + 5;
		var vx = Math.cos(angle) * speed;
		var vy = Math.sin(angle) * speed;
		(function (star, vx, vy) {
			var lifetime = 30;
			var tick = 0;
			var interval = LK.setInterval(function () {
				star.x += vx;
				star.y += vy;
				star.alpha -= 1 / lifetime;
				tick++;
				if (tick >= lifetime) {
					star.destroy();
					LK.clearInterval(interval);
				}
			}, 16);
		})(star, vx, vy);
	}
}
function showStreakInfoWindow() {
	// Create a container for the window
	var streakInfoWindow = new Container();
	// Create a background for the window
	var windowBg = LK.getAsset('nextLevelBg', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 2048 / 2,
		y: 2732 / 2,
		scaleX: 0.8,
		scaleY: 1.7
	});
	windowBg.alpha = 0.8;
	streakInfoWindow.addChild(windowBg);
	// Create the text for the window
	var infoText = new Text2("Your streak increases with each successive correct guess, but is reset to 0 on a wrong guess.\n\nExtend your streak for better score multipliers.", {
		size: 60,
		fill: 0xFFFFFF,
		stroke: 0x000000,
		strokeThickness: 10,
		align: 'center',
		wordWrap: true,
		wordWrapWidth: 1500
	});
	infoText.anchor.set(0.5, 0.5);
	infoText.x = 2048 / 2;
	infoText.y = 2732 / 2 - 50;
	streakInfoWindow.addChild(infoText);
	// Create the close button
	var closeButton = new Text2("Close", {
		size: 80,
		fill: 0xFF0000,
		stroke: 0x000000,
		strokeThickness: 10,
		align: 'center'
	});
	closeButton.anchor.set(0.5, 0.5);
	closeButton.x = 2048 / 2;
	closeButton.y = 2732 / 2 + 200;
	streakInfoWindow.addChild(closeButton);
	// Add event listener to close button
	closeButton.down = function (x, y, obj) {
		streakInfoWindow.destroy();
	};
	// Add the window to the game
	game.addChild(streakInfoWindow);
} /**** 
* Classes
****/ 
var BlackboardPlaceholder = Container.expand(function () {
	var self = Container.call(this);
	var bpGraphics = self.attachAsset('blackboardPlaceholder', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	return self;
});
var Cat = Container.expand(function () {
	var self = Container.call(this);
	var catGraphics = self.attachAsset('cat', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.count = 0;
	self.down = function (x, y, obj) {
		//gameWon();
		LK.getSound('meow').play();
		self.update = function () {
			if (self.y > 1550) {
				self.y -= 10;
			}
			self.count++;
			if (self.count > 90) {
				self.y = 1670;
				self.count = 0;
				self.update = null;
			}
		};
	};
	return self;
});
var LetterOnBlackboard = Container.expand(function () {
	var self = Container.call(this);
	self.letter = '';
	var blackboardText = new Text2(self.letter, {
		size: 120,
		fill: 0xFFFFFF,
		stroke: 0x000000,
		strokeThickness: 10
	});
	blackboardText.anchor.set(0.5, 0.5);
	self.addChild(blackboardText);
	self.setLetter = function (letter) {
		self.letter = letter;
		blackboardText.setText(letter);
	};
	return self;
});
//<Assets used in the game will automatically appear here>
// Class for Letter Tiles
var LetterTile = Container.expand(function () {
	var self = Container.call(this);
	self.letter = '';
	var tileGraphics = self.attachAsset('tile', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	var letterText = new Text2(self.letter, {
		size: 150,
		fill: 0x000000,
		weight: 300
	});
	letterText.anchor.set(0.5, 0.5);
	self.addChild(letterText);
	self.setLetter = function (letter) {
		self.letter = letter;
		letterText.setText(letter);
	};
	self.clickAddRemove = true;
	self.clickable = true;
	self.down = function (x, y, obj) {
		if (self.clickAddRemove) {
			LK.getSound('tap').play();
			writeLetterOnBlackboard(self.letter);
			currentWord += self.letter;
			self.alpha = 0.5;
			self.clickAddRemove = false; // Make it unclickable
		} else {
			LK.getSound('tap').play();
			//writeLetterOnBlackboard(self.letter);
			if (removeLastLetterOnBlackBoard(self.letter)) {
				self.alpha = 1;
				self.clickAddRemove = true;
			}
			//currentWord += self.letter;
		}
	};
	return self;
});
var LevelText = Container.expand(function () {
	var self = Container.call(this);
	self.levelTxt = new Text2('Level 1', {
		size: 80,
		fill: 0xDDDDDD,
		stroke: 0x000000,
		strokeThickness: 10,
		weight: 800
	});
	self.levelTxt.anchor.x = 0.5;
	//levelTxt.x = 2048 / 2;
	//levelTxt.y = 200;
	self.addChild(self.levelTxt);
	self.updateLabel = function (val) {
		self.levelTxt.setText('Level ' + val);
	};
	return self;
});
var NextLevelBackground = Container.expand(function () {
	var self = Container.call(this);
	var bgGrpahics = self.attachAsset('nextLevelBg', {
		anchorX: 0,
		anchorY: 0.5,
		alpha: 0.8
	});
	return self;
});
var Rabbit = Container.expand(function () {
	var self = Container.call(this);
	var rabbitGraphics = self.attachAsset('rabbit', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.count = 0;
	self.down = function (x, y, obj) {
		LK.getSound('rabbitSound').play();
		self.update = function () {
			if (self.y > 1550) {
				self.y -= 10;
			}
			self.count++;
			if (self.count > 90) {
				self.y = 1700;
				self.count = 0;
				self.update = null;
			}
		};
	};
	return self;
});
var SubmitButton = Container.expand(function () {
	var self = Container.call(this);
	var buttonGraphics = self.attachAsset('submitButton', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	var buttonText = new Text2('Submit', {
		size: 100,
		fill: 0x000000
	});
	buttonText.anchor.set(0.5, 0.5);
	self.addChild(buttonText);
	self.down = function (x, y, obj) {
		//console.log("Submit button clicked: ", currentWord);
		// Add logic to handle submit action
		if (levels[currentLevel].words.includes(currentWord)) {
			//LK.getSound('correctWord').play();
			// Remove the correct word from the levels[currentLevel].words array
			levels[currentLevel].words = levels[currentLevel].words.filter(function (word) {
				return word !== currentWord;
			});
			//console.log('correct');
			var scoreIncrement = currentWord.length;
			scoreIncrement *= streakMult;
			streak += 1;
			updateStreakText();
			LK.setScore(LK.getScore() + scoreIncrement);
			scoreTxt.setText('Score: ' + LK.getScore());
			// Create star explosion effect
			createStarExplosion(500, 400 + blackboardOffsetY);
			createScoreNotice(500, 400 + blackboardOffsetY, scoreIncrement);
			blackBoardArr = [];
			blackboardOffsetX = 0;
			blackboardOffsetY += 120;
			game.children.forEach(function (child) {
				if (child instanceof LetterTile) {
					child.alpha = 1;
					child.clickable = true;
					child.clickAddRemove = true;
				}
			});
			currentWord = "";
			//console.log('length: ', levels[currentLevel].words.length);
			if (levels[currentLevel].words.length == 0) {
				LK.getSound('nextLevel').play();
				advanceToNextLevel();
			} else {
				LK.getSound('correctWord').play();
			}
		} else {
			//console.log('incorrect');
			LK.getSound('wrongWord').play();
			streak = 0;
			updateStreakText();
			// Destroy the letters on the blackboard
			clearBlackBoard(false);
			// Reset the letter tiles
			game.children.forEach(function (child) {
				if (child instanceof LetterTile) {
					child.alpha = 1;
					child.clickable = true;
					child.clickAddRemove = true;
				}
			});
			blackboardOffsetX = 0;
			currentWord = "";
			LK.setScore(LK.getScore() - 1);
			scoreTxt.setText('Score: ' + LK.getScore());
		}
	};
	return self;
});
var Teacher = Container.expand(function () {
	var self = Container.call(this);
	var teacherGraphics = self.attachAsset('teacher', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x000000 //Init game with black background
});
/**** 
* Game Code
****/ 
function clearBlackBoard() {
	var placeholdersToo = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
	blackBoardArr.forEach(function (child) {
		child.destroy();
	});
	blackBoardArr = [];
	if (placeholdersToo) {
		placeholderArr.forEach(function (child) {
			child.destroy();
		});
		placeholderArr = [];
	}
}
var streak = 0;
var streakText = new Text2('Streak: 0', {
	size: 60,
	fill: 0xFFFFED,
	stroke: 0x000000,
	strokeThickness: 10,
	weight: 800
});
//streakText.anchor.set(-0.5, 0);
//streakText.anchor.set(0, 0);
streakText.anchor.set(1.1, 0);
//LK.gui.topLeft.addChild(streakText);
LK.gui.topRight.addChild(streakText);
//streakText.x += 100;
// Add event listener to streakText
streakText.down = function (x, y, obj) {
	showStreakInfoWindow();
};
var streakMult = 1;
var blackBoardArr = [];
var wholeBlackBoardArr = [];
var currentWord = "";
function updateStreakText() {
	var streakBonus = '';
	if (streak >= 60) {
		streakBonus = ' (x10)';
		streakMult = 10;
	} else if (streak >= 50) {
		streakBonus = ' (x8)';
		streakMult = 8;
	} else if (streak >= 40) {
		streakBonus = ' (x7)';
		streakMult = 7;
	} else if (streak >= 30) {
		streakBonus = ' (x6)';
		streakMult = 6;
	} else if (streak >= 20) {
		streakBonus = ' (x5)';
		streakMult = 5;
	} else if (streak >= 10) {
		streakBonus = ' (x4)';
		streakMult = 4;
	} else if (streak >= 5) {
		streakBonus = ' (x3)';
		streakMult = 3;
	} else if (streak >= 1) {
		streakBonus = ' (x2)';
		streakMult = 2;
	} else {
		streakBonus = '';
		streakMult = 1;
	}
	streakText.setText("Streak: " + streak + streakBonus);
}
var scoreTxt = new Text2('Score: 0', {
	size: 70,
	fill: 0x609e8f,
	stroke: 0x000000,
	strokeThickness: 10,
	weight: 800
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
/* 
var levelTxt = new Text2('Level 1', {
	size: 60,
	fill: "#ADD8E6",
	stroke: "#000000",
	strokeThickness: 10,
	weight: 800
});
levelTxt.anchor.set(1.2, 0);
LK.gui.topRight.addChild(levelTxt);
*/ 
var blackboardOffsetX = 0;
var blackboardOffsetY = 0;
function removeLastLetterOnBlackBoard(value) {
	console.log('hm');
	var letterVal = blackBoardArr[blackBoardArr.length - 1].letter;
	console.log('value and letterVal:' + value + ' ' + letterVal);
	if (value == letterVal) {
		var letter = blackBoardArr.splice(blackBoardArr.length - 1, 1)[0];
		//game.addChild(blackboardText);
		//blackBoardArr.push(blackboardText);
		wholeBlackBoardArr.splice(wholeBlackBoardArr.length - 1, 1); //push(blackboardText);
		letter.destroy();
		blackboardOffsetX -= 80;
		currentWord = currentWord.substr(0, currentWord.length - 1);
		return true;
	} else {
		return false;
	}
}
function writeLetterOnBlackboard(letter) {
	var blackboardText = new LetterOnBlackboard();
	blackboardText.x = 400 + blackboardOffsetX;
	blackboardText.y = 400 + blackboardOffsetY;
	blackboardText.setLetter(letter);
	game.addChild(blackboardText);
	blackBoardArr.push(blackboardText);
	wholeBlackBoardArr.push(blackboardText);
	blackboardOffsetX += 80; // Adjust the offset value as needed
	// Check if this is the first letter clicked
	if (blackboardOffsetX === 80) {
		//submitButton = new SubmitButton();
		submitButton.x = 2048 / 2;
		submitButton.y = 2400;
		game.addChild(submitButton);
	}
}
var submitButton = new SubmitButton();
;
// Add background graphic object covering the whole screen
var background = LK.getAsset('background', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 2048 / 2 - 50,
	y: 2732 / 2 - 200
});
game.addChild(background);
/* 
var levelTxt = new Text2('Level 1', {
	size: 60,
	fill: "#ffffff",
	stroke: "#000000",
	strokeThickness: 10,
	weight: 800
});
levelTxt.x = 2048 / 2;
levelTxt.y = 200;
game.addChild(levelTxt);*/
var rabbit = new Rabbit();
rabbit.x = 250;
rabbit.y = 1700;
game.addChild(rabbit);
var cat = new Cat();
cat.x = 1800;
cat.y = 1670;
game.addChild(cat);
var tables = LK.getAsset('tables', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 2048 / 2 - 50,
	y: 2732 / 2 - 200
});
game.addChild(tables);
var levelText = new LevelText();
levelText.x = 2048 / 2;
levelText.y = 250;
game.addChild(levelText);
var teacher = new Teacher();
teacher.x = 2048 / 2 + 380;
teacher.y = 2732 / 2 - 250;
game.addChild(teacher);
// Function to reset the game state for the new level
function resetGameStateForNewLevel() {
	// Logic to reset the game state for the new level
	letterTilesArr.forEach(function (child) {
		child.destroy();
	});
	wholeBlackBoardArr.forEach(function (child) {
		child.destroy();
	});
	submitButton.destroy();
	blackboardOffsetX = 0;
	blackboardOffsetXY = 0;
	currentWord = "";
	var nextLevelBackground = new NextLevelBackground();
	nextLevelBackground.x = 0;
	nextLevelBackground.y = 1500;
	game.addChild(nextLevelBackground);
	var nextLevelText = new Text2('Level ' + (currentLevel + 1), {
		size: 200,
		fill: 0xFFFFFF,
		stroke: 0x000000,
		strokeThickness: 10,
		align: 'center',
		weight: 800
	});
	nextLevelText.anchor.set(0.5, 0.5);
	nextLevelText.x = 2048 / 2;
	nextLevelText.y = 1500;
	game.addChild(nextLevelText);
	//LK.getSound('nextLevel').play();
	LK.setTimeout(function () {
		nextLevelText.destroy();
		nextLevelBackground.destroy();
		displayLettersInLine();
	}, 2000);
	/*LK.setTimeout(function () {
		nextLevelText.destroy();
		displayLettersInLine();
	}, 2000); // Pause for 2 seconds before displaying letters
	*/ 
}
var letterTilesArr = [];
// Function to display letters in a line centered at height 2000
function displayLettersInLine() {
	var startX = 2048 / 2 - letters.length * 320 / 2 + 180;
	var y = 2000;
	for (var i = 0; i < letters.length; i++) {
		var x = startX + i * 320;
		var letterTile = new LetterTile();
		letterTile.setLetter(letters[i]);
		letterTile.x = x;
		letterTile.y = y;
		game.addChild(letterTile);
		letterTilesArr.push(letterTile);
	}
	displayBlackboardPlaceholders();
}
var placeholderArr = [];
function displayBlackboardPlaceholders() {
	console.log('ok');
	var words = levels[currentLevel].words;
	var offsetX = 0;
	var offsetY = 60;
	for (var i = 0; i < words.length; i++) {
		console.log('ok i');
		for (var j = 0; j < words[i].length; j++) {
			console.log('ok j');
			var p = new BlackboardPlaceholder();
			p.x = 400 + offsetX;
			p.y = 400 + offsetY;
			game.addChild(p);
			placeholderArr.push(p);
			offsetX += 80;
			if (j == words[i].length - 1) {
				offsetX = 0;
				offsetY += 118;
			}
		}
	}
}
// Function to advance to the next level
function advanceToNextLevel() {
	if (currentLevel < levels.length - 1) {
		currentLevel++;
		letters = getLettersForCurrentLevel();
		//levelTxt.levelText.setText('Level ' + (currentLevel + 1));
		levelText.updateLabel(currentLevel + 1);
		clearBlackBoard();
		blackboardOffsetY = 0;
		resetGameStateForNewLevel();
	} else {
		console.log("All levels completed!");
		gameWon();
	}
}
function gameWon() {
	letterTilesArr.forEach(function (child) {
		child.destroy();
	});
	submitButton.destroy();
	cat.y = 1580;
	rabbit.y = 1550;
	var congratsText = new Text2('Congratulations!\nYou found all the words!', {
		size: 150,
		fill: 0xFFFFFF,
		stroke: 0x000000,
		strokeThickness: 10,
		align: 'center',
		weight: 800
	});
	congratsText.anchor.set(0.5, 0.5);
	congratsText.x = 2048 / 2;
	congratsText.y = 900;
	game.addChild(congratsText);
	LK.setTimeout(function () {
		congratsText.destroy();
		LK.stopMusic();
		//LK.showGameOver();
		LK.showYouWin();
	}, 2000); // Display the message for 3 seconds
}
// Define levels with different sets of letters and acceptable words
var levels3 = [{
	letters: ['N', 'W', 'O'],
	words: ['NOW', 'WON', 'OWN']
}, {
	letters: ['A', 'E', 'T'],
	words: ['TEA', 'EAT', 'ATE']
}, {
	letters: ['A', 'M', 'R'],
	words: ['MAR', 'ARM', 'RAM']
}, {
	letters: ['A', 'T', 'P'],
	words: ['APT', 'PAT', 'TAP']
}, {
	letters: ['A', 'T', 'R'],
	words: ['TAR', 'ART', 'RAT']
}, {
	letters: ['O', 'T', 'P'],
	words: ['OPT', 'TOP', 'POT']
}, {
	letters: ['A', 'E', 'R'],
	words: ['EAR', 'ARE', 'ERA']
}];
var levels4 = [{
	letters: ['E', 'C', 'A', 'R'],
	words: ['ACRE', 'CARE', 'RACE', 'ACER']
}, {
	letters: ['E', 'S', 'N', 'T'],
	words: ['NETS', 'TENS', 'SENT', 'NEST']
}, {
	letters: ['E', 'L', 'A', 'M'],
	words: ['LAME', 'MALE', 'MEAL']
}, {
	letters: ['S', 'D', 'E', 'U'],
	words: ['DUES', 'SUED', 'USED']
}, {
	letters: ['P', 'S', 'A', 'N'],
	words: ['NAPS', 'SNAP', 'PANS', 'SPAN']
}, {
	letters: ['A', 'L', 'R', 'I'],
	words: ['LAIR', 'LIAR', 'RAIL']
}, {
	letters: ['T', 'D', 'E', 'I'],
	words: ['DIET', 'EDIT', 'TIDE', 'TIED']
}];
var levels5 = [{
	letters: ['T', 'E', 'L', 'A', 'R'],
	words: ['ALERT', 'ALTER', 'LATER']
}, {
	letters: ['E', 'S', 'M', 'L', 'I'],
	words: ['LIMES', 'SMILE', 'MILES', 'SLIME']
}, {
	letters: ['S', 'R', 'T', 'I', 'E'],
	words: ['RITES', 'TIERS', 'TRIES', 'TIRES']
}, {
	letters: ['P', 'S', 'A', 'E', 'H'],
	words: ['HEAPS', 'SHAPE', 'PHASE']
}, {
	letters: ['O', 'D', 'Y', 'R', 'W'],
	words: ['DOWRY', 'ROWDY', 'WORDY']
}, {
	letters: ['E', 'B', 'O', 'R', 'S'],
	words: ['BORES', 'ROBES', 'SOBER']
}, {
	letters: ['P', 'L', 'E', 'S', 'O'],
	words: ['LOPES', 'POLES', 'SLOPE']
}];
// Initialize the first level's letters and show level 1 when the game starts
var currentLevel = 0;
function shuffleArray(array) {
	for (var i = array.length - 1; i > 0; i--) {
		var j = Math.floor(Math.random() * (i + 1));
		var temp = array[i];
		array[i] = array[j];
		array[j] = temp;
	}
}
shuffleArray(levels3);
shuffleArray(levels4);
shuffleArray(levels5);
var levels = levels3.concat(levels4, levels5);
var letters = getLettersForCurrentLevel();
displayLettersInLine();
// Current level index
// Function to get letters for the current level
function getLettersForCurrentLevel() {
	return levels[currentLevel].letters;
}
// Update function
game.update = function () {
	// Game update logic
};
function createScoreNotice(x, y, value) {
	var label = new Text2('+' + value, {
		size: 120,
		fill: 0xADE6D8,
		stroke: 0x000000,
		strokeThickness: 10,
		weight: 800
	});
	label.anchor.set(0.5, 0.5);
	label.x = x;
	label.y = y;
	game.addChild(label);
	var vy = -3;
	(function (label, vy) {
		var lifetime = 30;
		var tick = 0;
		var interval = LK.setInterval(function () {
			label.y += vy;
			label.alpha -= 0.25 / lifetime;
			tick++;
			if (tick >= lifetime) {
				label.destroy();
				LK.clearInterval(interval);
			}
		}, 16);
	})(label, vy);
}
function createStarExplosion(x, y) {
	for (var i = 0; i < 20; i++) {
		var star = LK.getAsset('centerCircle', {
			anchorX: 0.5,
			anchorY: 0.5,
			scaleX: Math.random() * 0.5 + 0.5,
			scaleY: Math.random() * 0.5 + 0.5,
			x: x,
			y: y
		});
		game.addChild(star);
		var angle = Math.random() * Math.PI * 2;
		var speed = Math.random() * 10 + 5;
		var vx = Math.cos(angle) * speed;
		var vy = Math.sin(angle) * speed;
		(function (star, vx, vy) {
			var lifetime = 30;
			var tick = 0;
			var interval = LK.setInterval(function () {
				star.x += vx;
				star.y += vy;
				star.alpha -= 1 / lifetime;
				tick++;
				if (tick >= lifetime) {
					star.destroy();
					LK.clearInterval(interval);
				}
			}, 16);
		})(star, vx, vy);
	}
}
function showStreakInfoWindow() {
	// Create a container for the window
	var streakInfoWindow = new Container();
	// Create a background for the window
	var windowBg = LK.getAsset('nextLevelBg', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 2048 / 2,
		y: 2732 / 2,
		scaleX: 0.8,
		scaleY: 1.7
	});
	windowBg.alpha = 0.8;
	streakInfoWindow.addChild(windowBg);
	// Create the text for the window
	var infoText = new Text2("Your streak increases with each successive correct guess, but is reset to 0 on a wrong guess.\n\nExtend your streak for better score multipliers.", {
		size: 60,
		fill: 0xFFFFFF,
		stroke: 0x000000,
		strokeThickness: 10,
		align: 'center',
		wordWrap: true,
		wordWrapWidth: 1500
	});
	infoText.anchor.set(0.5, 0.5);
	infoText.x = 2048 / 2;
	infoText.y = 2732 / 2 - 50;
	streakInfoWindow.addChild(infoText);
	// Create the close button
	var closeButton = new Text2("Close", {
		size: 80,
		fill: 0xFF0000,
		stroke: 0x000000,
		strokeThickness: 10,
		align: 'center'
	});
	closeButton.anchor.set(0.5, 0.5);
	closeButton.x = 2048 / 2;
	closeButton.y = 2732 / 2 + 200;
	streakInfoWindow.addChild(closeButton);
	// Add event listener to close button
	closeButton.down = function (x, y, obj) {
		streakInfoWindow.destroy();
	};
	// Add the window to the game
	game.addChild(streakInfoWindow);
}
 A smooth, clean, blank and empty scrabble tile for a game.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 A clean, warm and welcoming classroom in a school, facing the blackboard.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 
 
 A small golden star. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.