diff --git a/Input.js b/Input.js index f2b5937..ed5ee9f 100644 --- a/Input.js +++ b/Input.js @@ -1370,6 +1370,11 @@ function handleStragedyShopStep(text) { } function doStragedy(command) { + var arg0 = getArgument(command, 0) + if (arg0 == null) { + arg0 = "easy" + } + var character = getCharacter() state.stragedyTurn = "intro" state.show = "stragedy" @@ -1394,12 +1399,30 @@ function doStragedy(command) { shuffle(state.stragedyPlayerDeck) state.stragedyPlayerDeck.splice(20) state.stragedyPlayerDiscard = [] - state.stragedyPlayerRetire = false + state.stragedyPlayerRetired = false state.stragedyEnemyScore = 0 state.stragedyEnemyHand = [] state.stragedyEnemyBattlefield = [] - state.stragedyEnemyDeck = ["5", "6", "7", "8", "a", "a", "9", "9", "10", "5", "5", "5", "2", "3", "4", "6", "7", "8", "9", "10"] + + switch(arg0) { + case "impossible": + state.stragedyEnemyDeck = ["?", "?", "a", "q", "q", "k", "k", "w", "p", "2", "3", "4", "5", "6", "7", "7", "8", "10", "10", "10"] + case "hard": + state.stragedyEnemyDeck = ["j", "?", "a", "q", "q", "k", "k", "2", "3", "4", "5", "5", "6", "6", "7", "7", "8", "8", "10", "10"] + case "medium": + state.stragedyEnemyDeck = ["j", "j", "a", "q", "q", "k", "k", "2", "3", "4", "5", "5", "6", "6", "7", "7", "8", "8", "9", "10"] + break + case "very easy": + state.stragedyEnemyDeck = ["2", "2", "2", "3", "3", "3", "4", "4", "4", "5", "5", "5", "6", "6", "6", "7", "7", "8", "8", "9"] + case "automatic": + state.stragedyEnemyDeck = ["2", "2", "2", "3", "3", "3", "4", "4", "4", "5", "5", "5", "6", "6", "6", "6", "7", "7", "7", "7"] + case "easy": + default: + state.stragedyEnemyDeck = ["j", "j", "a", "a", "2", "2", "3", "3", "4", "4", "5", "5", "6", "6", "7", "7", "8", "8", "9", "9"] + break + } + shuffle(state.stragedyEnemyDeck) state.stragedyEnemyDiscard = [] state.stragedyEnemySkipTurn = getRandomBoolean(.5) @@ -1451,7 +1474,7 @@ function handleStragedyTurn(text) { stragedyCalculateScores() if (!state.stragedyEnemySkipTurn) stragedyEnemyTurn() } - return "You deal the cards." + return `You deal the cards. ${state.stragedyEnemySkipTurn ? "You go first." : "The opponent goes first."}` case "game": return stragedyPlayerTurn(text) case "gameOver": @@ -1470,6 +1493,8 @@ function doAddCard(command) { } arg0 = arg0.toLowerCase() + if (arg0.startsWith("w")) arg0 = "w" + if (arg0.startsWith("b")) arg0 = "b" switch(arg0) { case "a": case "ace": diff --git a/Library.js b/Library.js index 40e826b..1d98ec6 100644 --- a/Library.js +++ b/Library.js @@ -2939,6 +2939,7 @@ function stragedyCalculateScores() { } function stragedyEnemyTurn() { + log(`enemy turn: ${state.stragedyEnemyHand}`) state.stragedyEnemySkipTurn = false state.stragedyEnemyTurnText = "" if (state.stragedyPlayerScore > 30) { @@ -3010,7 +3011,7 @@ function stragedyEnemyTurn() { var hasJack = hand.filter(x => /^.*j.*$/gi.test(x)).length > 0 var hasQueen = hand.filter(x => /^.*q.*$/gi.test(x)).length > 0 var hasKing = hand.filter(x => /^.*k.*$/gi.test(x)).length > 0 - var hasJoker = hand.filter(x => /^.*?.*$/gi.test(x)).length > 0 + var hasJoker = hand.filter(x => /^.*\?.*$/gi.test(x)).length > 0 var hasWitch = hand.filter(x => /^.*w.*$/gi.test(x)).length > 0 var hasPriest = hand.filter(x => /^.*p.*$/gi.test(x)).length > 0 var hasBrigand = hand.filter(x => /^.*b.*$/gi.test(x)).length > 0 @@ -3066,52 +3067,59 @@ function stragedyEnemyTurn() { } } - state.stragedyEnemyTurnText = stragedyEnemyRandom() - - // if (hand.length == 0) { - // if (deck.length == 0) state.stragedyEnemyTurnText = stragedyEnemyRetire() - // else state.stragedyEnemyTurnText = stragedyEnemyDrawCard() - // } else if (playerRetired && score < playerScore) { - // if (hasJoker) { - // state.stragedyEnemyTurnText = stragedyPlayCard(false, lowestNumberedBattlefieldCard) - // } else if (hasQueen && highestNumberedBattlefieldCard != null) { - // state.stragedyEnemyTurnText = stragedyPlayCard(false, "q" + highestNumberedBattlefieldCard) - // } else if (hasAce && bestAceNumber != null) { - // state.stragedyEnemyTurnText = stragedyPlayCard(false, "a" + bestAceNumber) - // } else if (hasKing && bestKingCard != null) { - // state.stragedyEnemyTurnText = stragedyPlayCard(false, "k" + bestKingCard) - // } else { - // state.stragedyEnemyTurnText = stragedyEnemyRandom() - // } - // } else if (playerRetired && score > playerScore) { - // state.stragedyEnemyTurnText = stragedyEnemyRetire() - // } else if (playerRetired && score == playerScore) { - // if (highestNumberedHandCardAddUpTo30 != null) state.stragedyEnemyTurnText = stragedyPlayCard(false, highestNumberedHandCardAddUpTo30) - // else state.stragedyEnemyTurnText = stragedyEnemyRetire() - // } else if (score - playerScore > 20) { - // state.stragedyEnemyTurnText = stragedyEnemyRetire() - // } else if (hasNumberedCards && score < playerScore) { - // if (score < 20) state.stragedyEnemyTurnText = stragedyPlayCard(false, highestNumberedHandCardAddUpTo20) - // else state.stragedyEnemyTurnText = stragedyPlayCard(false, highestNumberedHandCard) - // } else if (score > 30 && battlefield.length > 0) { - // if (hasQueen && highestNumberedBattlefieldCard != null) { - // state.stragedyEnemyTurnText = stragedyPlayCard(false, "q" + highestNumberedBattlefieldCard) - // } else if (hasPriest && highestNumberedBattlefieldCard != null) { - // state.stragedyEnemyTurnText = stragedyPlayCard(false, "p" + highestNumberedBattlefieldCard) - // } else if (hasJack && highestNumberedBattlefieldCardSubtractDownTo30 != null) { - // state.stragedyEnemyTurnText = stragedyPlayCard(false, "j" + highestNumberedBattlefieldCardSubtractDownTo30) - // } else if (hasAce && bestAceNumber != null) { - // state.stragedyEnemyTurnText = stragedyPlayCard(false, "a" + bestAceNumber) - // } else if (kingCards.length > 0 && kingNumberedCardsInHand.length > 0) { - // state.stragedyEnemyTurnText = stragedyPlayCard(false, kingNumberedCardsInHand[kingNumberedCardsInHand.length - 1]) - // } else { - // state.stragedyEnemyTurnText = stragedyEnemyRetire() - // } - // } else if (highestNumberedHandCardAddUpTo20 == null && hand.length > 0) { - // state.stragedyEnemyTurnText = stragedyEnemyDiscardCard() - // } else { - // state.stragedyEnemyTurnText = stragedyEnemyRandom() - // } + if (hand.length == 0) { + log(1) + if (deck.length == 0) state.stragedyEnemyTurnText = stragedyEnemyRetire() + else state.stragedyEnemyTurnText = stragedyEnemyDrawCard() + } else if (playerRetired && score < playerScore) { + log(2) + if (hasJoker) state.stragedyEnemyTurnText = stragedyPlayCard(false, "?" + lowestNumberedBattlefieldCard) + else if (hasQueen && highestNumberedBattlefieldCard != null) state.stragedyEnemyTurnText = stragedyPlayCard(false, "q" + highestNumberedBattlefieldCard) + else if (hasAce && bestAceNumber != null) state.stragedyEnemyTurnText = stragedyPlayCard(false, "a" + bestAceNumber) + else if (hasKing && bestKingCard != null) state.stragedyEnemyTurnText = stragedyPlayCard(false, "k" + bestKingCard) + else if (highestNumberedHandCardAddUpTo30 != null) state.stragedyEnemyTurnText = stragedyPlayCard(false, highestNumberedHandCardAddUpTo30) + else state.stragedyEnemyTurnText = stragedyEnemyRetire() + } else if (playerRetired && score > playerScore) { + log(3) + state.stragedyEnemyTurnText = stragedyEnemyRetire() + } else if (playerRetired && score == playerScore) { + log(4) + if (highestNumberedHandCardAddUpTo30 != null) state.stragedyEnemyTurnText = stragedyPlayCard(false, highestNumberedHandCardAddUpTo30) + else state.stragedyEnemyTurnText = stragedyEnemyRetire() + } else if (score - playerScore > 20) { + log(5) + state.stragedyEnemyTurnText = stragedyEnemyRetire() + } else if (hasNumberedCards && score < playerScore) { + log(6) + if (score < 20 && highestNumberedHandCardAddUpTo20 != null) state.stragedyEnemyTurnText = stragedyPlayCard(false, highestNumberedHandCardAddUpTo20) + else if (highestNumberedHandCardAddUpTo30 != null) state.stragedyEnemyTurnText = stragedyPlayCard(false, highestNumberedHandCardAddUpTo30) + else if (deck.length > 0) state.stragedyEnemyTurnText = stragedyEnemyDiscardCard() + else if (hasQueen && highestNumberedBattlefieldCard != null) state.stragedyEnemyTurnText = stragedyPlayCard(false, "q" + highestNumberedBattlefieldCard) + else if (hasAce && bestAceNumber != null) state.stragedyEnemyTurnText = stragedyPlayCard(false, "a" + bestAceNumber) + else if (hasKing && bestKingCard != null) state.stragedyEnemyTurnText = stragedyPlayCard(false, "k" + bestKingCard) + else stragedyEnemyRandom() + } else if (score > 30 && battlefield.length > 0) { + log(7) + if (hasQueen && highestNumberedBattlefieldCard != null) { + state.stragedyEnemyTurnText = stragedyPlayCard(false, "q" + highestNumberedBattlefieldCard) + } else if (hasPriest && highestNumberedBattlefieldCard != null) { + state.stragedyEnemyTurnText = stragedyPlayCard(false, "p" + highestNumberedBattlefieldCard) + } else if (hasJack && highestNumberedBattlefieldCardSubtractDownTo30 != null) { + state.stragedyEnemyTurnText = stragedyPlayCard(false, "j" + highestNumberedBattlefieldCardSubtractDownTo30) + } else if (hasAce && bestAceNumber != null) { + state.stragedyEnemyTurnText = stragedyPlayCard(false, "a" + bestAceNumber) + } else if (kingCards.length > 0 && kingNumberedCardsInHand.length > 0) { + state.stragedyEnemyTurnText = stragedyPlayCard(false, kingNumberedCardsInHand[kingNumberedCardsInHand.length - 1]) + } else { + state.stragedyEnemyTurnText = stragedyEnemyRetire() + } + } else if (highestNumberedHandCardAddUpTo20 == null && hand.length > 0) { + log(8) + state.stragedyEnemyTurnText = stragedyEnemyDiscardCard() + } else { + log(9) + state.stragedyEnemyTurnText = stragedyEnemyRandom() + } stragedyCalculateScores() if (state.stragedyEnemyScore > 30) { @@ -3121,25 +3129,29 @@ function stragedyEnemyTurn() { } function stragedyEnemyDrawCard() { + log(`Enemy draw a card`) var card = state.stragedyEnemyDeck.pop() state.stragedyEnemyHand.push(card) - return `The opponent has drawn a card.` + return `\nThe opponent has drawn a card.\n` } function stragedyEnemyDiscardCard() { + log(`Enemy discard a card`) var card = state.stragedyEnemyHand.splice(getRandomInteger(0, state.stragedyEnemyHand.length - 1), 1) state.stragedyEnemyDiscard.push(card) - var newCards = state.stragedyEnemyDeck.splice(getRandomInteger(0, state.stragedyEnemyHand.length - 2), 2) + var newCards = state.stragedyEnemyDeck.splice(state.stragedyEnemyDeck.length - 2, 2) state.stragedyEnemyHand.push(...newCards) - return `The opponent has discarded a card and drawn ${newCards.length} cards.` + return `\nThe opponent has discarded a card and drawn ${newCards.length} cards.\n` } function stragedyEnemyRetire() { + log(`Enemy retire`) state.stragedyEnemyRetired = true - return `The opponent has retired at ${state.stragedyEnemyScore} points.` + return `\nThe opponent has retired at ${state.stragedyEnemyScore} points.\n` } function stragedyEnemyRandom() { + log(`Enemy random`) var hand = [...state.stragedyEnemyHand] if (hand.length == 0) { @@ -3171,6 +3183,7 @@ function stragedyEnemyRandom() { } function stragedyPlayerTurn(text) { + log(`player turn`) if (text.startsWith("d") && state.stragedyPlayerHand.length > 0) { if (state.stragedyPlayerDeck.length == 0) return "\nYou cannot discard if you have 0 cards in your deck.\n" @@ -3210,6 +3223,11 @@ function stragedyPlayerTurn(text) { return `You draw a ${drawCard}` } else if (text == "r") { state.stragedyPlayerRetired = true + stragedyEnemyTurn() + stragedyCalculateScores() + stragedyCheckForWin() + state.stragedyTurn = "gameOver" + return `You retire at ${state.stragedyPlayerScore}.` } else { var text = stragedyPlayCard(true, text) if (state.stragedyEnemyRetired) { @@ -3222,6 +3240,7 @@ function stragedyPlayerTurn(text) { } function stragedyPlayCard(player, text) { + log(`${player ? "Player" : "Enemy"} play card ${text}`) var character = getCharacter() if (player) { var battlefield = state.stragedyPlayerBattlefield diff --git a/Output.js b/Output.js index fda18ab..d8e3532 100644 --- a/Output.js +++ b/Output.js @@ -597,8 +597,7 @@ Type d to deal the cards or press f to forfeit. var playerDeckCount = state.stragedyPlayerDeck.length var playerDiscardCount = state.stragedyPlayerDiscard.length - if (!state.stragedyEnemySkipTurn) text = `-----The Opponent's Turn----- -${state.stragedyEnemyTurnText} + if (!state.stragedyEnemySkipTurn) text = `-----The Opponent's Turn-----${state.stragedyEnemyTurnText} ` else text = "" @@ -617,8 +616,7 @@ ${toTitleCase(character.name)} ${haveWord} ${playerDeckCount} cards in the deck if (state.stragedyPlayerHand.length > 0) text += ` Play a number card to the battlefield by typing its number. -Play a letter card onto a card in the battlefield by typing the letter followed by the card you want to play it on. -Witches and Brigands are played directly to the discard pile. Simply type w or b. +Play a letter card by typing the letter followed by the card you want to play it on. Type d and the number or letter of a card in your hand to discard it. You will then draw 2 cards. Type r to retire. This forces the opponent to make their last move. Type f to forfeit. This quits the game immediately.