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. Далее получаем случайный номер элемента, к которому подгоняем остановку ленты (это уже не: "От стартовой скорости каждую секунду отнимается какое-то значение, что приводит к остановке ленты.").

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

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

Войти через центр авторизации
Похожие вопросы