/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { highScore: 0, difficulty: 1 }); /**** * Classes ****/ /**** * 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, width: 800, height: 200 }); self.wordDisplay = new Text2(wordText, { size: 100, fill: 0xffffff }); self.wordDisplay.anchor.set(0.5, 0.5); self.addChild(self.wordDisplay); self.progressDisplay = new Text2("", { size: 90, fill: 0x000000 }); 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 / 4; }; return self; }); /**** * Initialize Game ****/ /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x1a1a2e }); /**** * Game Code ****/ /**** * Plugins ****/ /**** * 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", "last", "first"]; var longWords = ["keyboard", "challenge", "practice", "improvement", "experience", "butterfly", "professional", "application", "perfume", "intelligent"]; var activeWords = []; var gameActive = false; var currentInput = ""; var spawnInterval = 6000; var lastSpawnTime = 0; var score = 0; var level = 1; var wordCount = 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: 70, fill: 0xf5f5f5 }); highScoreDisplay.anchor.set(0.5, 0); highScoreDisplay.y = 120; LK.gui.top.addChild(highScoreDisplay); var levelDisplay = new Text2("", { size: 90, fill: 0xdbdfdb }); levelDisplay.anchor.set(0.8, 0); levelDisplay.y = 10; LK.gui.top.addChild(levelDisplay); var inputDisplay = new Text2("", { size: 100, fill: 0xedebf0 }); var inputBackground = new Text2("", { size: 110, fill: 0x5010d1 }); inputBackground.anchor.set(0.5, 1); inputBackground.y = -80; LK.gui.bottom.addChild(inputBackground); inputDisplay.anchor.set(0.5, 1); inputDisplay.y = -40; LK.gui.bottom.addChild(inputDisplay); var keyboard = new Container(); game.addChild(keyboard); keyboard.y = 2200; var menu = new Container(); game.addChild(menu); var congratulationsPopup = new Container(); game.addChild(congratulationsPopup); congratulationsPopup.visible = false; var congratulationsText = new Text2("Level 1 Complete!", { size: 100, fill: 0xFFFFFF }); congratulationsText.anchor.set(0.5); congratulationsPopup.addChild(congratulationsText); congratulationsPopup.x = 2048 / 2; congratulationsPopup.y = 2732 / 2; function startGame() { gameActive = true; activeWords = []; currentInput = ""; score = 0; wordCount = 0; spawnInterval = 6000; lastSpawnTime = 0; scoreDisplay.setText("Score: 0"); updateInput(""); LK.playMusic('bgMusic'); menu.visible = false; congratulationsPopup.visible = false; } function endGame() { gameActive = false; if (score > storage.highScore) { storage.highScore = score; highScoreDisplay.setText("High Score: " + storage.highScore); } LK.stopMusic(); LK.showGameOver(); menu.visible = true; congratulationsPopup.visible = false; } function getRandomWord() { var wordPool = level === 2 ? longWords : words; return wordPool[Math.floor(Math.random() * wordPool.length)]; } function updateInput(text) { currentInput = text; inputDisplay.setText(text); } function spawnWord() { var word = getRandomWord(); var speed = 3 + level * 1; var fallingWord = new FallingWord(word, speed); fallingWord.x = Math.random() * (2048 - 400) + 100; fallingWord.y = 100; game.addChild(fallingWord); activeWords.push(fallingWord); wordCount++; if (wordCount >= 10) { gameActive = false; if (level === 1) { congratulationsPopup.visible = true; level = 2; wordCount = 0; LK.setTimeout(function () { congratulationsPopup.visible = false; startGame(); }, 3000); } else { endGame(); } } } 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); 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; function createKeyboard() { var buttonSize = 70; var spacing = 40; 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 - 80; for (var i = 0; i < keys.length; i++) { var key = keys[i]; var keyButton = new Container(); var keyBackground = LK.getAsset('wordBackground', { width: 100, height: 120, anchorX: 0.5, anchorY: 0.5, tint: 0xcc2d2d }); keyButton.addChild(keyBackground); var keyText = new Text2(key, { size: 90, 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: 0xcc2d2d }, { duration: 100 }); } }; keyboard.addChild(keyButton); keyboardButtons.push(keyButton); } } var deleteKey = new Container(); var deleteBackground = LK.getAsset('wordBackground', { width: 250, height: 120, anchorX: 0.5, anchorY: 0.5, tint: 0xcc2d2d }); deleteKey.addChild(deleteBackground); var deleteText = new Text2("DEL", { size: 90, 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); var spaceBar = new Container(); var spaceBackground = LK.getAsset('wordBackground', { width: 400, height: 120, anchorX: 0.8, anchorY: 0.4, tint: 0xc11010 }); spaceBar.addChild(spaceBackground); var spaceText = new Text2("SPACE", { size: 90, fill: 0xFFFFFF }); spaceText.anchor.set(0.9, 0.4); spaceBar.addChild(spaceText); spaceBar.y = rows * (buttonSize + spacing) + 40; spaceBar.x = 2048 / 2; spaceBar.interactive = true; spaceBar.down = function () { checkInput(" "); }; keyboard.addChild(spaceBar); } createKeyboard(); var titleText = new Text2("Typing Titan", { size: 120, fill: 0xFFFFFF }); titleText.anchor.set(0.5); menu.addChild(titleText); titleText.y = -180; var level1Button = new Container(); var level1Text = new Text2("Level 1", { size: 100, fill: 0xFFFFFF }); level1Text.anchor.set(0.5); level1Button.addChild(level1Text); level1Button.y = 50; level1Button.interactive = true; level1Button.down = function () { level = 1; startGame(); }; menu.addChild(level1Button); var level2Button = new Container(); var level2Text = new Text2("Level 2", { size: 100, fill: 0xFFFFFF }); level2Text.anchor.set(0.5); level2Button.addChild(level2Text); level2Button.y = 180; level2Button.interactive = true; level2Button.down = function () { level = 2; startGame(); }; menu.addChild(level2Button); menu.x = 2048 / 2; menu.y = 2732 / 2; 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(); } } };
===================================================================
--- original.js
+++ change.js
@@ -9,27 +9,31 @@
/****
* Classes
****/
+/**** * 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
+ anchorY: 0.5,
+ width: 800,
+ height: 200
});
self.wordDisplay = new Text2(wordText, {
- size: 80,
- fill: 0xFFFFFF
+ size: 100,
+ fill: 0xffffff
});
self.wordDisplay.anchor.set(0.5, 0.5);
self.addChild(self.wordDisplay);
self.progressDisplay = new Text2("", {
- size: 60,
- fill: 0x00FF00
+ size: 90,
+ fill: 0x000000
});
self.progressDisplay.anchor.set(0.5, 0.5);
self.addChild(self.progressDisplay);
self.updateTyped = function (typedText) {
@@ -41,94 +45,109 @@
}
return false;
};
self.update = function () {
- self.y += self.speed;
+ self.y += self.speed / 4;
};
return self;
});
/****
* Initialize Game
****/
+/**** * Initialize Game
+****/
var game = new LK.Game({
backgroundColor: 0x1a1a2e
});
/****
* Game Code
****/
+/**** * Plugins
+****/
+/**** * 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 words = ["type", "hero", "word", "game", "play", "fast", "quick", "next", "last", "first"];
+var longWords = ["keyboard", "challenge", "practice", "improvement", "experience", "butterfly", "professional", "application", "perfume", "intelligent"];
var activeWords = [];
var gameActive = false;
var currentInput = "";
-var spawnInterval = 10; // Set the interval time period between word spawns to 50 seconds
+var spawnInterval = 6000;
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
+ size: 70,
+ fill: 0xf5f5f5
});
highScoreDisplay.anchor.set(0.5, 0);
-highScoreDisplay.y = 80;
+highScoreDisplay.y = 120;
LK.gui.top.addChild(highScoreDisplay);
-var levelDisplay = new Text2("Level: 1", {
- size: 60,
- fill: 0x00FF00
+var levelDisplay = new Text2("", {
+ size: 90,
+ fill: 0xdbdfdb
});
-levelDisplay.anchor.set(0.5, 0);
-levelDisplay.y = 140;
+levelDisplay.anchor.set(0.8, 0);
+levelDisplay.y = 10;
LK.gui.top.addChild(levelDisplay);
var inputDisplay = new Text2("", {
- size: 80,
- fill: 0xFFFFFF
+ size: 100,
+ fill: 0xedebf0
});
var inputBackground = new Text2("", {
- size: 80,
- fill: 0x000000
+ size: 110,
+ fill: 0x5010d1
});
inputBackground.anchor.set(0.5, 1);
-inputBackground.y = -50;
+inputBackground.y = -80;
LK.gui.bottom.addChild(inputBackground);
inputDisplay.anchor.set(0.5, 1);
-inputDisplay.y = -20;
+inputDisplay.y = -40;
LK.gui.bottom.addChild(inputDisplay);
var keyboard = new Container();
game.addChild(keyboard);
-keyboard.y = 2400;
+keyboard.y = 2200;
+var menu = new Container();
+game.addChild(menu);
+var congratulationsPopup = new Container();
+game.addChild(congratulationsPopup);
+congratulationsPopup.visible = false;
+var congratulationsText = new Text2("Level 1 Complete!", {
+ size: 100,
+ fill: 0xFFFFFF
+});
+congratulationsText.anchor.set(0.5);
+congratulationsPopup.addChild(congratulationsText);
+congratulationsPopup.x = 2048 / 2;
+congratulationsPopup.y = 2732 / 2;
function startGame() {
gameActive = true;
activeWords = [];
currentInput = "";
score = 0;
wordCount = 0;
- gameTicks = 0;
- spawnInterval = 2500;
- difficulty = 1;
- level = 1;
+ spawnInterval = 6000;
+ lastSpawnTime = 0;
scoreDisplay.setText("Score: 0");
updateInput("");
LK.playMusic('bgMusic');
+ menu.visible = false;
+ congratulationsPopup.visible = false;
}
function endGame() {
gameActive = false;
if (score > storage.highScore) {
@@ -136,34 +155,43 @@
highScoreDisplay.setText("High Score: " + storage.highScore);
}
LK.stopMusic();
LK.showGameOver();
+ menu.visible = true;
+ congratulationsPopup.visible = false;
}
function getRandomWord() {
- var wordPool = difficulty > 2 ? longWords.concat(words) : words;
+ var wordPool = level === 2 ? longWords : 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
+ var speed = 3 + level * 1;
+ var fallingWord = new FallingWord(word, speed);
fallingWord.x = Math.random() * (2048 - 400) + 100;
fallingWord.y = 100;
game.addChild(fallingWord);
activeWords.push(fallingWord);
wordCount++;
- if (wordCount % 10 === 0) {
- increaseDifficulty();
+ if (wordCount >= 10) {
+ gameActive = false;
+ if (level === 1) {
+ congratulationsPopup.visible = true;
+ level = 2;
+ wordCount = 0;
+ LK.setTimeout(function () {
+ congratulationsPopup.visible = false;
+ startGame();
+ }, 3000);
+ } else {
+ endGame();
+ }
}
}
-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++) {
@@ -172,14 +200,8 @@
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
@@ -206,31 +228,31 @@
}
}
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
+var totalKeyboardHeight = keyboardLayout.length * 10;
function createKeyboard() {
- var buttonSize = 50;
- var spacing = 30;
+ var buttonSize = 70;
+ var spacing = 40;
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;
+ var yOffset = 2048 - totalKeyboardHeight - 80;
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,
+ width: 100,
+ height: 120,
anchorX: 0.5,
anchorY: 0.5,
- tint: 0x555555
+ tint: 0xcc2d2d
});
keyButton.addChild(keyBackground);
var keyText = new Text2(key, {
- size: 70,
+ size: 90,
fill: 0xFFFFFF
});
keyText.anchor.set(0.5, 0.5);
keyButton.addChild(keyText);
@@ -252,9 +274,9 @@
};
keyButton.up = function (x, y, obj) {
if (obj.children && obj.children.length > 0 && obj.children[0]) {
tween(obj.children[0], {
- tint: 0x555555
+ tint: 0xcc2d2d
}, {
duration: 100
});
}
@@ -262,20 +284,19 @@
keyboard.addChild(keyButton);
keyboardButtons.push(keyButton);
}
}
- // Delete key
var deleteKey = new Container();
var deleteBackground = LK.getAsset('wordBackground', {
- width: 200,
- height: 100,
+ width: 250,
+ height: 120,
anchorX: 0.5,
anchorY: 0.5,
- tint: 0x555555
+ tint: 0xcc2d2d
});
deleteKey.addChild(deleteBackground);
var deleteText = new Text2("DEL", {
- size: 80,
+ size: 90,
fill: 0xFFFFFF
});
deleteText.anchor.set(0.5, 0.5);
deleteKey.addChild(deleteText);
@@ -287,23 +308,22 @@
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
+ width: 400,
+ height: 120,
+ anchorX: 0.8,
+ anchorY: 0.4,
+ tint: 0xc11010
});
spaceBar.addChild(spaceBackground);
var spaceText = new Text2("SPACE", {
- size: 80,
+ size: 90,
fill: 0xFFFFFF
});
- spaceText.anchor.set(0.5, 0.5);
+ spaceText.anchor.set(0.9, 0.4);
spaceBar.addChild(spaceText);
spaceBar.y = rows * (buttonSize + spacing) + 40;
spaceBar.x = 2048 / 2;
spaceBar.interactive = true;
@@ -312,10 +332,45 @@
};
keyboard.addChild(spaceBar);
}
createKeyboard();
-startGame();
-// Game loop
+var titleText = new Text2("Typing Titan", {
+ size: 120,
+ fill: 0xFFFFFF
+});
+titleText.anchor.set(0.5);
+menu.addChild(titleText);
+titleText.y = -180;
+var level1Button = new Container();
+var level1Text = new Text2("Level 1", {
+ size: 100,
+ fill: 0xFFFFFF
+});
+level1Text.anchor.set(0.5);
+level1Button.addChild(level1Text);
+level1Button.y = 50;
+level1Button.interactive = true;
+level1Button.down = function () {
+ level = 1;
+ startGame();
+};
+menu.addChild(level1Button);
+var level2Button = new Container();
+var level2Text = new Text2("Level 2", {
+ size: 100,
+ fill: 0xFFFFFF
+});
+level2Text.anchor.set(0.5);
+level2Button.addChild(level2Text);
+level2Button.y = 180;
+level2Button.interactive = true;
+level2Button.down = function () {
+ level = 2;
+ startGame();
+};
+menu.addChild(level2Button);
+menu.x = 2048 / 2;
+menu.y = 2732 / 2;
game.update = function () {
if (!gameActive) {
return;
}