/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { highScore: 0, difficulty: 1 }); /**** * Classes ****/ var FallingWord = Container.expand(function (wordText, speed) { var self = Container.call(this); self.wordText = wordText; self.speed = speed || 2; self.typed = ""; self.completed = false; var background = self.attachAsset('wordBackground', { anchorX: 0.5, anchorY: 0.5 }); self.wordDisplay = new Text2(wordText, { size: 80, fill: 0xFFFFFF }); self.wordDisplay.anchor.set(0.5, 0.5); self.addChild(self.wordDisplay); self.progressDisplay = new Text2("", { size: 60, fill: 0x00FF00 }); self.progressDisplay.anchor.set(0.5, 0.5); self.addChild(self.progressDisplay); self.updateTyped = function (typedText) { self.typed = typedText; self.progressDisplay.setText(typedText); if (typedText === self.wordText) { self.completed = true; return true; } return false; }; self.update = function () { self.y += self.speed; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x1a1a2e }); /**** * Game Code ****/ var background = LK.getAsset('background', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2 }); game.addChild(background); var words = ["type", "hero", "word", "game", "play", "fast", "quick", "next", "quick", "last", "first", "middle", "super", "best", "hey"]; var longWords = ["keyboard", "challenge", "practice", "improvement", "experience", "development", "professional", "application", "performance", "intelligence", "building", "meanwhile", "seems", "let me know", "appreciation", "abandom", "play agin", "start the game", "high score"]; var activeWords = []; var gameActive = false; var currentInput = ""; var spawnInterval = 10; // Set the interval time period between word spawns to 50 seconds var lastSpawnTime = 0; var score = 0; var difficulty = storage.difficulty || 1; var level = 1; var levelThreshold = 100; // Score threshold to advance to the next level var baseSpeed = 1; var wordCount = 0; var gameTicks = 0; var scoreDisplay = new Text2("Score: 0", { size: 90, fill: 0xFFFFFF }); scoreDisplay.anchor.set(0.5, 0); LK.gui.top.addChild(scoreDisplay); var highScoreDisplay = new Text2("High Score: " + storage.highScore, { size: 50, fill: 0xFFCC00 }); highScoreDisplay.anchor.set(0.5, 0); highScoreDisplay.y = 80; LK.gui.top.addChild(highScoreDisplay); var levelDisplay = new Text2("Level: 1", { size: 60, fill: 0x00FF00 }); levelDisplay.anchor.set(0.5, 0); levelDisplay.y = 140; LK.gui.top.addChild(levelDisplay); var inputDisplay = new Text2("", { size: 80, fill: 0xFFFFFF }); var inputBackground = new Text2("", { size: 80, fill: 0x000000 }); inputBackground.anchor.set(0.5, 1); inputBackground.y = -50; LK.gui.bottom.addChild(inputBackground); inputDisplay.anchor.set(0.5, 1); inputDisplay.y = -20; LK.gui.bottom.addChild(inputDisplay); var keyboard = new Container(); game.addChild(keyboard); keyboard.y = 2400; function startGame() { gameActive = true; activeWords = []; currentInput = ""; score = 0; wordCount = 0; gameTicks = 0; spawnInterval = 2500; difficulty = 1; level = 1; scoreDisplay.setText("Score: 0"); updateInput(""); LK.playMusic('bgMusic'); } function endGame() { gameActive = false; if (score > storage.highScore) { storage.highScore = score; highScoreDisplay.setText("High Score: " + storage.highScore); } LK.stopMusic(); LK.showGameOver(); } function getRandomWord() { var wordPool = difficulty > 2 ? longWords.concat(words) : words; return wordPool[Math.floor(Math.random() * wordPool.length)]; } function updateInput(text) { currentInput = text; inputDisplay.setText(text); } function spawnWord() { var word = getRandomWord(); var fallingWord = new FallingWord(word, 108 / 120); // Adjust speed to ensure 80 seconds to fall fallingWord.x = Math.random() * (2048 - 400) + 100; fallingWord.y = 100; game.addChild(fallingWord); activeWords.push(fallingWord); wordCount++; if (wordCount % 10 === 0) { increaseDifficulty(); } } function increaseDifficulty() { difficulty += 0.2; spawnInterval = Math.max(800, spawnInterval - 100); storage.difficulty = difficulty; } function checkInput(_char) { var newInput = currentInput + _char; updateInput(newInput); for (var i = 0; i < activeWords.length; i++) { var word = activeWords[i]; if (word.wordText.toLowerCase().startsWith(newInput.toLowerCase())) { if (newInput.length === word.wordText.length) { score += 5; LK.setScore(score); scoreDisplay.setText("Score: " + score); if (score >= levelThreshold * level) { levelDisplay.setText("Level: " + level); level++; increaseDifficulty(); LK.effects.flashScreen(0x00ff00, 1000); // Flash screen green to indicate level up } LK.getSound('correctWord').play(); LK.effects.flashObject(word, 0x00ff00, 400); tween(word, { alpha: 0 }, { duration: 300, onFinish: function onFinish() { game.removeChild(word); activeWords.splice(activeWords.indexOf(word), 1); } }); updateInput(""); return true; } word.updateTyped(newInput); return true; } } return false; } function clearInput() { updateInput(""); for (var i = 0; i < activeWords.length; i++) { activeWords[i].updateTyped(""); } } var keyboardButtons = []; var keyboardLayout = [['Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P'], ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L'], ['Z', 'X', 'C', 'V', 'B', 'N', 'M']]; var totalKeyboardHeight = keyboardLayout.length * 10; // Assuming each row is 60 pixels high function createKeyboard() { var buttonSize = 50; var spacing = 30; var rows = keyboardLayout.length; for (var row = 0; row < rows; row++) { var keys = keyboardLayout[row]; var rowWidth = keys.length * (buttonSize + spacing); var startX = (2048 - rowWidth) / 2; var yOffset = 2048 - totalKeyboardHeight - 50; for (var i = 0; i < keys.length; i++) { var key = keys[i]; var keyButton = new Container(); var keyBackground = LK.getAsset('wordBackground', { width: 70, height: 80, anchorX: 0.5, anchorY: 0.5, tint: 0x555555 }); keyButton.addChild(keyBackground); var keyText = new Text2(key, { size: 70, fill: 0xFFFFFF }); keyText.anchor.set(0.5, 0.5); keyButton.addChild(keyText); keyButton.x = startX + i * (buttonSize + spacing) + buttonSize / 4; keyButton.y = row * (buttonSize + spacing) + buttonSize / 20; keyButton.keyValue = key; keyButton.interactive = true; keyButton.down = function (x, y, obj) { if (this.keyValue) { checkInput(this.keyValue); } if (obj.children && obj.children.length > 0 && obj.children[0]) { tween(obj.children[0], { tint: 0x3498db }, { duration: 100 }); } }; keyButton.up = function (x, y, obj) { if (obj.children && obj.children.length > 0 && obj.children[0]) { tween(obj.children[0], { tint: 0x555555 }, { duration: 100 }); } }; keyboard.addChild(keyButton); keyboardButtons.push(keyButton); } } // Delete key var deleteKey = new Container(); var deleteBackground = LK.getAsset('wordBackground', { width: 200, height: 100, anchorX: 0.5, anchorY: 0.5, tint: 0x555555 }); deleteKey.addChild(deleteBackground); var deleteText = new Text2("DEL", { size: 80, fill: 0xFFFFFF }); deleteText.anchor.set(0.5, 0.5); deleteKey.addChild(deleteText); deleteKey.x = 2048 - (buttonSize + spacing) * 7; deleteKey.y = rows * (buttonSize + spacing) + buttonSize / 2; deleteKey.interactive = true; deleteKey.down = function () { if (currentInput.length > 0) { updateInput(currentInput.slice(0, -1)); } }; keyboard.addChild(deleteKey); // Space bar var spaceBar = new Container(); var spaceBackground = LK.getAsset('wordBackground', { width: 200, height: 100, anchorX: 0.5, anchorY: 0.5, tint: 0x555555 }); spaceBar.addChild(spaceBackground); var spaceText = new Text2("SPACE", { size: 80, fill: 0xFFFFFF }); spaceText.anchor.set(0.5, 0.5); spaceBar.addChild(spaceText); spaceBar.y = rows * (buttonSize + spacing) + 40; spaceBar.x = 2048 / 2; spaceBar.interactive = true; spaceBar.down = function () { checkInput(" "); }; keyboard.addChild(spaceBar); } createKeyboard(); startGame(); // Game loop game.update = function () { if (!gameActive) { return; } var now = Date.now(); if (now - lastSpawnTime >= spawnInterval) { spawnWord(); lastSpawnTime = now; } for (var i = activeWords.length - 1; i >= 0; i--) { var word = activeWords[i]; word.update(); if (word.y > 2700) { LK.getSound('wordHitBottom').play(); game.removeChild(word); activeWords.splice(i, 1); clearInput(); endGame(); } } };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
highScore: 0,
difficulty: 1
});
/****
* Classes
****/
var FallingWord = Container.expand(function (wordText, speed) {
var self = Container.call(this);
self.wordText = wordText;
self.speed = speed || 2;
self.typed = "";
self.completed = false;
var background = self.attachAsset('wordBackground', {
anchorX: 0.5,
anchorY: 0.5
});
self.wordDisplay = new Text2(wordText, {
size: 80,
fill: 0xFFFFFF
});
self.wordDisplay.anchor.set(0.5, 0.5);
self.addChild(self.wordDisplay);
self.progressDisplay = new Text2("", {
size: 60,
fill: 0x00FF00
});
self.progressDisplay.anchor.set(0.5, 0.5);
self.addChild(self.progressDisplay);
self.updateTyped = function (typedText) {
self.typed = typedText;
self.progressDisplay.setText(typedText);
if (typedText === self.wordText) {
self.completed = true;
return true;
}
return false;
};
self.update = function () {
self.y += self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a2e
});
/****
* Game Code
****/
var background = LK.getAsset('background', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2
});
game.addChild(background);
var words = ["type", "hero", "word", "game", "play", "fast", "quick", "next", "quick", "last", "first", "middle", "super", "best", "hey"];
var longWords = ["keyboard", "challenge", "practice", "improvement", "experience", "development", "professional", "application", "performance", "intelligence", "building", "meanwhile", "seems", "let me know", "appreciation", "abandom", "play agin", "start the game", "high score"];
var activeWords = [];
var gameActive = false;
var currentInput = "";
var spawnInterval = 10; // Set the interval time period between word spawns to 50 seconds
var lastSpawnTime = 0;
var score = 0;
var difficulty = storage.difficulty || 1;
var level = 1;
var levelThreshold = 100; // Score threshold to advance to the next level
var baseSpeed = 1;
var wordCount = 0;
var gameTicks = 0;
var scoreDisplay = new Text2("Score: 0", {
size: 90,
fill: 0xFFFFFF
});
scoreDisplay.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreDisplay);
var highScoreDisplay = new Text2("High Score: " + storage.highScore, {
size: 50,
fill: 0xFFCC00
});
highScoreDisplay.anchor.set(0.5, 0);
highScoreDisplay.y = 80;
LK.gui.top.addChild(highScoreDisplay);
var levelDisplay = new Text2("Level: 1", {
size: 60,
fill: 0x00FF00
});
levelDisplay.anchor.set(0.5, 0);
levelDisplay.y = 140;
LK.gui.top.addChild(levelDisplay);
var inputDisplay = new Text2("", {
size: 80,
fill: 0xFFFFFF
});
var inputBackground = new Text2("", {
size: 80,
fill: 0x000000
});
inputBackground.anchor.set(0.5, 1);
inputBackground.y = -50;
LK.gui.bottom.addChild(inputBackground);
inputDisplay.anchor.set(0.5, 1);
inputDisplay.y = -20;
LK.gui.bottom.addChild(inputDisplay);
var keyboard = new Container();
game.addChild(keyboard);
keyboard.y = 2400;
function startGame() {
gameActive = true;
activeWords = [];
currentInput = "";
score = 0;
wordCount = 0;
gameTicks = 0;
spawnInterval = 2500;
difficulty = 1;
level = 1;
scoreDisplay.setText("Score: 0");
updateInput("");
LK.playMusic('bgMusic');
}
function endGame() {
gameActive = false;
if (score > storage.highScore) {
storage.highScore = score;
highScoreDisplay.setText("High Score: " + storage.highScore);
}
LK.stopMusic();
LK.showGameOver();
}
function getRandomWord() {
var wordPool = difficulty > 2 ? longWords.concat(words) : words;
return wordPool[Math.floor(Math.random() * wordPool.length)];
}
function updateInput(text) {
currentInput = text;
inputDisplay.setText(text);
}
function spawnWord() {
var word = getRandomWord();
var fallingWord = new FallingWord(word, 108 / 120); // Adjust speed to ensure 80 seconds to fall
fallingWord.x = Math.random() * (2048 - 400) + 100;
fallingWord.y = 100;
game.addChild(fallingWord);
activeWords.push(fallingWord);
wordCount++;
if (wordCount % 10 === 0) {
increaseDifficulty();
}
}
function increaseDifficulty() {
difficulty += 0.2;
spawnInterval = Math.max(800, spawnInterval - 100);
storage.difficulty = difficulty;
}
function checkInput(_char) {
var newInput = currentInput + _char;
updateInput(newInput);
for (var i = 0; i < activeWords.length; i++) {
var word = activeWords[i];
if (word.wordText.toLowerCase().startsWith(newInput.toLowerCase())) {
if (newInput.length === word.wordText.length) {
score += 5;
LK.setScore(score);
scoreDisplay.setText("Score: " + score);
if (score >= levelThreshold * level) {
levelDisplay.setText("Level: " + level);
level++;
increaseDifficulty();
LK.effects.flashScreen(0x00ff00, 1000); // Flash screen green to indicate level up
}
LK.getSound('correctWord').play();
LK.effects.flashObject(word, 0x00ff00, 400);
tween(word, {
alpha: 0
}, {
duration: 300,
onFinish: function onFinish() {
game.removeChild(word);
activeWords.splice(activeWords.indexOf(word), 1);
}
});
updateInput("");
return true;
}
word.updateTyped(newInput);
return true;
}
}
return false;
}
function clearInput() {
updateInput("");
for (var i = 0; i < activeWords.length; i++) {
activeWords[i].updateTyped("");
}
}
var keyboardButtons = [];
var keyboardLayout = [['Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P'], ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L'], ['Z', 'X', 'C', 'V', 'B', 'N', 'M']];
var totalKeyboardHeight = keyboardLayout.length * 10; // Assuming each row is 60 pixels high
function createKeyboard() {
var buttonSize = 50;
var spacing = 30;
var rows = keyboardLayout.length;
for (var row = 0; row < rows; row++) {
var keys = keyboardLayout[row];
var rowWidth = keys.length * (buttonSize + spacing);
var startX = (2048 - rowWidth) / 2;
var yOffset = 2048 - totalKeyboardHeight - 50;
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
var keyButton = new Container();
var keyBackground = LK.getAsset('wordBackground', {
width: 70,
height: 80,
anchorX: 0.5,
anchorY: 0.5,
tint: 0x555555
});
keyButton.addChild(keyBackground);
var keyText = new Text2(key, {
size: 70,
fill: 0xFFFFFF
});
keyText.anchor.set(0.5, 0.5);
keyButton.addChild(keyText);
keyButton.x = startX + i * (buttonSize + spacing) + buttonSize / 4;
keyButton.y = row * (buttonSize + spacing) + buttonSize / 20;
keyButton.keyValue = key;
keyButton.interactive = true;
keyButton.down = function (x, y, obj) {
if (this.keyValue) {
checkInput(this.keyValue);
}
if (obj.children && obj.children.length > 0 && obj.children[0]) {
tween(obj.children[0], {
tint: 0x3498db
}, {
duration: 100
});
}
};
keyButton.up = function (x, y, obj) {
if (obj.children && obj.children.length > 0 && obj.children[0]) {
tween(obj.children[0], {
tint: 0x555555
}, {
duration: 100
});
}
};
keyboard.addChild(keyButton);
keyboardButtons.push(keyButton);
}
}
// Delete key
var deleteKey = new Container();
var deleteBackground = LK.getAsset('wordBackground', {
width: 200,
height: 100,
anchorX: 0.5,
anchorY: 0.5,
tint: 0x555555
});
deleteKey.addChild(deleteBackground);
var deleteText = new Text2("DEL", {
size: 80,
fill: 0xFFFFFF
});
deleteText.anchor.set(0.5, 0.5);
deleteKey.addChild(deleteText);
deleteKey.x = 2048 - (buttonSize + spacing) * 7;
deleteKey.y = rows * (buttonSize + spacing) + buttonSize / 2;
deleteKey.interactive = true;
deleteKey.down = function () {
if (currentInput.length > 0) {
updateInput(currentInput.slice(0, -1));
}
};
keyboard.addChild(deleteKey);
// Space bar
var spaceBar = new Container();
var spaceBackground = LK.getAsset('wordBackground', {
width: 200,
height: 100,
anchorX: 0.5,
anchorY: 0.5,
tint: 0x555555
});
spaceBar.addChild(spaceBackground);
var spaceText = new Text2("SPACE", {
size: 80,
fill: 0xFFFFFF
});
spaceText.anchor.set(0.5, 0.5);
spaceBar.addChild(spaceText);
spaceBar.y = rows * (buttonSize + spacing) + 40;
spaceBar.x = 2048 / 2;
spaceBar.interactive = true;
spaceBar.down = function () {
checkInput(" ");
};
keyboard.addChild(spaceBar);
}
createKeyboard();
startGame();
// Game loop
game.update = function () {
if (!gameActive) {
return;
}
var now = Date.now();
if (now - lastSpawnTime >= spawnInterval) {
spawnWord();
lastSpawnTime = now;
}
for (var i = activeWords.length - 1; i >= 0; i--) {
var word = activeWords[i];
word.update();
if (word.y > 2700) {
LK.getSound('wordHitBottom').play();
game.removeChild(word);
activeWords.splice(i, 1);
clearInput();
endGame();
}
}
};