Короткий ответ: ты не можешь этого сделать. Все, что работает на стороне клиента, особенно из источника, может быть модифицировано, чтобы тривиально победить вашу тактику. Если вы установили средство проверки на стороне клиента для поиска резких изменений, пользователь может просто отключить средство проверки.
Хорошая новость заключается в том, что, как правило, в однопользовательских играх очень мало читерства. Единственное серьезное исключение - игры, в которых есть большие сообщества «рекордов YouTube», такие как Line Rider, где игроки соревнуются друг с другом за YouTube.
Если вы стремитесь к этому, или просто слишком упрямы, чтобы признать, что люди могут обманывать в игре, или ведете высокие рекорды самостоятельно (что является формой многопользовательской игры), то вам нужно выполнить все вычисления на стороне сервера. , Да, все, что имеет значение. Вы даже не можете повторить подсчет на стороне клиента, чтобы попытаться дать пользователю оценку, а затем «проверить» ее на сервере, потому что тогда пользователь может просто отключить проверку и отключить любую систему, которая обеспечивает проверку.
Хотелось бы, чтобы был лучший ответ на это, но нет.
Тем не менее, есть вещи, которые вы можете сделать, чтобы немного сложнее было обмануть. Они не помешают кому-либо серьезному сделать это и выпустить набор инструментов для обмана, но это замедлит их:
- Сократите и запутайте свой JS, что абсолютно затруднит чтение кода. Вы можете де-минимизировать и сортировать-де-обфускацию, но вы никогда не сможете вернуть правильные имена переменных и функций или комментарии.
- Выпекать в ценностях с другим языком. В этом случае вы можете использовать PHP или другие серверные языки для обработки статических переменных установки. Если расстояние прыжка всегда должно быть 2 пробела, обычно вы определяете расстояние прыжка для объекта игрока. Не обрабатывайте это с помощью PHP, чтобы исходный код JS заканчивался с 2s, намазанными по всему коду в миллионе мест. Это имеет счастливый дополнительный побочный эффект от возможности ускорить ваш JS тоже.
- С некоторой практикой вы получите опыт в миксе, и вы даже можете создать свой JS для каждого игрока. Что является еще одним способом предотвращения обмана. Если код каждого игрока отличается, то сложнее написать чит, который может быть частью инструментария.
- Наконец, вы можете проверить контрольную сумму источника на основе личности игрока. Скажите их IP-адрес и / или имя пользователя. Вы знаете, какой будет версия JS для конкретного игрока, вы можете запечь контрольную сумму и потребовать, чтобы она была такой же на другом конце. Легко отключить, как и любой JS на стороне клиента, но еще раз усложняет создание инструментария.
Так. Как видите, идти по этому пути, наверное, не стоит. Это трудно. Требует большого количества действительно глупых методов кодирования, и в конечном итоге все еще относительно легко победить. Вам нужно будет выполнить все вычисления на стороне сервера, чтобы предотвратить мошенничество. Или отпусти, и признай, что обман случится.