私は安全なゲームのためにP2Pアーキテクチャに取り組んでおり、問題を5つのサブ問題に分けました。
- 送信されたゲーム状態の違法な変更
- 不正行為者を正確にドロップする
- ゲームの状態に同意する
- 「先読み」チートの回避
- 相手から機密情報を隠す
最初の4つはほとんどすべて解決しましたが、最後の1つが問題を抱えています。
詳細に入る前に、「チートプルーフ」p2pネットワークの作成リストに見落としているものがあるかどうかを尋ねたいだけです。私はエイムボットの使用などのチートには興味がありません。p2pネットワークを集中サーバーと同じくらい安全にすることにだけ興味があります。
そのため、これまでの機密情報の非表示の努力では、対戦相手の位置が常に知られるべきではないゲームのプレイヤーの位置に焦点を当ててきました。問題は、対戦相手の位置を知らずに自分の位置を対戦相手に送信するかどうかを決定する方法になります。
相手があなたのポジションを比較するために複数の間違ったポジションを送信するなどの方法を除外しました。なぜなら、相手はそのようなシステムを簡単に乱用できるからです。
私は、相手から「視野」を受け取り、それによって自分の位置を送信するかどうかを決定できる方法に焦点を合わせてきました。ただし、これは、League of Legendsなどのゲームでは、対戦相手の視野も非常に機密情報であるという問題です。特異行列を使用して視野を変換することでこれを解決しようとしましたが、つまり、視野の変換バージョンから元のバージョンに戻すことはできませんが、それは線形変換であるため、位置が内部にあるかどうかを把握することができます視野かどうか。
ただし、これは完全には機能せず、変換後に正確な視覚フィールドを復元することはできませんが、視覚フィールドの「勾配」に関する情報(視野は複数の線で構成され、各線の勾配を決定できます)元の視野を比較的安価に再構築するために使用できます。
本質的に、私が必要とするのは、位置が「見える」かどうかを判断できる関数であり、この関数/視野の再構築は、視野の再構築が完了するともはや関連しないように計算的に要求する必要がありますアクションのゲーム。そのような方法を偶然知っている超賢い人はいますか?
編集 人々は「ビジョンフィールド」全体について混乱しているので、ここでより詳細な説明を行うことを目指します。ビジョンフィールドは一連の線のグループで構成されます。位置が線のどちら側にあるかを確認するだけで、位置がこれらのグループのいずれか内にあるかどうかを簡単に確認できます。それはそのグループ内にあり、したがって視野内にあります。
ただし、送信される情報はこの行ではなく、行と変換(2 x 2の特異な行列)の変換であり、受け取った変換を使用して最初に変換することにより、行のどちら側にあるかを確認できます。その値を変換された線と比較します。ここで重要なのは、変換が特異であるということです。つまり、元の行に戻る逆行列を見つけることは不可能です。しかし、線の原点を正確に特定するまで、変換された線のどちらの側に多くの点があるかをチェックするだけで、線の再構築を行う線の勾配を決定することができます線の勾配。
私が探しているのは、ポイントがエリア内にあるかどうかを判断するための方法です。エリアからメソッドを再構築することは不可能であるか(いつでもブルートフォースをかけることができるため、存在するのではないか)、または計算量が非常に多くなります。