UNPKG

binmat

Version:
47 lines (46 loc) 2.16 kB
import { shuffle } from "@samual/lib/shuffle" import { StatusCode, Role, AttackerDiscardPile } from "./shared.js" function doMoveDiscard(state, card, discardPile) { if (state.turn >= state.turns) return { status: StatusCode.MadeMoveOnFinishedGame } let cardDiscarded, cardsDrawn if ((state.turn % 2) + 1 == Role.Defender) { const index = 2 == card.length ? state.defenderHand.indexOf(card) : state.defenderHand.findIndex(([value]) => value == card) if (-1 == index) return { status: StatusCode.PlayedUnownedCard } if (discardPile == AttackerDiscardPile) return { status: StatusCode.DiscardedToOpponentDiscardPile } ;(cardDiscarded = state.defenderHand.splice(index, 1)[0]), state.laneDiscardPiles[discardPile].push(cardDiscarded) } else { const index = 2 == card.length ? state.attackerHand.indexOf(card) : state.attackerHand.findIndex(([value]) => value == card) if (-1 == index) return { status: StatusCode.PlayedUnownedCard } if (discardPile != AttackerDiscardPile) return { status: StatusCode.DiscardedToOpponentDiscardPile } if (!state.attackerDiscardPile.length && !state.attackerDeck.length) return { status: StatusCode.AttackerDiscardedToEmptyDiscardAndDeck } if ( ((cardDiscarded = state.attackerHand.splice(index, 1)[0]), state.attackerDiscardPile.push(cardDiscarded), 1 == state.attackerDeck.length) ) { const firstCardDrawn = state.attackerDeck.pop() state.attackerHand.push(firstCardDrawn), state.attackerDeck.push(...shuffle(state.attackerDiscardPile.splice(0))), (cardsDrawn = [firstCardDrawn, state.attackerDeck.pop()]), state.attackerHand.push(cardsDrawn[1]) } else state.attackerDeck.length || state.attackerDeck.push(...shuffle(state.attackerDiscardPile.splice(0))), (cardsDrawn = [state.attackerDeck.pop(), state.attackerDeck.pop()]), state.attackerHand.push(cardsDrawn[0], cardsDrawn[1]) } return ( state.turn++, state.turn == state.turns ? { status: StatusCode.DefenderWin, cardDiscarded: cardDiscarded, cardsDrawn: cardsDrawn } : { status: StatusCode.Ok, cardDiscarded: cardDiscarded, cardsDrawn: cardsDrawn } ) } export { doMoveDiscard }