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