binmat
Version:
binmat simulator
88 lines (87 loc) • 2.5 kB
TypeScript
export type State = {
attackerStacks: [Card[], Card[], Card[], Card[], Card[], Card[]];
defenderStacks: [DefenderStack, DefenderStack, DefenderStack, DefenderStack, DefenderStack, DefenderStack];
laneDecks: [Card[], Card[], Card[], Card[], Card[], Card[]];
laneDiscardPiles: [Card[], Card[], Card[], Card[], Card[], Card[]];
attackerDeck: Card[];
attackerDiscardPile: Card[];
attackerHand: Card[];
defenderHand: Card[];
turn: number;
turns: number;
attackerPassedLastTurn: boolean;
defenderPassedLastTurn: boolean;
};
export type Card = `${CardValue}${CardSuit}`;
export type CardValue = CardNumber | CardModifier;
export type CardNumber = "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "a";
export declare const enum CardModifier {
Trap = "@",
Wild = "*",
Bounce = "?",
Break = ">"
}
export declare const enum CardSuit {
Form = "&",
Kin = "%",
Data = "+",
Chaos = "!",
Void = "^",
Choice = "#"
}
export type DefenderStack = {
cards: Card[];
isFaceUp: boolean;
};
export type Move = {
kind: MoveKind.Draw;
deck: Lane | AttackerDeck;
} | {
kind: MoveKind.Play | MoveKind.PlayFaceUp;
card: Card | CardValue;
lane: Lane;
} | {
kind: MoveKind.Combat;
lane: Lane;
} | {
kind: MoveKind.Discard;
card: Card | CardValue;
discardPile: Lane | AttackerDiscardPile;
} | {
kind: MoveKind.Pass;
};
export declare const enum MoveKind {
Draw = 0,
Play = 1,
PlayFaceUp = 2,
Combat = 3,
Discard = 4,
Pass = 5
}
export type Lane = 0 | 2 | 1 | 3 | 4 | 5;
export declare const AttackerDeck = 6;
export type AttackerDeck = typeof AttackerDeck;
export declare const AttackerDiscardPile = 6;
export type AttackerDiscardPile = typeof AttackerDiscardPile;
export declare const enum StatusCode {
Ok = 0,
DefenderWin = 1,
AttackerWin = 2,
MadeMoveOnFinishedGame = 3,
DefenderDrewFromAttackerDeck = 4,
AttackerDrewFromBlockedLane = 5,
PlayedUnownedCard = 6,
PlayedBreakToEmptyStack = 7,
DefenderInitiatedCombat = 8,
AttackerInitiatedCombatWithEmptyStack = 9,
DiscardedToOpponentDiscardPile = 10,
AttackerDiscardedToEmptyDiscardAndDeck = 11,
AttackerDrewFromEmptyDiscardAndDeck = 12,
PlayedCardFacedWrongWay = 13,
DefenderPlayedFaceUpBreakToStackWithBreak = 14
}
export declare const StatusCodeMessages: Record<StatusCode, string>;
export declare const enum Role {
Defender = 1,
Attacker = 2
}