@startuml

class User {
    +openApp()
    +selectMenuItem(menuItem: MenuItem)
    +navigateToSettings()
    +startGame()
    +viewStatistics()
}

class GameMenu {
    +displayMenu()
    +handleMenuItemSelection(item: MenuItem)
}

class Settings {
    +displaySettings()
    +saveSettings(newSettings: Settings)
}

class StartGame {
    +loadLevel(levelName: String)
    +placeCoins()
    +displayCharacter(character: Character)
    +displayInfoBlock(infoBlock: InfoBlock)
}

class Statistics {
    +updatetStats(stats: Stats)
    +saveStats(stats: Stats)
    +displayStats(stats: Stats)
}

class CollectedCoins {
    +displayCoinsAmount(coins: Coins)
    +updateCoinAmount(newAmount: Int)
    +saveResult(result: Result)
}

class Coin {
    +displayCoins(coin: Coin)
    
}

class CharacterMovement {
    +moveCharacter(direction: Direction)
    +jump()
}

class Character {
    +collectCoin(coin: Coin)
    +move(direction: Direction)
}

class GameState {
    +displayState(state: State)
    +updateState(newState: State)
}

User -.-> GameMenu : uses >
User --->  CharacterMovement : moves >
User --->  GameState : interacts >
GameMenu o-- "StartGame" : starts >
GameMenu o-- "Settings" : uses >
GameMenu o-- "Statistics" : views >
CollectedCoins --> Character
Character --> "Statistics"


Coin <|-- Character
CharacterMovement ---|> Character
Coin ---> CollectedCoins

@enduml