Source code for titans.ai.card

"""All cards a player can add to their deck"""

from titans.ai.enum import Ability, Element, Name, Species


[docs]class Card: """Card, with all properties This class both has all the logic to instantiate cards, and holds all properties as a player uses cards in a game. Parameters ---------- name: Name Name of card Attributes ---------- abilities: dict[Ability, int] card abilities (count of each ability) cost: int amount of energy required to awaken element: Element card element name: Name card name power: int card power species: Species card species """ def __init__( self, name: Name, /, ): # check parameters if not isinstance(name, Name): raise ValueError(f"{name} is not a member of titans.ai.enum.Name") # save name self.name = name # assign properties match self.name: # forest cards case Name.MONK: self.abilities = {Ability.ENERGY: 1} self.cost = 0 self.element = Element.FOREST self.power = 0 self.species = Species.DWELLER case Name.WIZARD: self.abilities = {} self.cost = 0 self.element = Element.FOREST self.power = 1 self.species = Species.DWELLER case Name.TRAVELER: self.abilities = { Ability.ENERGY: 2, } self.cost = 2 self.element = Element.FOREST self.power = 1 self.species = Species.DWELLER # desert cards case Name.GHOST: self.abilities = {} self.cost = 1 self.element = Element.DESERT self.power = -1 self.species = Species.DWELLER # storm cards case Name.NIKOLAI_THE_CURSED: self.abilities = { Ability.SUMMON: 1, } self.cost = 1 self.element = Element.STORM self.power = 0 self.species = Species.WARRIOR case Name.WINDS_HOWL: self.abilities = { Ability.FLASH: 2, } self.cost = 2 self.element = Element.STORM self.power = -1 self.species = Species.BEAST case Name.AURORA_DRACO: self.abilities = { Ability.HAUNT: 2, Ability.BOLSTER_FIRE: 1, } self.cost = 3 self.element = Element.STORM self.power = 1 self.species = Species.DRAGON case Name.MADNESS_OF_A_THOUSAND_STARS: self.abilities = { Ability.ENERGY_ARC: 4, } self.cost = 4 self.element = Element.STORM self.power = 1 self.species = Species.TITAN # fire cards case Name.ZODIAC_THE_ETERNAL: self.abilities = { Ability.PURIFY: 1, } self.cost = 1 self.element = Element.FIRE self.power = 2 self.species = Species.WARRIOR case Name.LIVING_VOLCANO: self.abilities = { Ability.FLASH: 1, Ability.DISCARD: 2, } self.cost = 2 self.element = Element.FIRE self.power = 0 self.species = Species.BEAST case Name.SMOLDERING_DRAGON: self.abilities = { Ability.PROTECT: 1, Ability.BOLSTER_ICE: 1, } self.cost = 3 self.element = Element.FIRE self.power = 3 self.species = Species.DRAGON case Name.FINAL_JUDGMENT: self.abilities = { Ability.DISCARD: 3000, } self.cost = 4 self.element = Element.FIRE self.power = 2 self.species = Species.TITAN # ice cards case Name.JACE_WINTERS_FIRSTBORN: self.abilities = { Ability.SUBVERT_HARMLESS: 1, } self.cost = 1 self.element = Element.ICE self.power = 1 self.species = Species.WARRIOR case Name.RETURN_OF_THE_FROST_GIANTS: self.abilities = { Ability.FLASH: 1, Ability.SUBSTITUTE: 1, } self.cost = 2 self.element = Element.ICE self.power = 0 self.species = Species.BEAST case Name.FROSTBREATH: self.abilities = { Ability.SUBVERT_MINDLESS: 1, Ability.BOLSTER_ROCK: 1, } self.cost = 3 self.element = Element.ICE self.power = 2 self.species = Species.DRAGON case Name.HELL_FROZEN_OVER: self.abilities = { Ability.SUBVERT_TRAITOROUS: 1, } self.cost = 4 self.element = Element.ICE self.power = 1 self.species = Species.TITAN # rock cards case Name.AKARI_TIMELESS_FIGHTER: self.abilities = { Ability.DRAW: 2, } self.cost = 1 self.element = Element.ROCK self.power = 2 self.species = Species.WARRIOR case Name.SPINE_SPLITTER: self.abilities = { Ability.FLASH: 1, Ability.SACRIFICE: 1, } self.cost = 2 self.element = Element.ROCK self.power = 0 self.species = Species.BEAST case Name.CAVERNS_DEFENDER: self.abilities = { Ability.SUBVERT_CAVE_IN: 1, Ability.BOLSTER_STORM: 1, } self.cost = 3 self.element = Element.ROCK self.power = 3 self.species = Species.DRAGON case Name.WHAT_LIES_BELOW: self.abilities = { Ability.BOLSTER_RIVALS: 1, } self.cost = 4 self.element = Element.ROCK self.power = 0 self.species = Species.TITAN # error case _: raise NotImplementedError( f"Missing properties for {name.name}" ) def __repr__(self) -> str: return f"{self.name.name}"