Коротка відповідь - ви не можете цього зробити. Все, що працює на стороні клієнта, особливо з джерела, можна змінити, щоб тривіально перемогти вашу тактику. Якщо ви встановите контрольну сторону клієнта для пошуку різких змін, користувач може просто відключити її.
Хороша новина полягає в тому, що, як правило, дуже мало обману в одиночних іграх. Єдиним головним винятком є ігри, у яких є великі спільноти "ютуб-рейтингу", такі як Line Rider, де гравці змагаються між собою через YouTube.
Якщо ви прагнете до цього, або просто занадто вперті, щоб визнати, що люди можуть обдурити в грі, або самі ведете високі бали (що є формою мультиплеєра), тоді вам потрібно зробити всі розрахунки на стороні сервера . Так, все, що має значення. Ви навіть не можете повторити клієнтську сторону обчислення, щоб спробувати дати користувачеві бал, а потім "підтвердити" його на сервері, оскільки користувач може просто відключити перевірку та відключити будь-яку систему, яка забезпечує перевірку.
Я хотів би, щоб на це була краща відповідь, але немає.
Однак, є такі речі, які ви можете зробити, щоб трохи важче обдурити. Вони не завадять нікому серйозно робити це і випускають інструментарій для обману, але це сповільнить їх:
- Мінімізуйте та заблокуйте свій JS, що абсолютно зробить код важчим для читання. Ви можете де-мінімізувати та сортувати знешкодження, але ви ніколи не зможете отримати правильну назву змінної та функції, а також коментарі.
- Випікайте значення з іншою мовою. У цьому випадку ви можете використовувати PHP або інші серверні мови для обробки статичних змінних параметрів. Якщо відстань стрибка завжди повинна становити 2 пробіли, зазвичай слід визначити відстань стрибка для об’єкта гравця. Не працюйте з PHP, щоб джерело JS закінчувалося 2-мами, замазаними по всьому коду в мільйоні місць. Це має щасливий додатковий побічний ефект того, що ви також можете прискорити свій JS.
- З деякою практикою ви отримаєте досвід у поєднанні, і навіть зможете скласти свій JS для кожного гравця. Це ще один спосіб запобігти обману. Якщо код кожного гравця якимось чином відрізняється, тоді важче написати чіт, який може бути частиною набору інструментів.
- Нарешті, ви можете перевірити суму джерела на основі особи гравця. Скажіть їх IP-адресу та / або ім’я користувача. Ви знаєте, якою буде версія для гравця JS, ви можете запікати в контрольній сумі і вимагати, щоб вона була такою ж на іншому кінці. Легко відключити, як і будь-який JS на стороні клієнта, але ще раз ускладнює створення інструментарію.
Так. Як бачите, йти цим маршрутом, мабуть, не варто. Це важко. Вимагає багато дійсно нерозумних методів кодування, і в кінцевому рахунку все-таки відносно легко перемогти. Вам потрібно буде виконати всі розрахунки на стороні сервера, щоб запобігти обману. Або відпустіть і прийміть, що обман трапиться.