Перейти к содержимому

Случайность и шум

Две операции про непредсказуемость: одна каждый раз разная, вторая плавная

среднийНужно знать: op: целые и точность

rand даёт случайное число от нуля до заданного, не включая его самого, и число это дробное. Кубик из него получается в две строки: сначала бросок, потом округление вниз.

тик 0
Операция0
=
Операция1
=
Операция2
=
@counter0number
бросокnullnull
кубикnullnull

op rand бросок 6 даёт дробное число меньше шести — скажем, 2.09; floor отрезает дробь и оставляет 2; прибавили единицу — вышло от 1 до 6, как у настоящего кубика. Нажмите «шаг» несколько раз: бросок будет каждый раз новый.

Порядок здесь важен. Если сперва округлить rand 5, а потом прибавить, шестёрка выпадать не будет вовсе; если взять rand 7 и округлить, изредка выпадет семь. Кубик на N граней — это всегда rand N, floor, add 1.

Нажмите «сначала» и прогоните пример заново — выпадет то же самое. В игре так не бывает: там генератор засевается при запуске случайно, и одна и та же программа каждый раз даёт разные числа.

Здесь зерно закреплено намеренно: урок обещает числа, тесты их проверяют, а пример, который каждый раз показывает разное, ничему научить не может. Помните об этом, когда перенесёте программу в игру: там повторов не будет.

тик 0
Операция0
=
Операция1
=
Операция2
=
@counter0number
тутnullnull
рядомnullnull
далекоnullnull

noise берёт две координаты и отдаёт число примерно от −1 до 1. Оно не случайное: у одной и той же точки ответ всегда один, а у соседних — почти одинаковый.

В примере точки (10, 10) и (10.01, 10) дали −0.524 и −0.520 — соседи, и ответы рядом. А (40, 10) далеко, и ответ там совсем другой: 0.908.

Именно этим шум и полезен. Случайное число прыгает, и построенное на нём мерцает; шум меняется плавно, поэтому из него выходят холмы, пятна руды, разводы на карте — всё, что должно выглядеть неровным, но не рваным. Игра рисует им местность, а в логике им удобно задавать плавно гуляющее значение: скорость, задержку, яркость.

Неофициальный проект, с Anuke не связан. Спрайты, шрифты и переводы Mindustry © Anuke, используются по GPL-3.0; Fira Code — по OFL-1.1. Код сайта — GPL-3.0.