User prompt
Süreyi 200 saniye yapar mısın
User prompt
Moves Yerine Hamle yazsın. Time yerine Zaman yazsın. Matches yerine Eşleşme yazsın
User prompt
kartların rengi kırmızı olsun
User prompt
arka plan siyah olsun
User prompt
arka planı koyu ama açığa doğru gradian bir geçiş olsun istiyorum
User prompt
arka planın fotoğrafını değiştirmek istiyorum
User prompt
arka planı modern ui olsun
Remix started
Copy Meme Memory Match Challenge
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Card = Container.expand(function (cardValue) { var self = Container.call(this); self.cardValue = cardValue; self.isFlipped = false; self.isMatched = false; // Create card back (visible when card is face down) var back = self.back = self.attachAsset('cardBack', { anchorX: 0.5, anchorY: 0.5, x: 0, y: 0 }); // Create card front (visible when card is face up) var front = self.front = self.attachAsset('cardFront', { anchorX: 0.5, anchorY: 0.5, x: 0, y: 0, visible: false }); // Create image to display card var cardImage = self.cardImage = self.attachAsset('card' + cardValue, { anchorX: 0.5, anchorY: 0.5, visible: false, width: 200, // Match card width height: 200 // Match card height }); cardImage.x = 0; cardImage.y = 0; // Method to flip card face up self.flipUp = function () { if (self.isFlipped || self.isMatched) { return; } self.isFlipped = true; // Animate card flipping with a scale effect tween(self, { scaleX: 0 }, { duration: 150, easing: tween.easeOut, onFinish: function onFinish() { back.visible = false; front.visible = true; cardImage.visible = true; tween(self, { scaleX: 1 }, { duration: 150, easing: tween.easeOut }); } }); LK.getSound('flip').play(); }; // Method to flip card face down self.flipDown = function () { if (!self.isFlipped || self.isMatched) { return; } self.isFlipped = false; // Animate card flipping with a scale effect tween(self, { scaleX: 0 }, { duration: 150, easing: tween.easeOut, onFinish: function onFinish() { back.visible = true; front.visible = false; cardImage.visible = false; tween(self, { scaleX: 1 }, { duration: 150, easing: tween.easeOut }); } }); }; // Method to mark card as matched self.markAsMatched = function () { self.isMatched = true; // Change the card appearance to indicate it's matched tween(front, { tint: 0x2ecc71 }, { duration: 300, easing: tween.easeOut }); }; // Event handlers self.down = function (x, y, obj) { if (!gameActive || isProcessingMatch || self.isMatched) { return; } if (!self.isFlipped) { self.flipUp(); checkForMatch(self); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ // Initialize 18 different card face images (for 36 cards in a 6x6 grid) // Game configuration // Videos removed var rows = 6; var cols = 6; var cardWidth = 200; var cardHeight = 200; var cardPadding = 10; var boardWidth = cols * (cardWidth + cardPadding) - cardPadding; var boardHeight = rows * (cardHeight + cardPadding) - cardPadding; // Game state variables var cards = []; var firstCard = null; var secondCard = null; var isProcessingMatch = false; var gameActive = false; var moveCount = 0; var matchedPairs = 0; var totalPairs = rows * cols / 2; var gameTimer = null; var timeRemaining = 100; // 100 seconds var winImageContainer = null; var failImageContainer = null; // Create the UI text elements var movesText = new Text2('Hamle: 0', { size: 75, fill: 0xFFFFFF }); movesText.anchor.set(0, 0); LK.gui.topLeft.addChild(movesText); movesText.x = 120; movesText.y = 20; var matchesText = new Text2('Eşleşme: 0 / ' + totalPairs, { size: 75, fill: 0xFFFFFF }); matchesText.anchor.set(1, 0); LK.gui.topRight.addChild(matchesText); matchesText.x = -20; matchesText.y = 20; // Add timer text in the top center var timerText = new Text2('Zaman: 100', { size: 75, fill: 0xFFFFFF }); timerText.anchor.set(0.5, 0); LK.gui.top.addChild(timerText); timerText.y = 20; // Game board container to position the entire grid in the center var boardContainer = new Container(); game.addChild(boardContainer); // Calculate the board scale to fit the screen with a closer view var boardScale = Math.min(2000 / boardWidth, 2600 / boardHeight); boardContainer.scale.set(boardScale, boardScale); // Position the scaled board container in the center of the screen boardContainer.x = (2048 - boardWidth * boardScale) / 2; boardContainer.y = (2732 - boardHeight * boardScale) / 2; // Function to update the UI function updateUI() { movesText.setText('Hamle: ' + moveCount); matchesText.setText('Eşleşme: ' + matchedPairs + ' / ' + totalPairs); timerText.setText('Zaman: ' + timeRemaining); } // Function to create all the card values (pairs) function createCardValues() { var values = []; var pairsNeeded = rows * cols / 2; for (var i = 1; i <= pairsNeeded; i++) { values.push(i); values.push(i); } // Shuffle the values for (var i = values.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = values[i]; values[i] = values[j]; values[j] = temp; } return values; } // Function to initialize the game board function initializeGame() { // Clear existing cards if any if (cards.length > 0) { for (var i = 0; i < cards.length; i++) { boardContainer.removeChild(cards[i]); } cards = []; } // Reset game state firstCard = null; secondCard = null; isProcessingMatch = false; gameActive = true; moveCount = 0; matchedPairs = 0; timeRemaining = 100; // Remove win image if it exists if (winImageContainer) { game.removeChild(winImageContainer); winImageContainer = null; } // Remove fail image if it exists if (failImageContainer) { game.removeChild(failImageContainer); failImageContainer = null; } // Clear any existing timer if (gameTimer) { LK.clearInterval(gameTimer); } // Start the timer gameTimer = LK.setInterval(function () { if (timeRemaining > 0) { timeRemaining--; updateUI(); // Game over when time runs out if (timeRemaining === 0) { gameActive = false; // Create and display fail image failImageContainer = new Container(); game.addChild(failImageContainer); // Background overlay var failOverlay = new Container(); var failOverlayBg = LK.getAsset('cardBack', { anchorX: 0, anchorY: 0, width: 2048, height: 2732, tint: 0x000000 }); failOverlayBg.alpha = 0.8; failOverlay.addChild(failOverlayBg); failImageContainer.addChild(failOverlay); // Add the fail image var failImage = LK.getAsset('failImage', { anchorX: 0.5, anchorY: 0.5 }); failImage.x = 2048 / 2; failImage.y = 2732 / 2; failImageContainer.addChild(failImage); // Play sound C when time runs out and fail image is shown LK.getSound('C').play(); // Animate the fail image appearing failImage.alpha = 0; tween(failImage, { alpha: 1 }, { duration: 1000, easing: tween.easeOut }); // Show game over after showing the image for 3 seconds LK.setTimeout(function () { // Show game over directly without video LK.showGameOver(); }, 3000); } } }, 1000); // Create card values (1-32 pairs) var cardValues = createCardValues(); // Create and position all cards var index = 0; for (var row = 0; row < rows; row++) { for (var col = 0; col < cols; col++) { var card = new Card(cardValues[index]); // Position card in grid card.x = col * (cardWidth + cardPadding) + cardWidth / 2; card.y = row * (cardHeight + cardPadding) + cardHeight / 2; boardContainer.addChild(card); cards.push(card); index++; } } // Update UI to show initial state updateUI(); // Start background music LK.playMusic('bgmusic'); } // Check if the flipped card creates a match function checkForMatch(card) { if (!firstCard) { // This is the first card flipped firstCard = card; } else if (firstCard !== card && !secondCard) { // This is the second card flipped secondCard = card; moveCount++; updateUI(); // Process the match isProcessingMatch = true; if (firstCard.cardValue === secondCard.cardValue) { // Cards match LK.getSound('E').play(); matchedPairs++; updateUI(); firstCard.markAsMatched(); secondCard.markAsMatched(); // Reset for next pair LK.setTimeout(function () { firstCard = null; secondCard = null; isProcessingMatch = false; // Check if all pairs have been matched if (matchedPairs === totalPairs) { LK.setTimeout(function () { // Clear the timer if (gameTimer) { LK.clearInterval(gameTimer); } // Set score LK.setScore(moveCount); // Create and display the win image if there's still time remaining if (timeRemaining > 0) { // Play sound B when all cards are matched and win image is shown LK.getSound('B').play(); // Create win image container winImageContainer = new Container(); game.addChild(winImageContainer); // Background overlay var overlay = new Container(); var overlayBg = LK.getAsset('cardBack', { anchorX: 0, anchorY: 0, width: 2048, height: 2732, tint: 0x000000 }); overlayBg.alpha = 0.8; overlay.addChild(overlayBg); winImageContainer.addChild(overlay); // Add the win image var winImage = LK.getAsset('winImage', { anchorX: 0.5, anchorY: 0.5 }); winImage.x = 2048 / 2; winImage.y = 2732 / 2; winImageContainer.addChild(winImage); // Animate the win image appearing winImage.alpha = 0; tween(winImage, { alpha: 1 }, { duration: 1000, easing: tween.easeOut }); // Show win screen after showing the image for 3 seconds LK.setTimeout(function () { LK.showYouWin(); }, 3000); } else { // If time ran out, just show the win screen directly LK.showYouWin(); } }, 500); } }, 500); } else { // Cards don't match LK.getSound('nomatch').play(); // Flip both cards back after a short delay LK.setTimeout(function () { firstCard.flipDown(); secondCard.flipDown(); // Reset for next attempt firstCard = null; secondCard = null; isProcessingMatch = false; }, 1000); } } } // Initialize the game initializeGame(); // Game update loop game.update = function () { // This game doesn't need any per-frame updates // All logic is handled by event callbacks }; // Handle moves on the game game.move = function (x, y, obj) { // We don't need move handling for this game };
===================================================================
--- original.js
+++ change.js
@@ -146,26 +146,26 @@
var timeRemaining = 100; // 100 seconds
var winImageContainer = null;
var failImageContainer = null;
// Create the UI text elements
-var movesText = new Text2('Moves: 0', {
+var movesText = new Text2('Hamle: 0', {
size: 75,
fill: 0xFFFFFF
});
movesText.anchor.set(0, 0);
LK.gui.topLeft.addChild(movesText);
movesText.x = 120;
movesText.y = 20;
-var matchesText = new Text2('Matches: 0 / ' + totalPairs, {
+var matchesText = new Text2('Eşleşme: 0 / ' + totalPairs, {
size: 75,
fill: 0xFFFFFF
});
matchesText.anchor.set(1, 0);
LK.gui.topRight.addChild(matchesText);
matchesText.x = -20;
matchesText.y = 20;
// Add timer text in the top center
-var timerText = new Text2('Time: 100', {
+var timerText = new Text2('Zaman: 100', {
size: 75,
fill: 0xFFFFFF
});
timerText.anchor.set(0.5, 0);
@@ -181,11 +181,11 @@
boardContainer.x = (2048 - boardWidth * boardScale) / 2;
boardContainer.y = (2732 - boardHeight * boardScale) / 2;
// Function to update the UI
function updateUI() {
- movesText.setText('Moves: ' + moveCount);
- matchesText.setText('Matches: ' + matchedPairs + ' / ' + totalPairs);
- timerText.setText('Time: ' + timeRemaining);
+ movesText.setText('Hamle: ' + moveCount);
+ matchesText.setText('Eşleşme: ' + matchedPairs + ' / ' + totalPairs);
+ timerText.setText('Zaman: ' + timeRemaining);
}
// Function to create all the card values (pairs)
function createCardValues() {
var values = [];