User prompt
Please fix the bug: 'Timeout.tick error: Cannot set properties of undefined (setting 'fill')' in or related to this line: 'targetColorText.style.fill = textColors[currentColorTarget];' Line Number: 197
Code edit (1 edits merged)
Please save this source code
User prompt
Quick Color Challenge
Initial prompt
Oyuncu oyuna başladığında oyuna başla tuşuna tıkladığında oyun başlasın oyun 3 den geriye sayıp ekranda renkler çıksın ve oyun bir renk söylesin oyuncu oyunun söylediği renge 2 saniyede basamazsa oyun hızlı ol desin oyuncu yanlış renge tıkladığında ekranda yanlış yazısı çıksın eyer oyuncu doğru renge tıklarsa ekranda aferin yazısı çıksın ve oyuncu bölüm 2 ye geçsin ve oyun yine rastgele renk söyleyip oyuncu bilmeye çalışsın ve oyun böyle devam etsin
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { highScore: 0, currentLevel: 1 }); /**** * Classes ****/ var ColorObject = Container.expand(function (color) { var self = Container.call(this); var circleAsset = self.attachAsset(color + 'Circle', { anchorX: 0.5, anchorY: 0.5, scaleX: 1, scaleY: 1 }); self.colorName = color; self.down = function (x, y, obj) { if (game.gameState === 'playing') { game.checkSelection(self.colorName); } }; self.pulse = function () { tween(circleAsset, { scaleX: 1.2, scaleY: 1.2 }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { tween(circleAsset, { scaleX: 1, scaleY: 1 }, { duration: 300, easing: tween.easeIn }); } }); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xF5F5F5 }); /**** * Game Code ****/ // Game settings and variables var level = storage.currentLevel || 1; var warnings = 0; var maxWarnings = 3; var score = 0; var highScore = storage.highScore || 0; var colorObjects = []; var currentColorTarget = ''; var roundTimer = null; var timeLimit = 2000; // 2 seconds per round var colors = ['red', 'blue', 'green', 'yellow']; var advancedColors = ['purple', 'orange']; var gameState = 'ready'; // ready, countdown, playing, paused, over // UI Elements var scoreText = new Text2('Score: 0', { size: 80, fill: 0x333333 }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); var levelText = new Text2('Level: 1', { size: 80, fill: 0x333333 }); levelText.anchor.set(0, 0); LK.gui.topRight.addChild(levelText); levelText.x -= 300; var warningText = new Text2('Warnings: 0/' + maxWarnings, { size: 80, fill: 0x333333 }); warningText.anchor.set(1, 0); LK.gui.topLeft.addChild(warningText); warningText.x += 400; var messageText = new Text2('Tap to Start', { size: 120, fill: 0x333333 }); messageText.anchor.set(0.5, 0.5); LK.gui.center.addChild(messageText); var targetColorText = new Text2('', { size: 140, fill: 0x333333 }); targetColorText.anchor.set(0.5, 0); targetColorText.y = 250; LK.gui.top.addChild(targetColorText); // Game functions function startGame() { gameState = 'countdown'; messageText.setText('3'); LK.setTimeout(function () { messageText.setText('2'); }, 1000); LK.setTimeout(function () { messageText.setText('1'); }, 2000); LK.setTimeout(function () { messageText.setText('GO!'); LK.setTimeout(function () { messageText.setText(''); setupLevel(); gameState = 'playing'; startRound(); }, 500); }, 3000); LK.playMusic('bgmusic', { fade: { start: 0, end: 0.5, duration: 2000 } }); } function setupLevel() { // Clear existing color objects for (var i = 0; i < colorObjects.length; i++) { colorObjects[i].destroy(); } colorObjects = []; // Update level display levelText.setText('Level: ' + level); // Define available colors based on level var availableColors = colors.slice(0); if (level > 3) { availableColors.push(advancedColors[0]); } if (level > 6) { availableColors.push(advancedColors[1]); } // Calculate positions for color objects var numColors = availableColors.length; var spacing = 2048 / (numColors + 1); var yPosition = 2732 / 2; // Create color objects for (var i = 0; i < numColors; i++) { var colorObj = new ColorObject(availableColors[i]); colorObj.x = spacing * (i + 1); colorObj.y = yPosition; game.addChild(colorObj); colorObjects.push(colorObj); } } function startRound() { // Select a random color from the available ones var availableColors = colors.slice(0); if (level > 3) { availableColors.push(advancedColors[0]); } if (level > 6) { availableColors.push(advancedColors[1]); } var randomIndex = Math.floor(Math.random() * availableColors.length); currentColorTarget = availableColors[randomIndex]; // Display the target color name targetColorText.setText(currentColorTarget.toUpperCase()); // Set text color (make it different from the actual color to add difficulty) var textColors = { 'red': '#0000FF', 'blue': '#FF0000', 'green': '#FFA500', 'yellow': '#800080', 'purple': '#00FF00', 'orange': '#0000FF' }; targetColorText.style.fill = textColors[currentColorTarget]; // Start the timer roundTimer = LK.setTimeout(function () { addWarning("Time's up!"); }, timeLimit - level * 100); // Reduce time for higher levels } function checkSelection(selectedColor) { LK.clearTimeout(roundTimer); if (selectedColor === currentColorTarget) { handleCorrectSelection(); } else { handleIncorrectSelection(); } } function handleCorrectSelection() { LK.getSound('correct').play(); // Pulse the correct color object for (var i = 0; i < colorObjects.length; i++) { if (colorObjects[i].colorName === currentColorTarget) { colorObjects[i].pulse(); break; } } // Update score score += level * 10; scoreText.setText('Score: ' + score); // Show message messageText.setText('Correct!'); LK.setTimeout(function () { messageText.setText(''); // Check for level advancement if (score >= level * 50) { levelUp(); } else { startRound(); } }, 800); } function handleIncorrectSelection() { LK.getSound('wrong').play(); addWarning("Wrong color!"); } function addWarning(message) { warnings++; warningText.setText('Warnings: ' + warnings + '/' + maxWarnings); // Flash the screen red LK.effects.flashScreen(0xFF0000, 500); // Show message messageText.setText(message); if (warnings >= maxWarnings) { gameOver(); } else { LK.setTimeout(function () { messageText.setText(''); startRound(); }, 1000); } } function levelUp() { LK.getSound('levelUp').play(); level++; // Save current level storage.currentLevel = level; // Show level up message messageText.setText('Level Up!'); // Update level display levelText.setText('Level: ' + level); LK.setTimeout(function () { messageText.setText(''); setupLevel(); startRound(); }, 1500); } function gameOver() { gameState = 'over'; // Update high score if needed if (score > highScore) { highScore = score; storage.highScore = highScore; } // Show game over LK.showGameOver(); } // Event handlers game.down = function (x, y, obj) { if (gameState === 'ready') { startGame(); } }; // Update function game.update = function () { // Background pulsing for the target text (subtle effect) if (gameState === 'playing' && LK.ticks % 30 === 0) { tween(targetColorText, { scale: 1.1 }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { tween(targetColorText, { scale: 1 }, { duration: 300, easing: tween.easeIn }); } }); } }; // Initialize the game scoreText.setText('Score: ' + score); levelText.setText('Level: ' + level); warningText.setText('Warnings: ' + warnings + '/' + maxWarnings);
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,295 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1", {
+ highScore: 0,
+ currentLevel: 1
+});
+
+/****
+* Classes
+****/
+var ColorObject = Container.expand(function (color) {
+ var self = Container.call(this);
+ var circleAsset = self.attachAsset(color + 'Circle', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ scaleX: 1,
+ scaleY: 1
+ });
+ self.colorName = color;
+ self.down = function (x, y, obj) {
+ if (game.gameState === 'playing') {
+ game.checkSelection(self.colorName);
+ }
+ };
+ self.pulse = function () {
+ tween(circleAsset, {
+ scaleX: 1.2,
+ scaleY: 1.2
+ }, {
+ duration: 300,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ tween(circleAsset, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 300,
+ easing: tween.easeIn
+ });
+ }
+ });
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0xF5F5F5
+});
+
+/****
+* Game Code
+****/
+// Game settings and variables
+var level = storage.currentLevel || 1;
+var warnings = 0;
+var maxWarnings = 3;
+var score = 0;
+var highScore = storage.highScore || 0;
+var colorObjects = [];
+var currentColorTarget = '';
+var roundTimer = null;
+var timeLimit = 2000; // 2 seconds per round
+var colors = ['red', 'blue', 'green', 'yellow'];
+var advancedColors = ['purple', 'orange'];
+var gameState = 'ready'; // ready, countdown, playing, paused, over
+// UI Elements
+var scoreText = new Text2('Score: 0', {
+ size: 80,
+ fill: 0x333333
+});
+scoreText.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreText);
+var levelText = new Text2('Level: 1', {
+ size: 80,
+ fill: 0x333333
+});
+levelText.anchor.set(0, 0);
+LK.gui.topRight.addChild(levelText);
+levelText.x -= 300;
+var warningText = new Text2('Warnings: 0/' + maxWarnings, {
+ size: 80,
+ fill: 0x333333
+});
+warningText.anchor.set(1, 0);
+LK.gui.topLeft.addChild(warningText);
+warningText.x += 400;
+var messageText = new Text2('Tap to Start', {
+ size: 120,
+ fill: 0x333333
+});
+messageText.anchor.set(0.5, 0.5);
+LK.gui.center.addChild(messageText);
+var targetColorText = new Text2('', {
+ size: 140,
+ fill: 0x333333
+});
+targetColorText.anchor.set(0.5, 0);
+targetColorText.y = 250;
+LK.gui.top.addChild(targetColorText);
+// Game functions
+function startGame() {
+ gameState = 'countdown';
+ messageText.setText('3');
+ LK.setTimeout(function () {
+ messageText.setText('2');
+ }, 1000);
+ LK.setTimeout(function () {
+ messageText.setText('1');
+ }, 2000);
+ LK.setTimeout(function () {
+ messageText.setText('GO!');
+ LK.setTimeout(function () {
+ messageText.setText('');
+ setupLevel();
+ gameState = 'playing';
+ startRound();
+ }, 500);
+ }, 3000);
+ LK.playMusic('bgmusic', {
+ fade: {
+ start: 0,
+ end: 0.5,
+ duration: 2000
+ }
+ });
+}
+function setupLevel() {
+ // Clear existing color objects
+ for (var i = 0; i < colorObjects.length; i++) {
+ colorObjects[i].destroy();
+ }
+ colorObjects = [];
+ // Update level display
+ levelText.setText('Level: ' + level);
+ // Define available colors based on level
+ var availableColors = colors.slice(0);
+ if (level > 3) {
+ availableColors.push(advancedColors[0]);
+ }
+ if (level > 6) {
+ availableColors.push(advancedColors[1]);
+ }
+ // Calculate positions for color objects
+ var numColors = availableColors.length;
+ var spacing = 2048 / (numColors + 1);
+ var yPosition = 2732 / 2;
+ // Create color objects
+ for (var i = 0; i < numColors; i++) {
+ var colorObj = new ColorObject(availableColors[i]);
+ colorObj.x = spacing * (i + 1);
+ colorObj.y = yPosition;
+ game.addChild(colorObj);
+ colorObjects.push(colorObj);
+ }
+}
+function startRound() {
+ // Select a random color from the available ones
+ var availableColors = colors.slice(0);
+ if (level > 3) {
+ availableColors.push(advancedColors[0]);
+ }
+ if (level > 6) {
+ availableColors.push(advancedColors[1]);
+ }
+ var randomIndex = Math.floor(Math.random() * availableColors.length);
+ currentColorTarget = availableColors[randomIndex];
+ // Display the target color name
+ targetColorText.setText(currentColorTarget.toUpperCase());
+ // Set text color (make it different from the actual color to add difficulty)
+ var textColors = {
+ 'red': '#0000FF',
+ 'blue': '#FF0000',
+ 'green': '#FFA500',
+ 'yellow': '#800080',
+ 'purple': '#00FF00',
+ 'orange': '#0000FF'
+ };
+ targetColorText.style.fill = textColors[currentColorTarget];
+ // Start the timer
+ roundTimer = LK.setTimeout(function () {
+ addWarning("Time's up!");
+ }, timeLimit - level * 100); // Reduce time for higher levels
+}
+function checkSelection(selectedColor) {
+ LK.clearTimeout(roundTimer);
+ if (selectedColor === currentColorTarget) {
+ handleCorrectSelection();
+ } else {
+ handleIncorrectSelection();
+ }
+}
+function handleCorrectSelection() {
+ LK.getSound('correct').play();
+ // Pulse the correct color object
+ for (var i = 0; i < colorObjects.length; i++) {
+ if (colorObjects[i].colorName === currentColorTarget) {
+ colorObjects[i].pulse();
+ break;
+ }
+ }
+ // Update score
+ score += level * 10;
+ scoreText.setText('Score: ' + score);
+ // Show message
+ messageText.setText('Correct!');
+ LK.setTimeout(function () {
+ messageText.setText('');
+ // Check for level advancement
+ if (score >= level * 50) {
+ levelUp();
+ } else {
+ startRound();
+ }
+ }, 800);
+}
+function handleIncorrectSelection() {
+ LK.getSound('wrong').play();
+ addWarning("Wrong color!");
+}
+function addWarning(message) {
+ warnings++;
+ warningText.setText('Warnings: ' + warnings + '/' + maxWarnings);
+ // Flash the screen red
+ LK.effects.flashScreen(0xFF0000, 500);
+ // Show message
+ messageText.setText(message);
+ if (warnings >= maxWarnings) {
+ gameOver();
+ } else {
+ LK.setTimeout(function () {
+ messageText.setText('');
+ startRound();
+ }, 1000);
+ }
+}
+function levelUp() {
+ LK.getSound('levelUp').play();
+ level++;
+ // Save current level
+ storage.currentLevel = level;
+ // Show level up message
+ messageText.setText('Level Up!');
+ // Update level display
+ levelText.setText('Level: ' + level);
+ LK.setTimeout(function () {
+ messageText.setText('');
+ setupLevel();
+ startRound();
+ }, 1500);
+}
+function gameOver() {
+ gameState = 'over';
+ // Update high score if needed
+ if (score > highScore) {
+ highScore = score;
+ storage.highScore = highScore;
+ }
+ // Show game over
+ LK.showGameOver();
+}
+// Event handlers
+game.down = function (x, y, obj) {
+ if (gameState === 'ready') {
+ startGame();
+ }
+};
+// Update function
+game.update = function () {
+ // Background pulsing for the target text (subtle effect)
+ if (gameState === 'playing' && LK.ticks % 30 === 0) {
+ tween(targetColorText, {
+ scale: 1.1
+ }, {
+ duration: 300,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ tween(targetColorText, {
+ scale: 1
+ }, {
+ duration: 300,
+ easing: tween.easeIn
+ });
+ }
+ });
+ }
+};
+// Initialize the game
+scoreText.setText('Score: ' + score);
+levelText.setText('Level: ' + level);
+warningText.setText('Warnings: ' + warnings + '/' + maxWarnings);
\ No newline at end of file