mirror of
https://github.com/raeleus/Hashtag-DnD.git
synced 2025-07-13 00:41:51 -04:00
Stragedy is getting smarter.
This commit is contained in:
parent
9dbd0b2ef0
commit
0f8404345e
3 changed files with 100 additions and 58 deletions
31
Input.js
31
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":
|
||||
|
|
121
Library.js
121
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
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue