Вступление

Кубик Рубика - популярная головоломка, цель которой состоит в том, чтобы собрать куб 3x3, сопоставив цвета с каждой стороны. Чтобы собрать куб, вам сначала нужно его перемешать. Существуют правила, как это сделать, но в целом схватка состоит из 20 случайных ходов, выполняемых последовательно. В этом посте я покажу вам, как реализовать скрембл в JavaScript. Код этого руководства можно найти на моем GitHub.

Схватка

Схватка - это последовательность из 20 ходов, которые выполняются над собранным кубом. Эти 20 ходов выбираются случайным образом из следующего набора ходов:

Каждая из вышеперечисленных букв - это вращения куба. Они означают:

  • F - Передний
  • R - Правый
  • U - верхний
  • B - Назад
  • D - Внизу (Вниз)

Одна буква означает, что вы вращаете грань куба по часовой стрелке. Если после буквы стоит ' (одинарная кавычка), вы перемещаете эту грань против часовой стрелки. Точно так же, если после буквы стоит 2, вы дважды перемещаете грань куба.

Например, F2 означает, что вы поворачиваете переднюю часть куба по часовой стрелке 2 раза. B ’ означает, что вы один раз повернули заднюю часть куба против часовой стрелки.

Вот отличный наглядный материал, который я нашел на ruwix.com, чтобы помочь вам лучше это понять.

Примеры схваток

Вот несколько примеров схватки куба. Именно для этого мы будем писать JavaScript.

Скремблер JavaScript

Теперь давайте приступим к написанию кода JavaScript, чтобы перемешать куб за нас.

Сначала я объявлю функцию с именем makeScramble ().

function makeScramble() {
    // function code here
}

Далее нам нужно объявить 2 массива. В первом массиве будут все параметры, которые я перечислил выше. Из этого массива мы будем выбирать ходы. Второй массив будет пустым. Вот где пойдет борьба.

var options = ["F", "R", "U", "B", "L", "D", "F2", "R2", "U2", "B2", "L2", "D2", "F'", "R'", "U'", "B'", "L'", "D'"]
var scramble = []

Давайте сделаем шаг назад и подумаем, как мы хотим подойти к следующей части. Нам нужно случайным образом выбрать один элемент в первом массиве и поместить его во второй массив. Затем нам нужно повторить это еще 19 раз, так что у нас есть схватка с 20 элементами.

Приступим к первой части. Чтобы случайным образом выбрать элемент в первом массиве, нам нужно сгенерировать случайное число от 1 до 18, а затем поместить любое движение с этим индексом в новую схватку. К счастью для нас, есть математическая библиотека JavaScript, которая может нам в этом помочь.

function getRandomInt(max) {
    return Math.floor(Math.random() * Math.floor(max));
}

Приведенный выше код делает несколько вещей. Во-первых, он объявляет функцию getRandomInt. Эта функция принимает значение макс. В нашем случае это значение будет 18, потому что мы хотим сгенерировать случайное число от 1 до 18. Внутренняя строка функции возвращает это случайное число для нас.

Толчок и поп

Теперь, когда у нас есть способ случайным образом получить элемент в первом массиве, нам нужно поместить его во второй массив. В JavaScript, как и в других языках, есть встроенные методы для выполнения общих задач. Один из этих методов называется push. Этот метод работает с массивами и позволяет нам поместить один элемент в массив. В нашем случае мы будем перемещать одну строку в массив.

scramble.push(options[getRandomInt(18)])

Приведенный выше код получает случайное int от 1 до 18 с помощью метода getRandomInt, получает соответствующее вращение куба по этому индексу в параметрах массива и помещает его в новый массив, скремблируя.

Если вы запустите этот код, в новом массиве будет только один ход. Чтобы поместить 20 ходов в массив, мы можем использовать цикл for.

for (var i = 0; i < 20; i++) {
  scramble.push(options[getRandomInt(18)])
}

Если вы запустите этот код, вы увидите, что массив с именем scramble теперь содержит 20 случайных ходов.

pop похож на push, за исключением того, что вместо добавления элемента в массив он удаляет последний элемент. Мы не используем это здесь, но я поднял его, потому что это противоположно push и очень полезно.

Заключение

Надеюсь, вам понравился этот пост и вы кое-что узнали из него! Подводя итог, мы рассмотрели нотацию и терминологию базового куба Рубика, поговорили о двух концепциях JavaScript: функциях и массивах, и, наконец, рассмотрели встроенные в массив методы, push и pop, и реализовали push с помощью цикла for. Если вам понравилось, пожалуйста, поделитесь этим постом и посетите мой личный сайт, где он был изначально опубликован. Удачного кодирования!