В устройстве, описанном в первом издании книги
Данная функция была реализована при помощи управления питанием таймера 555. Таймер был всегда включен, но напряжение на его резистивно-емкостной цепочке отключалось, когда игрок прекращал нажимать кнопку запуска. С этого момента конденсатор большой емкости медленно разряжался, и таймер замедлялся по мере уменьшения напряжения.
Читатель по имени Жасмин Патри (Jasmin Patry) прислал мне электронное письмо, в котором сообщил, что когда он исследовал эту схему, слишком часто возникало значение «1», и он заподозрил, что это как-то связано с функцией замедления.
Оказалось, что Жасмин является разработчиком видеоигр и гораздо больше разбирается в теме случайных распределений, чем я. Он произвел впечатление вежливого и терпеливого человека, который знает, о чем говорит, и заинтересован помочь решить проблему, которую обнаружил.
После того как он прислал мне графики относительной частоты появления каждого числа, я вынужден был согласиться, что проблема существует. Я предложил множество возможных объяснений, и все они оказались неправильными. В итоге Жасмин доказал, что низкое потребление мощности единственным светодиодом в сравнении с более высоким потреблением мощности шестью светодиодами позволяет таймеру работать немного дольше, когда напряжение незначительное. Это увеличивало вероятность того, что он остановится в течение именно этого периода.
В результате Жасмин предложил альтернативную схему, в которую был добавлен второй таймер 555, а выходы от этих двух таймеров были объединены элементом Исключающее ИЛИ. Он успешно доказал, что это устраняет перекос в сторону числа «один». Я был в восторге от того, что один из моих читателей узнал так много, прочитав мою книгу, что смог выявить и устранить обнаруженную проблему.
В новом издании я опустил замедляющий конденсатор, который вызывал указанную проблему. Но я не привожу схему Жасмина, потому что она оказалась довольно сложной. Каждый кубик должен иметь собственную пару таймеров 555, а также, как он предлагал, элемент Исключающее ИЛИ. Он использовал также диоды, которые я заменил бы элементами ИЛИ, и тогда на макетной плате едва хватило бы места.
С его разрешения я бесплатно пришлю предложенную им схему любому, кто свяжется со мной (с помощью процедуры, описанной в предисловии). Я не могу привести ее здесь, потому что мне пришлось бы полностью перерисовать схему, чтобы уместить на странице.
Альтернативные варианты
Вы, возможно, думаете, что есть более простой способ замедлить отображение без влияния на случайный характер. При просмотре онлайн-ресурсов я обнаружил, что кто-то соединил эмиттер
Я также видел схемы с «замедляющим» конденсатором, как и у меня (например, на сайте Doctronics). Я думаю, что они почти наверняка страдают указанным недостатком.
Мой окончательный ответ может вас не удовлетворить: я не знаю, как достичь замедляющего эффекта, не добавляя компоненты, усложняющие схему.
И все же, когда написание этой книги подходило к завершению, мой друг и редактор Фредрик Янссон (Fredrik Jansson) предложил подавать питание на таймер 555 от отдельного стабилизатора напряжения, чтобы оградить его от колебаний напряжения в остальной части схемы. Мне понравилась эта идея, но уже не было времени проверить ее перед публикацией книги.
Я собрал совершенно другую схему для игральных костей на основе микроконтроллера PICAXE, но обнаружил, что он также имеет свои проблемы в связи с несовершенством генератора случайных чисел, встроенного в микросхему.
В эксперименте 34 (последнем в этой книге) вы обнаружите, что я создал еще один имитатор игральных костей, используя среду Arduino. Но опять-таки, мне пришлось положиться на встроенный генератор случайных чисел, а я не вполне уверен, что он создает равномерно распределенный диапазон случайных чисел.