public static GameRoot CreateGameRoot(
            IInputDevice inputDevice,
            IDisplayDevice displayDevice,
            IAudioDevice audioDevice,
            IHiScoresStorage hiScoresStorage,
            ILogger logger)
        {
            Verify.NotNull(inputDevice, nameof(inputDevice));
            Verify.NotNull(displayDevice, nameof(displayDevice));
            Verify.NotNull(audioDevice, nameof(audioDevice));
            Verify.NotNull(hiScoresStorage, nameof(hiScoresStorage));
            Verify.NotNull(logger, nameof(logger));

            var hal = new HardwareAccessLayer(inputDevice, displayDevice, audioDevice);

            var sleeper = new Sleeper();

            var gameRoot = new GameRoot(hal, sleeper, logger);

            return(gameRoot);
        }
        //====== ctors

        public GameRoot(HardwareAccessLayer hal, ISleeper sleeper, ILogger logger)
        {
            this.hal     = Verify.NotNull(hal, nameof(hal));
            this.sleeper = Verify.NotNull(sleeper, nameof(sleeper));
            this.logger  = Verify.NotNull(logger, nameof(logger));
        }