hummingbird
@hummingbird

Как реализовать рулетку?

Стало интересно, как работают все эти рулетки на сайтах, а также как это все защищается от подмены.

Банальный пример - это сгенерированный массив значений.
Например, у нас есть уникальные значения:
items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Из них мы формируем уникальный массив значений для игры:
items_for_game = [3, 4, 4, 7, 1, 9, 10, 1, 4, 7, 6, 2, 9, 8, 2, 2, 10, 3, 6, 4 6, 4, 8, 9, 10, 4, 3, 6, 2, 4]


На сайте из них формируем горизонтальную ленту. Притом цикличную. Лента эта состоит из скрытой от глаза пользователя группы:
<input type="radio" name="items" value="тут номер из массива выше">

По нажатии на кнопку эта лента начинает крутится.
От стартовой скорости каждую секунду отнимается какое-то значение, что приводит к остановке ленты.

И вот на этом этапе назревает три основных вопроса:
1. Как реализовать прокрутку ленты? Ведь простым слайдом тут явно не обойтись? Или это все же банальный слайд?
2. Допустим, с первым пунктом разобрались. Как идентифицировать элемент? Я имею ввиду как идентифицировать выбранный элемент? Например, выбранным считается тот элемент, который оказался по центру блока после остановки ленты.
3. Как избавиться от мошенничества? Я прекрасно понимаю что все, что находится в HTML коде может без труда редактироваться пользователем. Включая те самые ID из input radio. Отсюда отпадает желание использовать input radio - в этом уже нет необходимости. Короче говоря, третий пункт тесно связан со вторым. Как это реализовать?

Могу предположить, что вместо массива items_for_game мы создаем объект items_for_game, с ключами от 0 до N. Далее получаем случайный номер элемента, к которому подгоняем остановку ленты (это уже не: "От стартовой скорости каждую секунду отнимается какое-то значение, что приводит к остановке ленты.").

В общем, знатоки, что скажете? :)
  • Вопрос задан
  • 639 просмотров
Пригласить эксперта
Ответы на вопрос 3
streetflush
@streetflush
Сервер выдает id картинки и он же решает какой номер выпадет, а кручение, это для красоты...
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
1. сервер выдаёт нужное число,
2. рулетка раскручивается на максимум и начинает вращаться на максимальной скорости (возможно даже, что очень медленно - это не принципиально),
3. анимация торможения позиционируется на нужный градус замкнутого колеса так, чтобы в момент останова выпало (как-бы))) нужное число (которое уже выдал сервер), и с этого момента рулетка начинает медленно останавливаться по формуле, попадая точно на это число.
4. Честность: генерация серии чисел вместе с порядком выпадения, хеширование этой последовательности с "солью", вывод хеша и длины серии (кол-ва спинов) до начала игры. После окончания серии спинов - показ "соли" и всего ряда чисел, чтобы люди могли проверить по публичной, известной всем хэш-формуле.
Ответ написан
Комментировать
alsopub
@alsopub
Главный вопрос "Как избавиться от мошенничества?"
Ответ на него - все решения должен принимать сервер и только на основе достоверных данных (которые менять может только сам сервер).
Остальное уже детали реализации интерфейса.
И даже в этом случае можно найти слабые места, если постараться, например зависимость выпадаемых чисел от текущего времени.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы