Остальная часть кода, строки 7-58 выполняются для каждого слова в массиве wordlist. Мы случайным образом выбираем размещение для текущего слова (горизонтальное, вертикальное или горизонтальное). Затем мы случайным образом выбираем направление для порядка слова (прямой или обратный). После этого, в строке 9 мы создаем переменную с именем tempWord (временноеСлово), которая хранит текущее слово. Мы также создаем переменную с названием wordLength (длинаСлова) для хранения длины слова. В строке 11 мы создаем объект, которые хранит tempWord, размещение и направление слова и помещает его в массив listings (списки). Этот массив используется позднее для определения, было ли выбрано слово. Мы рассмотрим этот момент подробнее в следующем разделе. Если случайно выбранное направление равно обратному, то мы переворачиваем порядок букв в tempWord (строка 12).
То, что происходит дальше, зависит от размещения, которое было выбрано случайно. Здесь присутствует огромный условный блок с одной ветвью для каждого из трех возможных размещений. Каждая из этих трех ветвей работает совершенно одинаково. Я объясню, что происходит для горизонтальной ветви, и затем упомяну о незначительных отличиях в других двух ветвях.
Если скрипт выбрал горизонтальное размещение, то выполняется «горизонтальная ветвь» (строки 15-28). Мы устанавливаем переменную с именем notDone (неСделано) в true. Затем мы выполняем цикл while (пока), который будет выполняться до тех пор, пока notDone не перестанет быть равной true. В цикле мы случайным образом выбираем строку для слова, которое должно появиться. Затем мы случайным образом выбираем позицию x для начала слова. Эта случайная начальная позиция не является полностью случайной; мы исходим из ширины сетки, минус длина слова. Так, если ширина сетки 20 и длина слова равна 7, то мы можем начать слово в строке 13 или ранее. В этом месте мы имеем строку, в которой размещается слово и начальную позицию x, которая эквивалентна выбору случайной колонки