@startuml

class Bola {
    - shape: CircleShape
    - velocity: Vector2f
    - hasBounced: bool
    + Bola(radius: float, position: Vector2f, color: Color, velocity: Vector2f)
    + update(bounds: FloatRect): void
    + draw(window: RenderWindow): void
    + getBounds(): FloatRect
    + getColor(): Color
    + setPosition(position: Vector2f): void
    + getPosition(): Vector2f
}

class Cocodrilo {
    - sprite: Sprite
    - initialPosition: Vector2f
    - moveDistance: float
    - moveDirection: float
    - moving: bool
    - animationTime: float
    - score: int
    - moveClock: Clock
    - frameIndex: int
    - textureRect: IntRect
    - texture: Texture
    + Cocodrilo(texture: Texture, position: Vector2f, moveDirection: float)
    + moveForward(): void
    + update(deltaTime: float): void
    + draw(window: RenderWindow): void
    + getBounds(): FloatRect
    + increaseScore(): void
    + decreaseScore(): void
    + getScore(): int
    + resetAnimation(): void
}

class SoundManager {
    - ganoBuffer: SoundBuffer
    - menosBuffer: SoundBuffer
    - masBuffer: SoundBuffer
    - ganoSound: Sound
    - menosSound: Sound
    - masSound: Sound
    + SoundManager()
    + loadSounds(): void
    + playGanoSound(): void
    + playMenosSound(): void
    + playMasSound(): void
}

class Drawer {
    - window: RenderWindow
    + Drawer(window: RenderWindow)
    + drawBackground(background: Sprite): void
    + drawBolas(bolas: vector<Bola>): void
    + drawCocodrilos(cocodriloLeft: Cocodrilo, cocodriloRight: Cocodrilo): void
    + drawScore(scoreText: Text): void
    + drawGameOver(gameOverText: Text): void
}

class Timer {
    - clock: Clock
    + Timer()
    + restart(): float
    + getElapsedTime(): float
}

Bola --|> Drawer 
Cocodrilo "2" o-- "1" SoundManager 
Bola "*" *-- "1" Timer 
Cocodrilo "2" *-- "1" Timer 
Juego --|> Bola 
Juego --|> Cocodrilo 
Juego --|> SoundManager 
Juego --|> Drawer 
Juego --|> Timer 

@enduml
