private void Play(Scene scene)
        {
            _updatesCounter++;

            if (_updatesCounter > PipeTimeInterval)
            {
                _updatesCounter = 0;

                var pipeYPos = MinimumPipeYPos + _random.NextDouble() * (MaximumPipeYPos - MinimumPipeYPos);

                var pipeUp = _entityFactory.CreatePipe();
                pipeUp.GetComponent <Transform2DComponent>().Translation = new Vector2(PipeInitialXPos, pipeYPos);
                pipeUp.AddComponent(_entityFactory.CreateIncrementScoreComponent());
                scene.AddEntity(pipeUp);

                var pipeDown                = _entityFactory.CreatePipe();
                var pipeDownTransform       = pipeDown.GetComponent <Transform2DComponent>();
                var spriteRendererComponent = pipeDown.GetComponent <SpriteRendererComponent>();

                Debug.Assert(spriteRendererComponent.Sprite != null, "spriteRendererComponent.Sprite != null");
                var pipeHeight = spriteRendererComponent.Sprite.Rectangle.Height * pipeDownTransform.Scale.Y;
                pipeDownTransform.Translation = new Vector2(PipeInitialXPos, pipeYPos + pipeHeight + GapBetweenPipes);
                pipeDownTransform.Scale       = pipeDownTransform.Scale.WithY(-pipeDownTransform.Scale.Y);
                scene.AddEntity(pipeDown);
            }
        }