//====== private methods

        private void CheckConditions()
        {
            Reason = string.Empty;

            if (snakeBody.IsConsumingTail)
            {
                Reason = "You ate yourself.";

                return;
            }

            if (terrain.Size.AsRectangle.Contains(snakeBody.Head()) == false)
            {
                Reason = "You left the field.";

                return;
            }

            if (applesGenerator.IsApplesLimitReached)
            {
                Reason = $"Too many apples on the field ({applesGenerator.MaxApples}).";

                return;
            }
        }
        public bool Move(Direction direction)
        {
            Point newPosition = snakeBody.Head().Add(direction.ToPoint());

            snakeBody.MoveHead(newPosition);

            CurrentDirection = direction;

            return(true);
        }