回答:
整数のスコアをサーバーに送信するだけではありません。スコアが現実的であることを確認するために使用できるゲーム統計のコレクションを送信します。または、スコアを計算するための事前共有キーを実装できます。ゲーム全体で増分スコアと統計を送信し、増加が妥当であることを確認できます。
しかし、私はそれについてあまり心配しません。上記の提案により、より困難になりますが、偽のスコアを送信することは不可能ではありません。ただし、ゲームを少し難しくするだけであれば、ゲームをプレイする大多数の人はそれをだまそうとすることに興味を持ちません。
ゲームとサーバーとの通信を許可する方法に注意してください。ゲームをハッキングのサーバーへのエントリポイントにしたくない場合。入力を常に検証し、クライアントを決して信頼しないようにしてください。
Byte56が言ったように:「クライアントを決して信用しない」、しかし:
クライアントを信頼することには代償
が伴います。サーバーですべてのゲームをプレイすると、インフラストラクチャのコストが大幅に増加します。
ほとんどのプレーヤーがチートせず
、少し時間が経つとトップのハイスコアが落ち着き、多くの変化を止めると仮定します
中間の方法があります。
ゲームを(クライアントで)記録します。
(非常に簡単なゲームタイプ(チェスなど)または少し複雑なゲームタイプ(マルチプレイヤーFPSなど)によって
異なりますが、常に実行可能です。)
プレイヤーがゲームを終了したら、スコアを送信するだけです。
スコアがトップの特定の範囲内にある場合(トップ1%またはトップ5など)
、プレーヤーに記録されたデータを要求
し、サーバーでそのゲームをリプレイします。
スコアが一致する場合、スコアを受け入れます。
この方法では、ほとんどの再生でサーバー側のリソースを追加する必要はありませんが
、トップスコアが有効であることを確認できます。
ソーシャルリーダーボードを使用するなどして、不正行為に対する社会的動機を減らします(不正行為は、ほんの一握りの友人に見栄えを良くするだけで、誰にとっても損ないません)。
サーバーで確認します。Joel Poloneyは、Game Developer 2012 9月の「Scale Your Online Game」で優れたテクニックを書きました。
チートプルーフのオンラインゲームを作成する場合は、サーバー上のすべてのゲームロジックを処理する必要があります。クライアント側で発生するすべてのことは、ユーザーが制御および操作できます。暗号化や難読化などの手法を試すことができますが、最終的には、十分に決定された誰かが回避できる、あいまいさによるセキュリティに過ぎません。
確かに、サーバー上で実行されるゲームは開発がはるかに複雑であり、サーバー側でより多くのリソースを必要とし、ネットワークレイテンシはゲームエクスペリエンスに有害です(特にテンポの速いゲームの場合)プレイヤーの不正行為を防ぎます。