Module: Decktet
- Defined in:
- lib/decktet.rb,
lib/decktet/card.rb,
lib/decktet/deck.rb,
lib/decktet/pile.rb,
lib/decktet/version.rb
Defined Under Namespace
Modules: DeckTemplates Classes: Deck, Pile
Constant Summary collapse
- Error =
Class.new StandardError
- RANKS =
([:ace] + Array(2..9) + %i[pawn court crown]).freeze
- SUITS =
%i[moons suns waves leaves wyrms knots].freeze
- TYPES =
%i[location personality event].freeze
- Card =
Data.define(:name, :rank, :suits, :types) do def initialize(name:, rank: nil, suits: nil, types: nil) super(name: name.freeze, rank:, suits: Array(suits).freeze, types: Array(types).freeze) end def excuse? = rank.nil? && suits.empty? && types.empty? def number? = Integer === rank RANKS.select { |r| Symbol === r }.each { |rank| define_method(:"#{rank}?") { self.rank == rank } } SUITS.each { |suit| define_method(:"#{suit}?") { suits.include?(suit) } } TYPES.each { |type| define_method(:"#{type}?") { types.include?(type) } } alias_method :moon?, :moons? alias_method :sun?, :suns? alias_method :wave?, :waves? alias_method :leaf?, :leaves? alias_method :wyrm?, :wyrms? alias_method :knot?, :knots? end
- THE_EXCUSE =
Card.new('The EXCUSE')
- THE_ACE_OF_MOONS =
Card.new('The Ace of Moons', :ace, :moons)
- THE_ACE_OF_SUNS =
Card.new('The Ace of Suns', :ace, :suns)
- THE_ACE_OF_WAVES =
Card.new('The Ace of Waves', :ace, :waves)
- THE_ACE_OF_LEAVES =
Card.new('The Ace of Leaves', :ace, :leaves)
- THE_ACE_OF_WYRMS =
Card.new('The Ace of Wyrms', :ace, :wyrms)
- THE_ACE_OF_KNOTS =
Card.new('The Ace of Knots', :ace, :knots)
- THE_AUTHOR =
Classic Decktet Cards
Card.new('The Author', 2, %i[moons knots], :personality)
- THE_DESERT =
Card.new('The Desert', 2, %i[suns wyrms], :location)
- THE_ORIGIN =
Card.new('The Origin', 2, %i[waves leaves], %i[location event])
- THE_JOURNEY =
Card.new('The Journey', 3, %i[moons waves], :event)
- THE_PAINTER =
Card.new('The Painter', 3, %i[suns knots], :personality)
- THE_SAVAGE =
Card.new('The Savage', 3, %i[leaves wyrms], :personality)
- THE_MOUNTAIN =
Card.new('The Mountain', 4, %i[moons suns], :location)
- THE_SAILOR =
Card.new('The Sailor', 4, %i[waves leaves], :personality)
- THE_BATTLE =
Card.new('The Battle', 4, %i[wyrms knots], :event)
- THE_FOREST =
Card.new('The Forest', 5, %i[moons leaves], :location)
- THE_DISCOVERY =
Card.new('The Discovery', 5, %i[suns waves], :event)
- THE_SOLDIER =
Card.new('The Soldier', 5, %i[wyrms knots], :personality)
- THE_LUNATIC =
Card.new('The Lunatic', 6, %i[moons waves], :personality)
- THE_PENITENT =
Card.new('The Penitent', 6, %i[suns wyrms], :personality)
- THE_MARKET =
Card.new('The Market', 6, %i[leaves knots], %i[location event])
- THE_CHANCE_MEETING =
Card.new('The Chance Meeting', 7, %i[moons leaves], :event)
- THE_CASTLE =
Card.new('The Castle', 7, %i[suns knots], :location)
- THE_CAVE =
Card.new('The Cave', 7, %i[waves wyrms], :location)
- THE_DIPLOMAT =
Card.new('The Diplomat', 8, %i[moons suns], :personality)
- THE_MILL =
Card.new('The Mill', 8, %i[waves leaves], :location)
- THE_BETRAYAL =
Card.new('The Betrayal', 8, %i[wyrms knots], :event)
- THE_PACT =
Card.new('The Pact', 9, %i[moons suns], :event)
- THE_DARKNESS =
Card.new('The Darkness', 9, %i[waves wyrms], :location)
- THE_MERCHANT =
Card.new('The Merchant', 9, %i[leaves knots], :personality)
- THE_HARVEST =
Card.new('The Harvest', :pawn, %i[moons suns leaves], :event)
- THE_WATCHMAN =
Card.new('The Watchman', :pawn, %i[moons wyrms knots], :personality)
- THE_LIGHT_KEEPER =
Card.new('The Light Keeper', :pawn, %i[suns waves knots], :personality)
- THE_BORDERLAND =
Card.new('The Borderland', :pawn, %i[waves leaves wyrms], :location)
- THE_CONSUL =
Card.new('The Consul', :court, %i[moons waves knots], :personality)
- THE_RITE =
Card.new('The Rite', :court, %i[moons leaves wyrms], :event)
- THE_ISLAND =
Card.new('The Island', :court, %i[suns waves wyrms], :location)
- THE_WINDOW =
Card.new('The Window', :court, %i[suns leaves knots], :location)
- THE_HUNTRESS =
Card.new('The Huntress', :crown, :moons, :personality)
- THE_BARD =
Card.new('The Bard', :crown, :suns, :personality)
- THE_SEA =
Card.new('The Sea', :crown, :waves, :location)
- THE_END =
Card.new('The End', :crown, :leaves, %i[location event])
- THE_CALAMITY =
Card.new('The Calamity', :crown, :wyrms, :event)
- THE_WINDFALL =
Card.new('The Windfall', :crown, :knots, :event)
- THE_SCULPTOR =
Capital Decktet cards
Card.new('The Sculptor', 2, %i[moons knots], :personality)
- THE_PILLORY =
Card.new('The Pillory', 2, %i[suns wyrms], :location)
- THE_MEMORY =
Card.new('The Memory', 2, %i[waves leaves], %i[location event])
- THE_BLIZZARD =
Card.new('The Blizzard', 3, %i[moons waves], :event)
- THE_AUDITOR =
Card.new('The Auditor', 3, %i[suns knots], :personality)
- THE_MOUNTEBANK =
Card.new('The Mountebank', 3, %i[leaves wyrms], :personality)
- THE_GATE =
Card.new('The Gate', 4, %i[moons suns], :location)
- THE_MILLER =
Card.new('The Miller', 4, %i[waves leaves], :personality)
- THE_ARREST =
Card.new('The Arrest', 4, %i[wyrms knots], :event)
- THE_GROVE =
Card.new('The Grove', 5, %i[moons leaves], :location)
- THE_APPOINTMENT =
Card.new('The Appointment', 5, %i[suns waves], :event)
- THE_ROGUE =
Card.new('The Rogue', 5, %i[wyrms knots], :personality)
- THE_NAVIGATOR =
Card.new('The Navigator', 6, %i[moons waves], :personality)
- THE_HERMIT =
Card.new('The Hermit', 6, %i[suns wyrms], :personality)
- THE_EXHIBITION =
Card.new('The Exhibition', 6, %i[leaves knots], %i[location event])
- THE_FORTUITOUS_LOSS =
Card.new('The Fortuitous Loss', 7, %i[moons leaves], :event)
- THE_FORGE =
Card.new('The Forge', 7, %i[suns knots], :location)
- THE_EYE =
Card.new('The Eye', 7, %i[waves wyrms], :location)
- THE_REGENT =
Card.new('The Regent', 8, %i[moons suns], :personality)
- THE_ABBEY =
Card.new('The Abbey', 8, %i[waves leaves], :location)
- THE_DEFENESTRATION =
Card.new('The Defenestration', 8, %i[wyrms knots], :event)
- THE_ERUPTION =
Card.new('The Eruption', 9, %i[moons suns], :event)
- THE_STRAND =
Card.new('The Strand', 9, %i[waves wyrms], :location)
- THE_FARRIER =
Card.new('The Farrier', 9, %i[leaves knots], :personality)
- THE_FESTIVAL =
Card.new('The Festival', :pawn, %i[moons suns leaves], :event)
- THE_NEMESIS =
Card.new('The Nemesis', :pawn, %i[moons wyrms knots], :personality)
- THE_CONFIDANT =
Card.new('The Confidant', :pawn, %i[suns waves knots], :personality)
- THE_STRANGER =
Card.new('The Stranger', :court, %i[moons waves knots], :personality)
- THE_DEPTHS =
Card.new('The Depths', :pawn, %i[waves leaves wyrms], :location)
- THE_REVERSAL =
Card.new('The Reversal', :court, %i[moons leaves wyrms], :event)
- THE_SANCTUARY =
Card.new('The Sanctuary', :court, %i[suns waves wyrms], :location)
- THE_DRY_DOCK =
Card.new('The Dry Dock', :court, %i[suns leaves knots], :location)
- THE_SILVER_CROWN =
Card.new('The Silver Crown', :crown, :moons, :personality)
- THE_AMBER_CROWN =
Card.new('The Amber Crown', :crown, :suns, :personality)
- THE_SAPPHIRE_CROWN =
Card.new('The Sapphire Crown', :crown, :waves, :location)
- THE_GARNET_CROWN =
Card.new('The Garnet Crown', :crown, :leaves, %i[location event])
- THE_EMERALD_CROWN =
Card.new('The Emerald Crown', :crown, :wyrms, :event)
- THE_GOLDEN_CROWN =
Card.new('The Golden Crown', :crown, :knots, :event)
- CARDS =
[ THE_EXCUSE, THE_ACE_OF_MOONS, THE_ACE_OF_SUNS, THE_ACE_OF_WAVES, THE_ACE_OF_LEAVES, THE_ACE_OF_WYRMS, THE_ACE_OF_KNOTS, THE_AUTHOR, THE_DESERT, THE_ORIGIN, # rank 2 THE_JOURNEY, THE_PAINTER, THE_SAVAGE, # rank 3 THE_MOUNTAIN, THE_SAILOR, THE_BATTLE, # rank 4 THE_FOREST, THE_DISCOVERY, THE_SOLDIER, # rank 5 THE_LUNATIC, THE_PENITENT, THE_MARKET, # rank 6 THE_CHANCE_MEETING, THE_CASTLE, THE_CAVE, # rank 7 THE_DIPLOMAT, THE_MILL, THE_BETRAYAL, # rank 8 THE_PACT, THE_DARKNESS, THE_MERCHANT, # rank 9 THE_HARVEST, THE_WATCHMAN, THE_LIGHT_KEEPER, THE_BORDERLAND, # pawns THE_CONSUL, THE_RITE, THE_ISLAND, THE_WINDOW, # courts THE_HUNTRESS, THE_BARD, THE_SEA, THE_END, THE_CALAMITY, THE_WINDFALL, # crowns ].freeze
- CAPITAL_CARDS =
[ THE_EXCUSE, THE_ACE_OF_MOONS, THE_ACE_OF_SUNS, THE_ACE_OF_WAVES, THE_ACE_OF_LEAVES, THE_ACE_OF_WYRMS, THE_ACE_OF_KNOTS, THE_SCULPTOR, THE_PILLORY, THE_MEMORY, # rank 2 THE_BLIZZARD, THE_AUDITOR, THE_MOUNTEBANK, # rank 3 THE_GATE, THE_MILLER, THE_ARREST, # rank 4 THE_GROVE, THE_APPOINTMENT, THE_ROGUE, # rank 5 THE_NAVIGATOR, THE_HERMIT, THE_EXHIBITION, # rank 6 THE_FORTUITOUS_LOSS, THE_FORGE, THE_EYE, # rank 7 THE_REGENT, THE_ABBEY, THE_DEFENESTRATION, # rank 8 THE_ERUPTION, THE_STRAND, THE_FARRIER, # rank 9 THE_FESTIVAL, THE_NEMESIS, THE_CONFIDANT, THE_DEPTHS, # pawns THE_STRANGER, THE_REVERSAL, THE_SANCTUARY, THE_DRY_DOCK, # courts THE_SILVER_CROWN, THE_AMBER_CROWN, THE_SAPPHIRE_CROWN, THE_GARNET_CROWN, THE_EMERALD_CROWN, THE_GOLDEN_CROWN ].freeze
- ACES =
CARDS.select(&:ace?).freeze
- NUMBERS =
CARDS.select(&:number?).freeze
- PAWNS =
CARDS.select(&:pawn?).freeze
- COURTS =
CARDS.select(&:court?).freeze
- CROWNS =
CARDS.select(&:crown?).freeze
- MOONS =
CARDS.select(&:moons?).freeze
- SUNS =
CARDS.select(&:suns?).freeze
- WAVES =
CARDS.select(&:waves?).freeze
- LEAVES =
CARDS.select(&:leaves?).freeze
- WYRMS =
CARDS.select(&:wyrms?).freeze
- KNOTS =
CARDS.select(&:knots?).freeze
- LOCATIONS =
CARDS.select(&:location?).freeze
- PERSONALITIES =
CARDS.select(&:personality?).freeze
- EVENTS =
CARDS.select(&:event?).freeze
- CAPITAL_ACES =
CAPITAL_CARDS.select(&:ace?).freeze
- CAPITAL_NUMBERS =
CAPITAL_CARDS.select(&:number?).freeze
- CAPITAL_PAWNS =
CAPITAL_CARDS.select(&:pawn?).freeze
- CAPITAL_COURTS =
CAPITAL_CARDS.select(&:court?).freeze
- CAPITAL_CROWNS =
CAPITAL_CARDS.select(&:crown?).freeze
- CAPITAL_MOONS =
CAPITAL_CARDS.select(&:moons?).freeze
- CAPITAL_SUNS =
CAPITAL_CARDS.select(&:suns?).freeze
- CAPITAL_WAVES =
CAPITAL_CARDS.select(&:waves?).freeze
- CAPITAL_LEAVES =
CAPITAL_CARDS.select(&:leaves?).freeze
- CAPITAL_WYRMS =
CAPITAL_CARDS.select(&:wyrms?).freeze
- CAPITAL_KNOTS =
CAPITAL_CARDS.select(&:knots?).freeze
- CAPITAL_LOCATIONS =
CAPITAL_CARDS.select(&:location?).freeze
- CAPITAL_PERSONALITIES =
CAPITAL_CARDS.select(&:personality?).freeze
- CAPITAL_EVENTS =
CAPITAL_CARDS.select(&:event?).freeze
- VERSION =
"0.2.0"