From 93bad3863a7774f3d3641047828415cc97777be7 Mon Sep 17 00:00:00 2001 From: Milo Date: Thu, 24 Jul 2025 14:10:16 +0200 Subject: [PATCH] improved solitaire --- game.js | 25 ++++++++++++++++++------- index.js | 1 + 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/game.js b/game.js index 29b8165..f49f667 100644 --- a/game.js +++ b/game.js @@ -395,6 +395,7 @@ export function deal(deck) { foundationPiles: [[], [], [], []], stockPile: [], wastePile: [], + isDone: false, }; // Deal cards to the tableau piles @@ -433,6 +434,8 @@ export function isValidMove(gameState, moveData) { sourcePile = gameState.tableauPiles[sourcePileIndex]; } else if (sourcePileType === 'wastePile') { sourcePile = gameState.wastePile; + } else if (sourcePileType === 'foundationPiles') { + sourcePile = gameState.foundationPiles[sourcePileIndex]; } else { return false; // Cannot drag from foundation or stock } @@ -466,7 +469,7 @@ export function isValidMove(gameState, moveData) { } // --- Validate move TO a Foundation Pile --- - if (destPileType === 'foundationPiles') { + if (destPileType === 'foundationPiles' && sourcePileType !== 'foundationPiles') { // You can only move one card at a time to a foundation pile. const stackBeingMoved = sourcePile.slice(sourceCardIndex); if (stackBeingMoved.length > 1) { @@ -543,14 +546,22 @@ export function moveCard(gameState, moveData) { const { sourcePileType, sourcePileIndex, sourceCardIndex, destPileType, destPileIndex } = moveData; // Identify the source pile array - const sourcePile = sourcePileType === 'tableauPiles' - ? gameState.tableauPiles[sourcePileIndex] - : gameState.wastePile; + let sourcePile; + if (sourcePileType === 'tableauPiles') { + sourcePile = gameState.tableauPiles[sourcePileIndex]; + } else if (sourcePileType === 'wastePile') { + sourcePile = gameState.wastePile; + } else if (sourcePileType === 'foundationPiles') { + sourcePile = gameState.foundationPiles[sourcePileIndex]; + } // Identify the destination pile array - const destPile = destPileType === 'tableauPiles' - ? gameState.tableauPiles[destPileIndex] - : gameState.foundationPiles[destPileIndex]; + let destPile; + if (destPileType === 'tableauPiles') { + destPile = gameState.tableauPiles[destPileIndex]; + } else { + destPile = gameState.foundationPiles[destPileIndex]; + } // Using splice(), cut the entire stack of cards to be moved from the source pile. const cardsToMove = sourcePile.splice(sourceCardIndex); diff --git a/index.js b/index.js index 3cb0ebf..3db1de4 100644 --- a/index.js +++ b/index.js @@ -4503,6 +4503,7 @@ app.post('/solitaire/move', (req, res) => { // If valid, mutate the state moveCard(gameState, req.body); const win = checkWinCondition(gameState); + if (win) gameState.isDone = true res.json({ success: true, gameState, win }); } else { // If the move is invalid, send a specific error message