User prompt
when the first mini card spawns, add 1 before that will be the current card from the game start.
User prompt
add current card as the first mini card on game start. however hide it until the first swipe happens
User prompt
card positions should not be updated multiples times per tick. only once.
User prompt
remove tick event listeners after they have been used once
User prompt
remove movecard function from tick event after the card has reached its destination to prevent creating multiple instances of movecard.
User prompt
on tick re set speed of cards to 50
User prompt
if player swipes down and the new card is lower than the current one, then show correct and add a score. also if swipe is up and new card is higher.
User prompt
fix logic for correct or wrong
User prompt
Fix Bug: 'TypeError: Cannot read properties of null (reading 'value')' in this line: 'console.log('Current Card:', 'Value:', currentCard.value, 'Suit:', currentCard.suit);' Line Number: 258
User prompt
Fix Bug: 'TypeError: Cannot read properties of null (reading 'value')' in this line: 'var correctGuess = guess === 'higher' && nextCard.value >= currentCard.value || guess === 'lower' && nextCard.value <= currentCard.value;' Line Number: 247
User prompt
fix unitiended speed increase on cards due to listenenres in tick envet
User prompt
reset event listener after their execution
Code edit (1 edits merged)
Please save this source code
User prompt
var speed = 50 should be constant
Code edit (1 edits merged)
Please save this source code
User prompt
define the card speed outside of the tick event
User prompt
swipes should not increase the speed of the cards
User prompt
remove movecard and movecardleft from the `tick` event after the card has reached its destination
User prompt
update the speed of cards that come into the screen to be constant. make sure the game logic is not affected.
User prompt
Fix Bug: 'Timeout.tick error: Cannot set properties of null (setting 'x')' in this line: 'currentCard.x = 2048 / 2;' Line Number: 290
User prompt
next card value should be known as soon as the current card is destroyed
User prompt
console log suit of the next card
User prompt
The speed of the cards incoming the screen should not increase progressively. it should be constabt.
User prompt
make sure the messagedisplay usees the fill color from the correct! or wrong!
User prompt
Correct! and Wrong! messages should have different colors from each other
/**** * Classes ****/ var StartMessageDisplay = Container.expand(function () { var self = Container.call(this); var background = self.createAsset('start_message_background', 'Start Message Background', 0.5, 0.5); background.x = 1024 + 500; background.y = 1266; self.addChildAt(background, 0); var messageText = new Text2(' Swipe Up\n for Higher!\n\n or\n\n Swipe Down\n for Lower!', { size: 100, fill: '#0000000', stroke: '#000000', strokeThickness: 0, anchor: { x: 0.5, y: 0 } }); self.addChild(messageText); messageText.y = 800; messageText.x = 1150; self.showMessage = function (message) { messageText.setText(message); messageText.x = 2000; self.addChild(messageText); LK.setTimeout(function () { messageText.setText(''); }, 2000); }; }); var MessageDisplay = Container.expand(function () { var self = Container.call(this); var messageText = new Text2('', { size: 150, fill: '#ffffff', stroke: '#000000', strokeThickness: 8, anchor: { x: 0.5, y: 0 } }); self.addChild(messageText); messageText.y = 550 - messageText.height; self.showMessage = function (message) { messageText.setText(message); messageText.x = 2048 / 2 - messageText.width / 2; self.addChild(messageText); LK.setTimeout(function () { messageText.setText(''); }, 2000); }; }); var Card = Container.expand(function () { var self = Container.call(this); self.setSuit = function (suit) { self.suit = suit; var suitAsset = self.createAsset('suit_' + suit, 'Suit Asset', 0.5, 0.5); suitAsset.x = 0; suitAsset.y = 0; self.addChild(suitAsset); }; var cardGraphics = self.createAsset('card', 'Card Graphics', 0.5, 0.5); cardGraphics.anchor.set(0.5, 0.5); var valueText = new Text2('', { size: 120, fill: '#000000', font: 'bold', anchor: { x: 0, y: 0 } }); valueText.anchor.set(0, 0); valueText.x = -cardGraphics.width / 2 + 50; valueText.y = -cardGraphics.height / 2 + 30; var valueText2 = new Text2('', { size: 120, fill: '#000000', font: 'bold', anchor: { x: 1, y: 1 } }); valueText2.anchor.set(0, 0); valueText2.x = cardGraphics.width / 2 - 50; valueText2.y = cardGraphics.height / 2 - 30; valueText2.scale.y = -1; valueText2.scale.x = -1; self.addChild(valueText2); self.setValue = function (value) { self.value = value; valueText.setText(value.toString()); valueText2.setText(value.toString()); }; self.addChild(valueText); self.addChild(valueText2); var suitText = new Text2('', { size: 120, fill: '#000000', anchor: { x: 0.5, y: 1 } }); suitText.y = 0; self.addChild(suitText); self.setValue = function (value) { self.value = value; var displayValue = value; if (value === 11) { displayValue = 'J'; } else if (value === 12) { displayValue = 'Q'; } else if (value === 13) { displayValue = 'K'; } else if (value === 1) { displayValue = 'A'; } valueText.setText(displayValue.toString()); valueText2.setText(displayValue.toString()); }; self.value = 0; }); var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.createAsset('player', 'Player Graphics', .5, .5); self.score = 0; self.updateScore = function (score) { self.score = score; }; }); var MiniCard = Container.expand(function () { var self = Container.call(this); self.setSuit = function (suit) { self.suit = suit; var suitAsset = self.createAsset('suit_' + suit, 'Mini Suit Asset', 0.5, 0.5); suitAsset.scale.x = 0.125; suitAsset.scale.y = 0.125; suitAsset.x = 0; suitAsset.y = 0; self.addChild(suitAsset); }; var cardGraphics = self.createAsset('card', 'Mini Card Graphics', 0.5, 0.5); cardGraphics.scale.x = 0.125; cardGraphics.scale.y = 0.125; cardGraphics.anchor.set(0.5, 0.5); var valueText = new Text2('', { size: 60, fill: '#000000', font: 'bold', anchor: { x: 0, y: 0 } }); valueText.anchor.set(0, 0); valueText.x = -cardGraphics.width / 16 + 6.25; valueText.y = -cardGraphics.height / 16 + 3.75; self.addChild(valueText); self.setValue = function (value) { self.value = value; var displayValue = value; if (value === 11) { displayValue = 'J'; } else if (value === 12) { displayValue = 'Q'; } else if (value === 13) { displayValue = 'K'; } else if (value === 1) { displayValue = 'A'; } valueText.setText(displayValue.toString()); }; self.value = 0; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ var player = new Player(); var background = game.createAsset('background', 'Background Asset', 0.5, 0.5); background.x = 2048 / 2; background.y = 2732 / 2; game.addChild(background); var canSwipe = true; game.on('up', function (obj) { if (!canSwipe) { return; } canSwipe = false; LK.setTimeout(function () { canSwipe = true; }, 1500); var endY = obj.event.getLocalPosition(game).y; if (startY === null || endY === null) { return; } var swipeDirection = startY - endY; var guess = swipeDirection > 0 ? 'higher' : 'lower'; if (deck.length === 0) { LK.showGameOver(); return; } nextCard = deck.pop(); if (!nextCard) { return; } // Decrease the cards left counter cardsLeftTxt.setText('Left: ' + deck.length); if (startMessageDisplay) { startMessageDisplay.destroy(); startMessageDisplay = null; } console.log('Next Card:', 'Value:', nextCard.value, 'Suit:', nextCard.suit); game.addChild(nextCard); nextCard.x = 2048 / 2 + 500; nextCard.y = swipeDirection > 0 ? 2732 + nextCard.height - 100 : -nextCard.height - 100; var speed = 50; LK.on('tick', function () { if (nextCard) { if (swipeDirection > 0 && nextCard.y > 2732 / 2 - 100) { nextCard.y -= speed; } else if (swipeDirection < 0 && nextCard.y < 2732 / 2 - 100) { nextCard.y += speed; } } }); if (game.messageDisplay) { game.messageDisplay.destroy(); } game.messageDisplay = game.addChild(new MessageDisplay()); var correctGuess = guess === 'higher' && nextCard.value >= currentCard.value || guess === 'lower' && nextCard.value <= currentCard.value; LK.setTimeout(function () { if (correctGuess) { player.updateScore(player.score + 1); game.updateScoreDisplay(player.score); LK.setScore(player.score); game.messageDisplay.showMessage('Correct!'); } else { game.messageDisplay.showMessage('Wrong!'); } }, 1000); console.log('Current Card:', 'Value:', currentCard.value, 'Suit:', currentCard.suit); LK.on('tick', function moveCard() { if (Math.abs(nextCard.y - 2732 / 2 + 100) <= 20) { LK.setTimeout(function () { LK.on('tick', function moveCardLeft() { if (currentCard && currentCard.x > 2048 / 2 - 500) { currentCard.x -= 20; } else if (currentCard) { if (!game.initialMiniCardAdded) { var initialMiniCard = new MiniCard(); initialMiniCard.setValue(game.initialCard.value); initialMiniCard.setSuit(game.initialCard.suit); initialMiniCard.x = 110; initialMiniCard.y = 2732 - initialMiniCard.height - 550; game.addChild(initialMiniCard); game.miniCardX = initialMiniCard.x + initialMiniCard.width + 20; game.initialMiniCardAdded = true; } var miniCard = new MiniCard(); miniCard.setValue(currentCard.value); miniCard.setSuit(currentCard.suit); miniCard.x = (game.miniCardX || 110) + miniCard.width / 6; miniCard.y = 2732 - miniCard.height - 550 - (game.miniCardYOffset || 0); game.addChild(miniCard); game.miniCardCount = (game.miniCardCount || 0) + 1; if (game.miniCardCount % 13 === 0) { game.miniCardX = 110; game.miniCardYOffset = (game.miniCardYOffset || 0) - 200; } else { game.miniCardX = miniCard.x + miniCard.width + 20; } LK.off('tick', moveCardLeft); } }); currentCard = nextCard; nextCard = null; startY = null; currentCard.x = 2048 / 2; currentCard.y = 2732 / 2 - 100; }, 500); LK.off('tick', moveCard); } }); }); var scoreTxt = new Text2('0', { size: 112, fill: "#ffffff", stroke: '#000000', strokeThickness: 8, anchor: { x: .5, y: .5 } }); var cardsLeftTxt = new Text2('Left: 51', { size: 112, fill: "#ffffff", stroke: '#000000', strokeThickness: 8, anchor: { x: 0, y: .5 } }); scoreTxt.y = 50; scoreTxt.x = -1340; cardsLeftTxt.x = scoreTxt.x + scoreTxt.width + 800; cardsLeftTxt.y = 50; LK.gui.topRight.addChild(scoreTxt); LK.gui.topRight.addChild(cardsLeftTxt); game.updateScoreDisplay = function (score) { scoreTxt.setText('Score: ' + score.toString()); }; game.updateScoreDisplay(0); var startMessageDisplay = new StartMessageDisplay(); game.addChild(startMessageDisplay); var deck = []; var currentCard = null; var nextCard = null; var suits = ['hearts', 'diamonds', 'clubs', 'spades']; for (var s = 0; s < suits.length; s++) { for (var i = 1; i <= 13; i++) { var card = new Card(); card.setValue(i); card.setSuit(suits[s]); deck.push(card); } } deck.sort(function () { return 0.5 - Math.random(); }); game.initialCard = deck[Math.floor(Math.random() * deck.length)]; console.log('First Card:', 'Value:', game.initialCard.value, 'Suit:', game.initialCard.suit); var index = deck.indexOf(game.initialCard); deck.splice(index, 1); game.addChild(game.initialCard); game.initialCard.x = 2048 / 2 - 500; game.initialCard.y = 2732 / 2 - 100; currentCard = game.initialCard; // Update the cards left counter cardsLeftTxt.setText('Left: ' + deck.length); var startY = null; game.on('down', function (obj) { startY = obj.event.getLocalPosition(game).y; });
===================================================================
--- original.js
+++ change.js
@@ -220,13 +220,8 @@
if (startMessageDisplay) {
startMessageDisplay.destroy();
startMessageDisplay = null;
}
-
- // Unhide the first mini card after the first swipe
- if (game.firstMiniCard) {
- game.firstMiniCard.visible = true;
- }
console.log('Next Card:', 'Value:', nextCard.value, 'Suit:', nextCard.suit);
game.addChild(nextCard);
nextCard.x = 2048 / 2 + 500;
nextCard.y = swipeDirection > 0 ? 2732 + nextCard.height - 100 : -nextCard.height - 100;
@@ -262,8 +257,18 @@
LK.on('tick', function moveCardLeft() {
if (currentCard && currentCard.x > 2048 / 2 - 500) {
currentCard.x -= 20;
} else if (currentCard) {
+ if (!game.initialMiniCardAdded) {
+ var initialMiniCard = new MiniCard();
+ initialMiniCard.setValue(game.initialCard.value);
+ initialMiniCard.setSuit(game.initialCard.suit);
+ initialMiniCard.x = 110;
+ initialMiniCard.y = 2732 - initialMiniCard.height - 550;
+ game.addChild(initialMiniCard);
+ game.miniCardX = initialMiniCard.x + initialMiniCard.width + 20;
+ game.initialMiniCardAdded = true;
+ }
var miniCard = new MiniCard();
miniCard.setValue(currentCard.value);
miniCard.setSuit(currentCard.suit);
miniCard.x = (game.miniCardX || 110) + miniCard.width / 6;
@@ -335,27 +340,18 @@
}
deck.sort(function () {
return 0.5 - Math.random();
});
-currentCard = deck[Math.floor(Math.random() * deck.length)];
-console.log('First Card:', 'Value:', currentCard.value, 'Suit:', currentCard.suit);
-var index = deck.indexOf(currentCard);
+game.initialCard = deck[Math.floor(Math.random() * deck.length)];
+console.log('First Card:', 'Value:', game.initialCard.value, 'Suit:', game.initialCard.suit);
+var index = deck.indexOf(game.initialCard);
deck.splice(index, 1);
-
+game.addChild(game.initialCard);
+game.initialCard.x = 2048 / 2 - 500;
+game.initialCard.y = 2732 / 2 - 100;
+currentCard = game.initialCard;
// Update the cards left counter
cardsLeftTxt.setText('Left: ' + deck.length);
-
-// Create the first mini card for the current card but keep it hidden
-var firstMiniCard = new MiniCard();
-firstMiniCard.setValue(currentCard.value);
-firstMiniCard.setSuit(currentCard.suit);
-firstMiniCard.x = 110;
-firstMiniCard.y = 2732 - firstMiniCard.height - 550;
-firstMiniCard.visible = false; // Hide the mini card initially
-game.addChild(firstMiniCard);
-
-// Store the first mini card in the game object for later reference
-game.firstMiniCard = firstMiniCard;
var startY = null;
game.on('down', function (obj) {
startY = obj.event.getLocalPosition(game).y;
});
\ No newline at end of file
Green casino baize. To be used as background. No shade. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
white rectangle flat. rounded corners. no background. no shadow. card shape.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.