binmat
Version:
binmat simulator
31 lines (30 loc) • 1.31 kB
JavaScript
import { StatusCode, Role, CardModifier } from "./shared.js"
function doMovePlay(state, card, lane) {
if (state.turn >= state.turns) return { status: StatusCode.MadeMoveOnFinishedGame }
let cardPlayed
if ((state.turn % 2) + 1 == Role.Defender) {
if (state.defenderStacks[lane].isFaceUp) return { status: StatusCode.PlayedCardFacedWrongWay }
if (card[0] == CardModifier.Break && !state.defenderStacks[lane].cards.length)
return { status: StatusCode.PlayedBreakToEmptyStack }
const index =
2 == card.length ?
state.defenderHand.indexOf(card)
: state.defenderHand.findIndex(([value]) => value == card)
if (-1 == index) return { status: StatusCode.PlayedUnownedCard }
;(cardPlayed = state.defenderHand.splice(index, 1)[0]), state.defenderStacks[lane].cards.push(cardPlayed)
} else {
const index =
2 == card.length ?
state.attackerHand.indexOf(card)
: state.attackerHand.findIndex(([value]) => value == card)
if (-1 == index) return { status: StatusCode.PlayedUnownedCard }
;(cardPlayed = state.attackerHand.splice(index, 1)[0]), state.attackerStacks[lane].push(cardPlayed)
}
return (
state.turn++,
state.turn == state.turns ?
{ status: StatusCode.DefenderWin, cardPlayed: cardPlayed }
: { status: StatusCode.Ok, cardPlayed: cardPlayed }
)
}
export { doMovePlay }