dvitel/hearthstone huggingface dataset:
Card: Healing Totem NAME_END 0 ATK_END 2 DEF_END 1 COST_END -1 DUR_END Minion TYPE_END Shaman PLAYER_CLS_END Totem RACE_END Free RARITY_END At the end of your turn, restore 1 Health to all friendly minions.

Python implementation:
class HealingTotem(MinionCard):§    def __init__(self):§        super().__init__("Healing Totem", 1, CHARACTER_CLASS.SHAMAN, CARD_RARITY.FREE, False, MINION_TYPE.TOTEM)§§    def create_minion(self, player):§        return Minion(0, 2, effects=[Effect(TurnEnded(), ActionTag(Heal(1), MinionSelector(condition=None)))])§
Card: Healing Touch NAME_END -1 ATK_END -1 DEF_END 3 COST_END -1 DUR_END Spell TYPE_END Druid PLAYER_CLS_END NIL RACE_END Free RARITY_END Restore #8 Health.

Python implementation:
class HealingTouch(SpellCard):§    def __init__(self):§        super().__init__("Healing Touch", 3, CHARACTER_CLASS.DRUID, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_spell_target)§§    def use(self, player, game):§        super().use(player, game)§        self.target.heal(player.effective_heal_power(8), self)§
Card: Hex NAME_END -1 ATK_END -1 DEF_END 3 COST_END -1 DUR_END Spell TYPE_END Shaman PLAYER_CLS_END NIL RACE_END Free RARITY_END Transform a minion into a 0/1 Frog with <b>Taunt</b>.

Python implementation:
class Hex(SpellCard):§    def __init__(self):§        super().__init__("Hex", 3, CHARACTER_CLASS.SHAMAN, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_minion_spell_target)§§    def use(self, player, game):§        super().use(player, game)§§        frog = hearthbreaker.cards.minions.neutral.Frog()§        minion = frog.create_minion(None)§        minion.card = frog§        self.target.replace(minion)§
Card: Holy Light NAME_END -1 ATK_END -1 DEF_END 2 COST_END -1 DUR_END Spell TYPE_END Paladin PLAYER_CLS_END NIL RACE_END Free RARITY_END Restore #6 Health.

Python implementation:
class HolyLight(SpellCard):§    def __init__(self):§        super().__init__("Holy Light", 2, CHARACTER_CLASS.PALADIN, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_spell_target)§§    def use(self, player, game):§        super().use(player, game)§§        self.target.heal(player.effective_heal_power(6), self)§
Card: Holy Nova NAME_END -1 ATK_END -1 DEF_END 5 COST_END -1 DUR_END Spell TYPE_END Priest PLAYER_CLS_END NIL RACE_END Common RARITY_END Deal $2 damage to all enemies. Restore #2 Health to all friendly characters.

Python implementation:
class HolyNova(SpellCard):§    def __init__(self):§        super().__init__("Holy Nova", 5, CHARACTER_CLASS.PRIEST, CARD_RARITY.COMMON)§§    def use(self, player, game):§        super().use(player, game)§§        for minion in copy.copy(game.other_player.minions):§            minion.damage(player.effective_spell_damage(2), self)§§        for minion in player.minions:§            minion.heal(player.effective_heal_power(2), self)§
Card: Holy Smite NAME_END -1 ATK_END -1 DEF_END 1 COST_END -1 DUR_END Spell TYPE_END Priest PLAYER_CLS_END NIL RACE_END Free RARITY_END Deal $2 damage.

Python implementation:
class HolySmite(SpellCard):§    def __init__(self):§        super().__init__("Holy Smite", 1, CHARACTER_CLASS.PRIEST, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_spell_target)§§    def use(self, player, game):§        super().use(player, game)§§        self.target.damage(player.effective_spell_damage(2), self)§
Card: Houndmaster NAME_END 4 ATK_END 3 DEF_END 4 COST_END -1 DUR_END Minion TYPE_END Hunter PLAYER_CLS_END NIL RACE_END Free RARITY_END <b>Battlecry:</b> Give a friendly Beast +2/+2 and <b>Taunt</b>.

Python implementation:
class Houndmaster(MinionCard):§    def __init__(self):§        super().__init__("Houndmaster", 4, CHARACTER_CLASS.HUNTER, CARD_RARITY.FREE, minion_type=MINION_TYPE.NONE, battlecry=Battlecry(Give([Buff(ChangeHealth(2)), Buff(ChangeAttack(2)), Buff(Taunt())]), MinionSelector(IsType(MINION_TYPE.BEAST), picker=UserPicker())))§§    def create_minion(self, player):§        return Minion(4, 3)§
Card: Huffer NAME_END 4 ATK_END 2 DEF_END 3 COST_END -1 DUR_END Minion TYPE_END Hunter PLAYER_CLS_END Beast RACE_END Common RARITY_END <b>Charge</b>

Python implementation:
class Huffer(MinionCard):§    def __init__(self):§        super().__init__("Huffer", 3, CHARACTER_CLASS.HUNTER, CARD_RARITY.COMMON, False, minion_type=MINION_TYPE.BEAST)§§    def create_minion(self, player):§        return Minion(4, 2, charge=True)§
Card: Humility NAME_END -1 ATK_END -1 DEF_END 1 COST_END -1 DUR_END Spell TYPE_END Paladin PLAYER_CLS_END NIL RACE_END Common RARITY_END Change a minion's Attack to 1.

Python implementation:
class Humility(SpellCard):§    def __init__(self):§        super().__init__("Humility", 1, CHARACTER_CLASS.PALADIN, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_minion_spell_target)§§    def use(self, player, game):§        super().use(player, game)§§        self.target.change_attack(1 - self.target.calculate_attack())§
Card: Hunter's Mark NAME_END -1 ATK_END -1 DEF_END 0 COST_END -1 DUR_END Spell TYPE_END Hunter PLAYER_CLS_END NIL RACE_END Common RARITY_END Change a minion's Health to 1.

Python implementation:
class HuntersMark(SpellCard):§    def __init__(self):§        super().__init__("Hunter's Mark", 0, CHARACTER_CLASS.HUNTER, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_minion_spell_target)§§    def use(self, player, game):§        super().use(player, game)§        self.target.set_health_to(1)§
Card: Ironforge Rifleman NAME_END 2 ATK_END 2 DEF_END 3 COST_END -1 DUR_END Minion TYPE_END Neutral PLAYER_CLS_END NIL RACE_END Common RARITY_END <b>Battlecry:</b> Deal 1 damage.

Python implementation:
class IronforgeRifleman(MinionCard):§    def __init__(self):§        super().__init__("Ironforge Rifleman", 3, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, minion_type=MINION_TYPE.NONE, battlecry=Battlecry(Damage(1), CharacterSelector(players=BothPlayer(), picker=UserPicker())))§§    def create_minion(self, player):§        return Minion(2, 2)§
Card: Ironfur Grizzly NAME_END 3 ATK_END 3 DEF_END 3 COST_END -1 DUR_END Minion TYPE_END Neutral PLAYER_CLS_END Beast RACE_END Common RARITY_END <b>Taunt</b>

Python implementation:
class IronfurGrizzly(MinionCard):§    def __init__(self):§        super().__init__("Ironfur Grizzly", 3, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, minion_type=MINION_TYPE.BEAST)§§    def create_minion(self, player):§        return Minion(3, 3, taunt=True)§
Card: Kill Command NAME_END -1 ATK_END -1 DEF_END 3 COST_END -1 DUR_END Spell TYPE_END Hunter PLAYER_CLS_END NIL RACE_END Common RARITY_END Deal $3 damage. If you have a Beast, deal $5 damage instead.

Python implementation:
class KillCommand(SpellCard):§    def __init__(self):§        super().__init__("Kill Command", 3, CHARACTER_CLASS.HUNTER, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_spell_target)§§    def use(self, player, game):§        super().use(player, game)§        beasts = hearthbreaker.targeting.find_friendly_minion_battlecry_target(§            player.game, lambda x: x.card.minion_type is MINION_TYPE.BEAST)§        if beasts is None:§            self.target.damage(player.effective_spell_damage(3), self)§        else:§            self.target.damage(player.effective_spell_damage(5), self)§
Card: Kobold Geomancer NAME_END 2 ATK_END 2 DEF_END 2 COST_END -1 DUR_END Minion TYPE_END Neutral PLAYER_CLS_END NIL RACE_END Common RARITY_END <b>Spell Damage +1</b>

Python implementation:
class KoboldGeomancer(MinionCard):§    def __init__(self):§        super().__init__("Kobold Geomancer", 2, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)§§    def create_minion(self, player):§        return Minion(2, 2, spell_damage=1)§
Card: Kor'kron Elite NAME_END 4 ATK_END 3 DEF_END 4 COST_END -1 DUR_END Minion TYPE_END Warrior PLAYER_CLS_END NIL RACE_END Common RARITY_END <b>Charge</b>

Python implementation:
class KorkronElite(MinionCard):§    def __init__(self):§        super().__init__("Kor'kron Elite", 4, CHARACTER_CLASS.WARRIOR, CARD_RARITY.COMMON)§§    def create_minion(self, player):§        return Minion(4, 3, charge=True)§
Card: Leokk NAME_END 2 ATK_END 4 DEF_END 3 COST_END -1 DUR_END Minion TYPE_END Hunter PLAYER_CLS_END Beast RACE_END Common RARITY_END Your other minions have +1 Attack.

Python implementation:
class Leokk(MinionCard):§    def __init__(self):§        super().__init__("Leokk", 3, CHARACTER_CLASS.HUNTER, CARD_RARITY.COMMON, False, minion_type=MINION_TYPE.BEAST)§§    def create_minion(self, player):§        return Minion(2, 4, auras=[Aura(ChangeAttack(1), MinionSelector())])§
Card: Light's Justice NAME_END 1 ATK_END -1 DEF_END 1 COST_END 4 DUR_END Weapon TYPE_END Paladin PLAYER_CLS_END NIL RACE_END Free RARITY_END NIL

Python implementation:
class LightsJustice(WeaponCard):§    def __init__(self):§        super().__init__("Light's Justice", 1, CHARACTER_CLASS.PALADIN, CARD_RARITY.FREE)§§    def create_weapon(self, player):§        return Weapon(1, 4)§
Card: Lord of the Arena NAME_END 6 ATK_END 5 DEF_END 6 COST_END -1 DUR_END Minion TYPE_END Neutral PLAYER_CLS_END NIL RACE_END Common RARITY_END <b>Taunt</b>

Python implementation:
class LordOfTheArena(MinionCard):§    def __init__(self):§        super().__init__("Lord of the Arena", 6, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)§§    def create_minion(self, player):§        return Minion(6, 5, taunt=True)§
Card: Mechanical Dragonling NAME_END 2 ATK_END 1 DEF_END 1 COST_END -1 DUR_END Minion TYPE_END Neutral PLAYER_CLS_END Mech RACE_END Common RARITY_END NIL

Python implementation:
class MechanicalDragonling(MinionCard):§    def __init__(self):§        super().__init__("Mechanical Dragonling", 1, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, False, minion_type=MINION_TYPE.MECH)§§    def create_minion(self, player):§        return Minion(2, 1)§
Card: Mind Blast NAME_END -1 ATK_END -1 DEF_END 2 COST_END -1 DUR_END Spell TYPE_END Priest PLAYER_CLS_END NIL RACE_END Free RARITY_END Deal $5 damage to the enemy hero.

Python implementation:
class MindBlast(SpellCard):§    def __init__(self):§        super().__init__("Mind Blast", 2, CHARACTER_CLASS.PRIEST, CARD_RARITY.FREE)§§    def use(self, player, game):§        super().use(player, game)§§        game.other_player.hero.damage(player.effective_spell_damage(5), self)§
Card: Mind Control NAME_END -1 ATK_END -1 DEF_END 10 COST_END -1 DUR_END Spell TYPE_END Priest PLAYER_CLS_END NIL RACE_END Common RARITY_END Take control of an enemy minion.

Python implementation:
class MindControl(SpellCard):§    def __init__(self):§        super().__init__("Mind Control", 10, CHARACTER_CLASS.PRIEST, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_enemy_minion_spell_target)§§    def use(self, player, game):§        super().use(player, game)§        new_minion = self.target.copy(player)§        self.target.remove_from_board()§        new_minion.add_to_board(len(player.minions))§§    def can_use(self, player, game):§        return super().can_use(player, game) and len(player.minions) < 7§
Card: Mind Vision NAME_END -1 ATK_END -1 DEF_END 1 COST_END -1 DUR_END Spell TYPE_END Priest PLAYER_CLS_END NIL RACE_END Common RARITY_END Put a copy of a random card in your opponent's hand into your hand.

Python implementation:
class MindVision(SpellCard):§    def __init__(self):§        super().__init__("Mind Vision", 1, CHARACTER_CLASS.PRIEST, CARD_RARITY.COMMON)§§    def use(self, player, game):§        super().use(player, game)§§        if (len(game.other_player.hand) > 0):§            card = copy.deepcopy(game.random_choice(game.other_player.hand))§            player.hand.append(card)§            card.player = player§
Card: Mirror Image NAME_END 0 ATK_END 2 DEF_END 0 COST_END -1 DUR_END Minion TYPE_END Mage PLAYER_CLS_END NIL RACE_END Common RARITY_END <b>Taunt</b>

Python implementation:
class MirrorImage(SpellCard):§    def __init__(self):§        super().__init__("Mirror Image", 1, CHARACTER_CLASS.MAGE, CARD_RARITY.COMMON)§§    def use(self, player, game):§        super().use(player, game)§        for i in range(0, 2):§            MirrorImageMinion().summon(player, game, len(player.minions))§§    def can_use(self, player, game):§        return super().can_use(player, game) and len(player.minions) < 7§
Card: Mirror Image NAME_END -1 ATK_END -1 DEF_END 1 COST_END -1 DUR_END Spell TYPE_END Mage PLAYER_CLS_END NIL RACE_END Common RARITY_END Summon two 0/2 minions with <b>Taunt</b>.

Python implementation:
class MirrorImage(SpellCard):§    def __init__(self):§        super().__init__("Mirror Image", 1, CHARACTER_CLASS.MAGE, CARD_RARITY.COMMON)§§    def use(self, player, game):§        super().use(player, game)§        for i in range(0, 2):§            MirrorImageMinion().summon(player, game, len(player.minions))§§    def can_use(self, player, game):§        return super().can_use(player, game) and len(player.minions) < 7§
Card: Misha NAME_END 4 ATK_END 4 DEF_END 3 COST_END -1 DUR_END Minion TYPE_END Hunter PLAYER_CLS_END Beast RACE_END Common RARITY_END <b>Taunt</b>

Python implementation:
class Misha(MinionCard):§    def __init__(self):§        super().__init__("Misha", 3, CHARACTER_CLASS.HUNTER, CARD_RARITY.COMMON, False, minion_type=MINION_TYPE.BEAST)§§    def create_minion(self, player):§        return Minion(4, 4, taunt=True)§
Card: Moonfire NAME_END -1 ATK_END -1 DEF_END 0 COST_END -1 DUR_END Spell TYPE_END Druid PLAYER_CLS_END NIL RACE_END Common RARITY_END Deal $1 damage.

Python implementation:
class Moonfire(SpellCard):§    def __init__(self):§        super().__init__("Moonfire", 0, CHARACTER_CLASS.DRUID, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_spell_target)§§    def use(self, player, game):§        super().use(player, game)§        self.target.damage(player.effective_spell_damage(1), self)§
Card: Murloc Raider NAME_END 2 ATK_END 1 DEF_END 1 COST_END -1 DUR_END Minion TYPE_END Neutral PLAYER_CLS_END Murloc RACE_END Free RARITY_END NIL

Python implementation:
class MurlocRaider(MinionCard):§    def __init__(self):§        super().__init__("Murloc Raider", 1, CHARACTER_CLASS.ALL, CARD_RARITY.FREE, minion_type=MINION_TYPE.MURLOC)§§    def create_minion(self, player):§        return Minion(2, 1)§
Card: Murloc Scout NAME_END 1 ATK_END 1 DEF_END 0 COST_END -1 DUR_END Minion TYPE_END Neutral PLAYER_CLS_END Murloc RACE_END Common RARITY_END NIL

Python implementation:
class MurlocScout(MinionCard):§    def __init__(self):§        super().__init__("Murloc Scout", 0, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, False, minion_type=MINION_TYPE.MURLOC)§§    def create_minion(self, player):§        return Minion(1, 1)§
Card: Murloc Tidehunter NAME_END 2 ATK_END 1 DEF_END 2 COST_END -1 DUR_END Minion TYPE_END Neutral PLAYER_CLS_END Murloc RACE_END Common RARITY_END <b>Battlecry:</b> Summon a 1/1 Murloc Scout.

Python implementation:
class MurlocTidehunter(MinionCard):§    def __init__(self):§        super().__init__("Murloc Tidehunter", 2, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, minion_type=MINION_TYPE.MURLOC, battlecry=Battlecry(Summon(MurlocScout()), PlayerSelector()))§§    def create_minion(self, player):§        return Minion(2, 1)§
Card: Nightblade NAME_END 4 ATK_END 4 DEF_END 5 COST_END -1 DUR_END Minion TYPE_END Neutral PLAYER_CLS_END NIL RACE_END Free RARITY_END <b>Battlecry: </b>Deal 3 damage to the enemy hero.

Python implementation:
class Nightblade(MinionCard):§    def __init__(self):§        super().__init__("Nightblade", 5, CHARACTER_CLASS.ALL, CARD_RARITY.FREE, battlecry=Battlecry(Damage(3), HeroSelector(EnemyPlayer())))§§    def create_minion(self, player):§        return Minion(4, 4)§
Card: Northshire Cleric NAME_END 1 ATK_END 3 DEF_END 1 COST_END -1 DUR_END Minion TYPE_END Priest PLAYER_CLS_END NIL RACE_END Free RARITY_END Whenever a minion is healed, draw a card.

Python implementation:
class NorthshireCleric(MinionCard):§    def __init__(self):§        super().__init__("Northshire Cleric", 1, CHARACTER_CLASS.PRIEST, CARD_RARITY.FREE)§§    def create_minion(self, player):§        return Minion(1, 3, effects=[Effect(CharacterHealed(condition=IsMinion(), player=BothPlayer()), ActionTag(Draw(), PlayerSelector()))])§
Card: Novice Engineer NAME_END 1 ATK_END 1 DEF_END 2 COST_END -1 DUR_END Minion TYPE_END Neutral PLAYER_CLS_END NIL RACE_END Free RARITY_END <b>Battlecry:</b> Draw a card.

Python implementation:
class NoviceEngineer(MinionCard):§    def __init__(self):§        super().__init__("Novice Engineer", 2, CHARACTER_CLASS.ALL, CARD_RARITY.FREE, battlecry=Battlecry(Draw(), PlayerSelector()))§§    def create_minion(self, player):§        return Minion(1, 1)§
Card: Oasis Snapjaw NAME_END 2 ATK_END 7 DEF_END 4 COST_END -1 DUR_END Minion TYPE_END Neutral PLAYER_CLS_END Beast RACE_END Free RARITY_END NIL

Python implementation:
class OasisSnapjaw(MinionCard):§    def __init__(self):§        super().__init__("Oasis Snapjaw", 4, CHARACTER_CLASS.ALL, CARD_RARITY.FREE, minion_type=MINION_TYPE.BEAST)§§    def create_minion(self, player):§        return Minion(2, 7)§
Card: Ogre Magi NAME_END 4 ATK_END 4 DEF_END 4 COST_END -1 DUR_END Minion TYPE_END Neutral PLAYER_CLS_END NIL RACE_END Common RARITY_END <b>Spell Damage +1</b>

Python implementation:
class OgreMagi(MinionCard):§    def __init__(self):§        super().__init__("Ogre Magi", 4, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)§§    def create_minion(self, player):§        return Minion(4, 4, spell_damage=1)§
Card: Raid Leader NAME_END 2 ATK_END 2 DEF_END 3 COST_END -1 DUR_END Minion TYPE_END Neutral PLAYER_CLS_END NIL RACE_END Free RARITY_END Your other minions have +1 Attack.

Python implementation:
class RaidLeader(MinionCard):§    def __init__(self):§        super().__init__("Raid Leader", 3, CHARACTER_CLASS.ALL, CARD_RARITY.FREE)§§    def create_minion(self, player):§        return Minion(2, 2, auras=[Aura(ChangeAttack(1), MinionSelector())])§
Card: Razorfen Hunter NAME_END 2 ATK_END 3 DEF_END 3 COST_END -1 DUR_END Minion TYPE_END Neutral PLAYER_CLS_END NIL RACE_END Common RARITY_END <b>Battlecry:</b> Summon a 1/1 Boar.

Python implementation:
class RazorfenHunter(MinionCard):§    def __init__(self):§        super().__init__("Razorfen Hunter", 3, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, battlecry=Battlecry(Summon(Boar()), PlayerSelector()))§§    def create_minion(self, player):§        return Minion(2, 3)§
Card: Reckless Rocketeer NAME_END 5 ATK_END 2 DEF_END 6 COST_END -1 DUR_END Minion TYPE_END Neutral PLAYER_CLS_END NIL RACE_END Free RARITY_END <b>Charge</b>

Python implementation:
class RecklessRocketeer(MinionCard):§    def __init__(self):§        super().__init__("Reckless Rocketeer", 6, CHARACTER_CLASS.ALL, CARD_RARITY.FREE)§§    def create_minion(self, player):§        return Minion(5, 2, charge=True)§
Card: River Crocolisk NAME_END 2 ATK_END 3 DEF_END 2 COST_END -1 DUR_END Minion TYPE_END Neutral PLAYER_CLS_END Beast RACE_END Free RARITY_END NIL

Python implementation:
class RiverCrocolisk(MinionCard):§    def __init__(self):§        super().__init__("River Crocolisk", 2, CHARACTER_CLASS.ALL, CARD_RARITY.FREE, minion_type=MINION_TYPE.BEAST)§§    def create_minion(self, player):§        return Minion(2, 3)§
Card: Rockbiter Weapon NAME_END -1 ATK_END -1 DEF_END 1 COST_END -1 DUR_END Spell TYPE_END Shaman PLAYER_CLS_END NIL RACE_END Free RARITY_END Give a friendly character +3 Attack this turn.

Python implementation:
class RockbiterWeapon(SpellCard):§    def __init__(self):§        super().__init__("Rockbiter Weapon", 1, CHARACTER_CLASS.SHAMAN, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_friendly_spell_target)§§    def use(self, player, game):§        super().use(player, game)§        self.target.change_temp_attack(3)§
Card: Sacrificial Pact NAME_END -1 ATK_END -1 DEF_END 0 COST_END -1 DUR_END Spell TYPE_END Warlock PLAYER_CLS_END NIL RACE_END Common RARITY_END Destroy a Demon. Restore #5 Health to your hero.

Python implementation:
class SacrificialPact(SpellCard):§    def __init__(self):§        super().__init__("Sacrificial Pact", 0, CHARACTER_CLASS.WARLOCK, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_spell_target, filter_func=lambda character: character.card.minion_type == MINION_TYPE.DEMON)§§    def use(self, player, game):§        super().use(player, game)§        self.target.die(self)§        player.hero.heal(player.effective_heal_power(5), self)§
Card: Sap NAME_END -1 ATK_END -1 DEF_END 2 COST_END -1 DUR_END Spell TYPE_END Rogue PLAYER_CLS_END NIL RACE_END Free RARITY_END Return an enemy minion to your opponent's hand.

Python implementation:
class Sap(SpellCard):§    def __init__(self):§        super().__init__("Sap", 2, CHARACTER_CLASS.ROGUE, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_enemy_minion_spell_target)§§    def use(self, player, game):§        super().use(player, game)§§        self.target.bounce()§
Card: Savage Roar NAME_END -1 ATK_END -1 DEF_END 3 COST_END -1 DUR_END Spell TYPE_END Druid PLAYER_CLS_END NIL RACE_END Common RARITY_END Give your characters +2 Attack this turn.

Python implementation:
class SavageRoar(SpellCard):§    def __init__(self):§        super().__init__("Savage Roar", 3, CHARACTER_CLASS.DRUID, CARD_RARITY.COMMON)§§    def use(self, player, game):§        super().use(player, game)§        for minion in player.minions:§            minion.change_temp_attack(2)§        player.hero.change_temp_attack(2)§
Card: Shadow Bolt NAME_END -1 ATK_END -1 DEF_END 3 COST_END -1 DUR_END Spell TYPE_END Warlock PLAYER_CLS_END NIL RACE_END Free RARITY_END Deal $4 damage to a minion.

Python implementation:
class ShadowBolt(SpellCard):§    def __init__(self):§        super().__init__("Shadow Bolt", 3, CHARACTER_CLASS.WARLOCK, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_minion_spell_target)§§    def use(self, player, game):§        super().use(player, game)§        self.target.damage(player.effective_spell_damage(4), self)§
Card: Shadow Word: Death NAME_END -1 ATK_END -1 DEF_END 3 COST_END -1 DUR_END Spell TYPE_END Priest PLAYER_CLS_END NIL RACE_END Common RARITY_END Destroy a minion with an Attack of 5 or more.

Python implementation:
class ShadowWordDeath(SpellCard):§    def __init__(self):§        super().__init__("Shadow Word: Death", 3, CHARACTER_CLASS.PRIEST, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_minion_spell_target, filter_func=lambda target: target.calculate_attack() >= 5 and target.spell_targetable())§§    def use(self, player, game):§        super().use(player, game)§§        self.target.die(self)§
Card: Shadow Word: Pain NAME_END -1 ATK_END -1 DEF_END 2 COST_END -1 DUR_END Spell TYPE_END Priest PLAYER_CLS_END NIL RACE_END Free RARITY_END Destroy a minion with 3 or less Attack.

Python implementation:
class ShadowWordPain(SpellCard):§    def __init__(self):§        super().__init__("Shadow Word: Pain", 2, CHARACTER_CLASS.PRIEST, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_minion_spell_target, filter_func=lambda target: target.calculate_attack() <= 3 and target.spell_targetable())§§    def use(self, player, game):§        super().use(player, game)§§        self.target.die(self)§
Card: Shattered Sun Cleric NAME_END 3 ATK_END 2 DEF_END 3 COST_END -1 DUR_END Minion TYPE_END Neutral PLAYER_CLS_END NIL RACE_END Common RARITY_END <b>Battlecry:</b> Give a friendly minion +1/+1.

Python implementation:
class ShatteredSunCleric(MinionCard):§    def __init__(self):§        super().__init__("Shattered Sun Cleric", 3, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, battlecry=Battlecry(Give([Buff(ChangeAttack(1)), Buff(ChangeHealth(1))]), MinionSelector(picker=UserPicker())))§§    def create_minion(self, player):§        return Minion(3, 2)§
Card: Sheep NAME_END 1 ATK_END 1 DEF_END 0 COST_END -1 DUR_END Minion TYPE_END Neutral PLAYER_CLS_END Beast RACE_END Common RARITY_END NIL

Python implementation:
class Sheep(MinionCard):§    def __init__(self):§        super().__init__("Sheep", 0, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, False, MINION_TYPE.BEAST)§§    def create_minion(self, p):§        return Minion(1, 1)§