@@startuml

abstract class Entity {
    # name : string
    # age : int
    # coins : double
    # health : int
    # stamina : int
    # category : string
    # level : int
    # is_stunned : bool
    # CATEGORIES const static: string[]
    # MAX_NAME_SIZE const : int
    + Entity()
    + Entity(const Entity &)
    + {abstract} attack(Entity &) : void
    + print_info() const : void
    + virtual talk() : void
    + virtual walk() : void
}

class Human {
    + Human()
    + Human(const Human &)
    + virtual attack(Entity &) : void
}

class Witcher {
    - WITCHER_ATTACK_COST const : int
    - MAX_WITCHER_DAMAGE const : int
    - MIN_WITCHER_DAMAGE const : int
    - max_sword : int
    - count_sword : int
    - swordsPtr : Sword*
    - resize_swords() : void
    + Witcher()
    + Witcher(const Witcher &)
    + attack(Entity &) : void
}

class Sword {
    - name : string
    - damage : int
    - MAX_NAME_SIZE const static : int
    + Sword()
    + Sword(const Sword &)
    + print_info() const : void
}

class Ghoul {
    - GHOUL_ATTACK_COST const static : int
    - MAX_GHOUL_DAMAGE const static : int
    - MIN_GHOUL_DAMAGE const static : int
    + Ghoul()
    + Ghoul(const Ghoul &)
    + attack(Entity &) : void
    + talk() : void
    + walk() : void
}

class Battle {
    - MAX_ALLIES const static : int
    - MAX_ENEMIES const static : int
    - allies[] : Entity*
    - enemies[] : Entity*
    + Battle(Entity&, Entity&)
    + print_allies() const : void
    + print_enemies() const : void
    + add_ally(Entity&) : void
    + add_enemy(Entity&) : void
    + check_allies() : bool
    + check_enemies() : bool
    + beginBattle() : void 
}

Entity <|-- Human
Human <|-- Witcher
Entity <|-- Ghoul

@@enduml