UNPKG

card-factory

Version:

A comprehensive library for card manipulation

72 lines (71 loc) 2.65 kB
const s = {}; const d = {}; const c = {}; export const quickPassRules = { alwaysPass: (_, __, ___) => true, neverPass: (_, __, ___) => false, onlyFaceUp: (_, __, card = c) => { return card.card.faceUp; }, onlyTopCard: (source = s, __, card = c) => { return source.topCardElement === card; }, redBlackAlternating: (source = s, __, card = c) => { const cardIndex = source.cardElements.findIndex((element) => JSON.stringify(element) === JSON.stringify(card)); if (cardIndex === -1) return false; const cardsOnTop = source.cardElements.slice(cardIndex); // To move a pile, must be in sequence return cardsOnTop.every((cardElement, index, arr) => { if (index === 0) return true; // First card has nothing to compare with const prevCard = arr[index - 1].card; const currentCard = cardElement.card; return (prevCard.color !== currentCard.color && prevCard.value === currentCard.value + 1); }); }, }; export const quickReceiveRules = { alwaysReceive: (_, __, ___) => true, neverReceive: (_, __, ___) => false, onlyIfEmpty: (_, dest = d, ___) => { return dest.cardElements.length === 0; }, emptyAndRedBlackAlternating: (_, dest = d, card = c) => { // always must be willing to receive if no cards in the pile, this shortcut must be here for every rule if (dest.cardElements.length === 0) return true; if (card.card.color === dest.topCardElement.card.color) return false; else return true; }, emptyAndOneLessThanTopCard: (_, dest = d, card = c) => { if (dest.cardElements.length === 0) return true; if (card.card.value !== dest.topCardElement.card.value - 1) return false; else return true; }, emptyAndOneMoreThanTopCard: (_, dest = d, card = c) => { if (dest.cardElements.length === 0) return true; if (card.card.value !== dest.topCardElement.card.value + 1) return false; else return true; }, onlySpecificCardValue: (_, __, card = c, specificValue) => { return card.card.value === specificValue; }, sameSuitPlusOneOrAce: (_, dest = d, card = c) => { if (dest.cardElements.length > 0) { const topCard = dest.topCardElement.card; return (topCard.suit === card.card.suit && card.card.value - 1 === topCard.value); } else return card.card.value === 1; }, };