Code edit (2 edits merged)
Please save this source code
Code edit (3 edits merged)
Please save this source code
User prompt
add back and next buttons in the left and right bottom corners in the black color'
Code edit (4 edits merged)
Please save this source code
User prompt
display score in black color
User prompt
display time in the bottom of the page and top right corner dispaly score
Code edit (1 edits merged)
Please save this source code
User prompt
put just 5 levels for over all game
User prompt
add white color background
User prompt
add background asset in the game
User prompt
put animal pictures (images )instead of letters
User prompt
Please fix the bug: 'Timeout.tick error: timerText.setFill is not a function' in or related to this line: 'timerText.setFill("#ffffff");' Line Number: 319
User prompt
Please fix the bug: 'Timeout.tick error: timerText.setColor is not a function' in or related to this line: 'timerText.setColor("#ffffff");' Line Number: 314
Code edit (1 edits merged)
Please save this source code
User prompt
Flip & Match: Sound Safari
Initial prompt
2. Memory Match Game Concept: Flip cards to find matching pairs. Goal: Match all pairs within a time limit. Fun Twist: Each card plays a funny sound or animation when flipped.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { highScore: 0, currentLevel: 1 }); /**** * Classes ****/ var Card = Container.expand(function (symbol, soundId) { var self = Container.call(this); self.symbol = symbol; self.soundId = soundId; self.isFlipped = false; self.isMatched = false; // Create card back (visible initially) var back = self.attachAsset('cardBack', { anchorX: 0.5, anchorY: 0.5 }); // Create card front (hidden initially) var front = self.attachAsset('cardFront', { anchorX: 0.5, anchorY: 0.5, alpha: 0 }); // Add image to front var image = self.attachAsset(symbol, { anchorX: 0.5, anchorY: 0.5 }); front.addChild(image); // Make card interactive self.interactive = true; // Flip animation self.flip = function () { if (self.isMatched || self.isFlipped || !gameActive || flippedCards.length >= 2) { return; } self.isFlipped = true; LK.getSound('flip').play(); // Play the card's sound if (self.soundId) { LK.getSound(self.soundId).play(); } // Animate card flip tween(back, { scaleX: 0 }, { duration: 150, onFinish: function onFinish() { tween(front, { alpha: 1 }, { duration: 0 }); tween(front, { scaleX: 1 }, { duration: 150 }); } }); // Add to flipped cards array flippedCards.push(self); // Check for match if two cards are flipped if (flippedCards.length === 2) { checkForMatch(); } }; // Reset card to face down self.reset = function () { self.isFlipped = false; tween(front, { scaleX: 0 }, { duration: 150, onFinish: function onFinish() { tween(front, { alpha: 0 }, { duration: 0 }); tween(back, { scaleX: 1 }, { duration: 150 }); } }); }; // Show match animation self.showMatch = function () { self.isMatched = true; // Pulse animation for matched cards tween(self, { scaleX: 1.1, scaleY: 1.1 }, { duration: 200, onFinish: function onFinish() { tween(self, { scaleX: 1, scaleY: 1 }, { duration: 200 }); } }); }; // Handle card press self.down = function (x, y, obj) { self.flip(); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xFFFFFF }); /**** * Game Code ****/ // Create back button var backButton = new Text2("Back", { size: 60, fill: 0x000000 // Black color }); backButton.anchor.set(0, 1); backButton.x = 10; backButton.y = 2732 - 10; backButton.interactive = true; backButton.down = function () { // Logic for going back a level or screen if (level > 1) { level--; startGame(); } }; LK.gui.bottomLeft.addChild(backButton); // Create next button var nextButton = new Text2("Next", { size: 60, fill: 0x000000 // Black color }); nextButton.anchor.set(1, 1); nextButton.x = 2048 - 10; nextButton.y = 2732 - 10; nextButton.interactive = true; nextButton.down = function () { // Logic for going to the next level or screen if (level < 5) { level++; startGame(); } }; LK.gui.bottomRight.addChild(nextButton); var background = LK.getAsset('background', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2 }); game.addChild(background); // Game variables // Initialize animal images var level = storage.currentLevel || 1; var rows = 3; var cols = 4; var cardSpacing = 30; var cardWidth = 300; var cardHeight = 400; var flippedCards = []; var matchedPairs = 0; var requiredPairs = 0; var gameActive = false; var timeLeft = 60; var timeWarningGiven = false; var gameTimer = null; var cards = []; var symbols = []; var soundMap = { 'A': 'dog', 'B': 'cat', 'C': 'elephant', 'D': 'monkey', 'E': 'lion', 'F': 'bird', 'G': 'frog', 'H': 'dolphin' }; // Difficulty settings based on level function setDifficulty() { if (level === 1) { rows = 3; cols = 4; timeLeft = 60; } else if (level === 2) { rows = 4; cols = 4; timeLeft = 75; } else { rows = 4; cols = 5; timeLeft = 90; } requiredPairs = rows * cols / 2; } // Create symbols array function createSymbols() { var availableSymbols = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']; symbols = []; // Create pairs of symbols for (var i = 0; i < requiredPairs; i++) { var symbol = availableSymbols[i]; symbols.push(symbol); symbols.push(symbol); } // Shuffle shuffleArray(symbols); } // Fisher-Yates shuffle algorithm function shuffleArray(array) { for (var i = array.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = array[i]; array[i] = array[j]; array[j] = temp; } } // Create game board function createBoard() { var boardWidth = cols * cardWidth + (cols - 1) * cardSpacing; var boardHeight = rows * cardHeight + (rows - 1) * cardSpacing; var startX = (2048 - boardWidth) / 2 + cardWidth / 2; var startY = (2732 - boardHeight) / 2 + cardHeight / 2; var index = 0; for (var r = 0; r < rows; r++) { for (var c = 0; c < cols; c++) { var x = startX + c * (cardWidth + cardSpacing); var y = startY + r * (cardHeight + cardSpacing); var symbol = symbols[index]; var soundId = soundMap[symbol] || null; var imageId = 'animal_' + symbol; // Assuming images are named like 'animal_A', 'animal_B', etc. var card = new Card(imageId, soundId); card.x = x; card.y = y; game.addChild(card); cards.push(card); index++; } } } // Check for match when two cards are flipped function checkForMatch() { var card1 = flippedCards[0]; var card2 = flippedCards[1]; LK.setTimeout(function () { if (card1.symbol === card2.symbol) { // Match found LK.getSound('match').play(); card1.showMatch(); card2.showMatch(); matchedPairs++; // Update score LK.setScore(LK.getScore() + 100); scoreText.setText(LK.getScore()); // Check if all pairs are matched if (matchedPairs === requiredPairs) { gameWon(); } } else { // No match, flip cards back LK.getSound('nomatch').play(); card1.reset(); card2.reset(); } flippedCards = []; }, 1000); } // Timer update function updateTimer() { timeLeft--; timerText.setText("Time: " + timeLeft); // Time running out warning if (timeLeft <= 10 && !timeWarningGiven) { timeWarningGiven = true; timerText.setStyle({ fill: 0xE74C3C }); LK.getSound('timewarning').play(); } // Game over if time runs out if (timeLeft <= 0) { gameOver(); } } // Game won function gameWon() { LK.clearInterval(gameTimer); gameActive = false; // Add time bonus var timeBonus = timeLeft * 10; LK.setScore(LK.getScore() + timeBonus); scoreText.setText(LK.getScore()); // Update high score if (LK.getScore() > storage.highScore) { storage.highScore = LK.getScore(); } // Update level level++; if (level > 5) { level = 1; // Reset to level 1 after level 5 } storage.currentLevel = level; // Play win sound LK.getSound('win').play(); // Show success message LK.showYouWin(); } // Game over function gameOver() { LK.clearInterval(gameTimer); gameActive = false; // Show game over screen LK.showGameOver(); } // Start a new game function startGame() { // Reset game state matchedPairs = 0; flippedCards = []; timeWarningGiven = false; LK.setScore(0); scoreText.setText("0"); // Clear previous game for (var i = 0; i < cards.length; i++) { cards[i].destroy(); } cards = []; // Set up new game setDifficulty(); createSymbols(); createBoard(); // Reset timer timerText.setText("Time: " + timeLeft); timerText.setStyle({ fill: 0xFFFFFF }); // Start timer if (gameTimer) { LK.clearInterval(gameTimer); } gameTimer = LK.setInterval(updateTimer, 1000); // Start game gameActive = true; // Play background music LK.playMusic('bgmusic', { fade: { start: 0, end: 0.3, duration: 1000 } }); } // Create UI elements var titleText = new Text2("Crazy Card Match", { size: 80, fill: 0x000000 }); titleText.anchor.set(0.5, 0); LK.gui.top.addChild(titleText); titleText.y = 50; var scoreText = new Text2("0", { size: 60, fill: 0x000000 }); scoreText.anchor.set(1, 0); LK.gui.topRight.addChild(scoreText); scoreText.x = -10; scoreText.y = 50; var timerText = new Text2("Time: 60", { size: 60, fill: 0x000000 }); timerText.anchor.set(0.5, 1); LK.gui.bottom.addChild(timerText); timerText.y = -10; var levelText = new Text2("Level: " + level, { size: 60, fill: 0x000000 }); levelText.anchor.set(0.5, 1); LK.gui.bottom.addChild(levelText); levelText.y = -100; // Start the game LK.setTimeout(function () { startGame(); }, 500); // Main game update loop game.update = function () { // Update level text (in case level changes) levelText.setText("Level: " + level); };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
highScore: 0,
currentLevel: 1
});
/****
* Classes
****/
var Card = Container.expand(function (symbol, soundId) {
var self = Container.call(this);
self.symbol = symbol;
self.soundId = soundId;
self.isFlipped = false;
self.isMatched = false;
// Create card back (visible initially)
var back = self.attachAsset('cardBack', {
anchorX: 0.5,
anchorY: 0.5
});
// Create card front (hidden initially)
var front = self.attachAsset('cardFront', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0
});
// Add image to front
var image = self.attachAsset(symbol, {
anchorX: 0.5,
anchorY: 0.5
});
front.addChild(image);
// Make card interactive
self.interactive = true;
// Flip animation
self.flip = function () {
if (self.isMatched || self.isFlipped || !gameActive || flippedCards.length >= 2) {
return;
}
self.isFlipped = true;
LK.getSound('flip').play();
// Play the card's sound
if (self.soundId) {
LK.getSound(self.soundId).play();
}
// Animate card flip
tween(back, {
scaleX: 0
}, {
duration: 150,
onFinish: function onFinish() {
tween(front, {
alpha: 1
}, {
duration: 0
});
tween(front, {
scaleX: 1
}, {
duration: 150
});
}
});
// Add to flipped cards array
flippedCards.push(self);
// Check for match if two cards are flipped
if (flippedCards.length === 2) {
checkForMatch();
}
};
// Reset card to face down
self.reset = function () {
self.isFlipped = false;
tween(front, {
scaleX: 0
}, {
duration: 150,
onFinish: function onFinish() {
tween(front, {
alpha: 0
}, {
duration: 0
});
tween(back, {
scaleX: 1
}, {
duration: 150
});
}
});
};
// Show match animation
self.showMatch = function () {
self.isMatched = true;
// Pulse animation for matched cards
tween(self, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 200,
onFinish: function onFinish() {
tween(self, {
scaleX: 1,
scaleY: 1
}, {
duration: 200
});
}
});
};
// Handle card press
self.down = function (x, y, obj) {
self.flip();
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xFFFFFF
});
/****
* Game Code
****/
// Create back button
var backButton = new Text2("Back", {
size: 60,
fill: 0x000000 // Black color
});
backButton.anchor.set(0, 1);
backButton.x = 10;
backButton.y = 2732 - 10;
backButton.interactive = true;
backButton.down = function () {
// Logic for going back a level or screen
if (level > 1) {
level--;
startGame();
}
};
LK.gui.bottomLeft.addChild(backButton);
// Create next button
var nextButton = new Text2("Next", {
size: 60,
fill: 0x000000 // Black color
});
nextButton.anchor.set(1, 1);
nextButton.x = 2048 - 10;
nextButton.y = 2732 - 10;
nextButton.interactive = true;
nextButton.down = function () {
// Logic for going to the next level or screen
if (level < 5) {
level++;
startGame();
}
};
LK.gui.bottomRight.addChild(nextButton);
var background = LK.getAsset('background', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2
});
game.addChild(background);
// Game variables
// Initialize animal images
var level = storage.currentLevel || 1;
var rows = 3;
var cols = 4;
var cardSpacing = 30;
var cardWidth = 300;
var cardHeight = 400;
var flippedCards = [];
var matchedPairs = 0;
var requiredPairs = 0;
var gameActive = false;
var timeLeft = 60;
var timeWarningGiven = false;
var gameTimer = null;
var cards = [];
var symbols = [];
var soundMap = {
'A': 'dog',
'B': 'cat',
'C': 'elephant',
'D': 'monkey',
'E': 'lion',
'F': 'bird',
'G': 'frog',
'H': 'dolphin'
};
// Difficulty settings based on level
function setDifficulty() {
if (level === 1) {
rows = 3;
cols = 4;
timeLeft = 60;
} else if (level === 2) {
rows = 4;
cols = 4;
timeLeft = 75;
} else {
rows = 4;
cols = 5;
timeLeft = 90;
}
requiredPairs = rows * cols / 2;
}
// Create symbols array
function createSymbols() {
var availableSymbols = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'];
symbols = [];
// Create pairs of symbols
for (var i = 0; i < requiredPairs; i++) {
var symbol = availableSymbols[i];
symbols.push(symbol);
symbols.push(symbol);
}
// Shuffle
shuffleArray(symbols);
}
// Fisher-Yates shuffle algorithm
function shuffleArray(array) {
for (var i = array.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
// Create game board
function createBoard() {
var boardWidth = cols * cardWidth + (cols - 1) * cardSpacing;
var boardHeight = rows * cardHeight + (rows - 1) * cardSpacing;
var startX = (2048 - boardWidth) / 2 + cardWidth / 2;
var startY = (2732 - boardHeight) / 2 + cardHeight / 2;
var index = 0;
for (var r = 0; r < rows; r++) {
for (var c = 0; c < cols; c++) {
var x = startX + c * (cardWidth + cardSpacing);
var y = startY + r * (cardHeight + cardSpacing);
var symbol = symbols[index];
var soundId = soundMap[symbol] || null;
var imageId = 'animal_' + symbol; // Assuming images are named like 'animal_A', 'animal_B', etc.
var card = new Card(imageId, soundId);
card.x = x;
card.y = y;
game.addChild(card);
cards.push(card);
index++;
}
}
}
// Check for match when two cards are flipped
function checkForMatch() {
var card1 = flippedCards[0];
var card2 = flippedCards[1];
LK.setTimeout(function () {
if (card1.symbol === card2.symbol) {
// Match found
LK.getSound('match').play();
card1.showMatch();
card2.showMatch();
matchedPairs++;
// Update score
LK.setScore(LK.getScore() + 100);
scoreText.setText(LK.getScore());
// Check if all pairs are matched
if (matchedPairs === requiredPairs) {
gameWon();
}
} else {
// No match, flip cards back
LK.getSound('nomatch').play();
card1.reset();
card2.reset();
}
flippedCards = [];
}, 1000);
}
// Timer update
function updateTimer() {
timeLeft--;
timerText.setText("Time: " + timeLeft);
// Time running out warning
if (timeLeft <= 10 && !timeWarningGiven) {
timeWarningGiven = true;
timerText.setStyle({
fill: 0xE74C3C
});
LK.getSound('timewarning').play();
}
// Game over if time runs out
if (timeLeft <= 0) {
gameOver();
}
}
// Game won
function gameWon() {
LK.clearInterval(gameTimer);
gameActive = false;
// Add time bonus
var timeBonus = timeLeft * 10;
LK.setScore(LK.getScore() + timeBonus);
scoreText.setText(LK.getScore());
// Update high score
if (LK.getScore() > storage.highScore) {
storage.highScore = LK.getScore();
}
// Update level
level++;
if (level > 5) {
level = 1; // Reset to level 1 after level 5
}
storage.currentLevel = level;
// Play win sound
LK.getSound('win').play();
// Show success message
LK.showYouWin();
}
// Game over
function gameOver() {
LK.clearInterval(gameTimer);
gameActive = false;
// Show game over screen
LK.showGameOver();
}
// Start a new game
function startGame() {
// Reset game state
matchedPairs = 0;
flippedCards = [];
timeWarningGiven = false;
LK.setScore(0);
scoreText.setText("0");
// Clear previous game
for (var i = 0; i < cards.length; i++) {
cards[i].destroy();
}
cards = [];
// Set up new game
setDifficulty();
createSymbols();
createBoard();
// Reset timer
timerText.setText("Time: " + timeLeft);
timerText.setStyle({
fill: 0xFFFFFF
});
// Start timer
if (gameTimer) {
LK.clearInterval(gameTimer);
}
gameTimer = LK.setInterval(updateTimer, 1000);
// Start game
gameActive = true;
// Play background music
LK.playMusic('bgmusic', {
fade: {
start: 0,
end: 0.3,
duration: 1000
}
});
}
// Create UI elements
var titleText = new Text2("Crazy Card Match", {
size: 80,
fill: 0x000000
});
titleText.anchor.set(0.5, 0);
LK.gui.top.addChild(titleText);
titleText.y = 50;
var scoreText = new Text2("0", {
size: 60,
fill: 0x000000
});
scoreText.anchor.set(1, 0);
LK.gui.topRight.addChild(scoreText);
scoreText.x = -10;
scoreText.y = 50;
var timerText = new Text2("Time: 60", {
size: 60,
fill: 0x000000
});
timerText.anchor.set(0.5, 1);
LK.gui.bottom.addChild(timerText);
timerText.y = -10;
var levelText = new Text2("Level: " + level, {
size: 60,
fill: 0x000000
});
levelText.anchor.set(0.5, 1);
LK.gui.bottom.addChild(levelText);
levelText.y = -100;
// Start the game
LK.setTimeout(function () {
startGame();
}, 500);
// Main game update loop
game.update = function () {
// Update level text (in case level changes)
levelText.setText("Level: " + level);
};
sheep. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
generate a cute cat image. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
generate a elephant. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
generate a monkey. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
lion. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
a colorful parrot. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
generate a butterfly. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
dolphin. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows