簡単な答えは、あなたはそれができないということです。特にソースからクライアント側を実行するものはすべて、あなたの戦術を簡単に打ち負かすために修正できます。クライアント側のチェッカーを配置して突然の変更を探す場合、ユーザーはチェッカーを無効にするだけです。
幸いなことに、一般的に、シングルプレイヤーゲームではごまかしがほとんどありません。唯一の大きな例外は、Line Riderのような大規模な「youtubeハイスコア」コミュニティを持つゲームです。プレーヤーはYouTubeで互いに競います。
あなたがそれを目指している場合、または人々がゲームでチートする可能性があることを受け入れるにはあまりにも頑固である場合、またはマルチスコアの形式である自分でハイスコアを維持している場合、あなたがしなければならないことはサーバー側のすべての計算です。はい、すべてが重要です。ユーザーがチェックを無効にし、チェックがあることを確認するシステムを無効にすることができるため、計算クライアント側を繰り返してユーザーにスコアを与えてからサーバーで「検証」することさえできません。
これに対するより良い答えがあればいいのですが、ありません。
とはいえ、不正行為を少し難しくするためにできることはいくつかあります。真面目な人がそれを実行してツールキットをリリースしてチートするのを止めることはありませんが、遅くなります:
- JSを縮小して難読化します。これにより、コードが読みにくくなります。難読化を解除して並べ替えることはできますが、正しい変数名や関数名、コメントを取得することはできません。
- 異なる言語で値を焼き付けます。この場合、PHPまたは他のサーバー側言語を使用して静的セットアップ変数を処理できます。ジャンプ距離が常に2スペースであると想定される場合、通常はプレーヤーオブジェクトのジャンプ距離を定義します。それをPHPで処理しないでください。そうすれば、JSソースは、コード全体で数百万の場所に2が塗られてしまいます。これには、JSも高速化できるという嬉しい追加の副作用があります。
- ある程度練習すれば、ミックスに習熟し、各プレーヤーのJSをカスタムビルドすることもできます。不正行為を防ぐもう1つの方法です。各プレーヤーのコードが何らかの形で異なる場合、ツールキットの一部になる可能性のあるチートを書くことは困難です。
- 最後に、プレーヤーのIDに基づいてソースをチェックサムできます。IPアドレスやユーザー名を言います。JSのプレーヤー固有のバージョンが何であるかを知っているので、チェックサムを焼いて、反対側で同じであることを要求できます。クライアント側のJSのように簡単に無効にできますが、ツールキットを作成するのが少し難しくなります。
そう。ご覧のように、おそらくこのルートに行く価値はありません。それは難しい。多くの本当に馬鹿げたコーディングを行う必要があり、最終的には比較的簡単に打ち負かされます。不正行為を防ぐために、サーバー側ですべての計算を行う必要があります。または手放し、不正行為が発生することを受け入れます。