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.setText(targetColorText.text, { 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);
/****
* 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.setText(targetColorText.text, {
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);