public GameEngine(Size fieldSize, IUserInputListener listener, IRenderer renderer, Action onGameOver = null)
        {
            _inputQueue = new InputQueue(HandleMovement);
            _timer = new GranularTimer(OnTimerCallback, 1000, 4);
            _onGameOver = onGameOver;
            var gameField = new GameField(fieldSize, _inputQueue);
            _moveHandler = new MoveHandler(gameField, renderer);

            _inputListener = listener;
            _inputListener.BindInputSerializer(_inputQueue);

            _log = new Logger();
            _log.Init(string.Format("width:{0};height:{1}", fieldSize.Width, fieldSize.Height));
        }
 public MoveHandler(GameField gameField, IRenderer renderer)
 {
     _gameField = gameField;
     _collisionDetector = new CollisionDetector(_gameField);
     _renderer = renderer;
 }
 public CollisionDetector(GameField gameField)
 {
     _gameField = gameField;
 }