web-dev-qa-db-ja.com

ゲームをGoogleドライブと同期する

Androidゲームを構築し、ユーザーの進行状況を同期するためにGoogleドライブを使用しています。

ライト今私はドライブにファイルを同期するメカニズムを構築します。このファイルには、ゲームの進行情報やユーザー設定が含まれている場合があります。

ユーザーは私のゲームをオフラインでプレイでき、接続が利用可能になると、進行状況が保存されます。

これにより、いくつかの問題のあるシナリオが発生しました。

  • ユーザーはタブレットでプレイしており、進行状況が保存されています。翌日、彼はインターネットに接続されていない携帯電話で遊んでいて、少し進歩してから、インターネットに接続してアプリケーションに再び入りました。だから私は2つのファイルを手に入れた。彼がオフラインでプレイしたときのローカルの変更と昨日からのタブレットでの進捗状況だ。私は何をすべきか?

    1. ドライブ上の最新のファイルであるため、タブレットの進行状況を使用します
    2. ハンドセットの進捗状況は、2つのファイルのうち最新のものであるため、使用してください。
    3. 問題をユーザーに提示し、ユーザーに決定させます。
  • 上記と同じシナリオですが、ゲームの途中でのみ発生しています。突然、接続が確立され、昨日から別のデバイスで進捗状況がわかります。

2
Ilya Gazman

オフラインになる可能性のある2つのソースからファイルを同期することは、常に意味のある方法で解決することが基本的に不可能である難しい問題です。これの証拠として、ゲームの保存ではなく、ソースファイルのこの問題を解決するためにプログラマーが使用するツールの複雑さだけを調べてください。

明確にするために、私はではありませんこれらの1つを使用することを提案しています!問題の広範囲にわたる未解決の性質を説明するだけです。

あなたが触れたように、問題はファイルを同期することではなく、ファイルが2つの異なる方法で変更されたときに何をすべきかを決定することです。あなたが述べたように、1つのオプションは、単に他のバージョンよりもファイルの1つのバージョンを選択することです。ただし、どちらを選択するかは非常に困難です。

前述のソース管理ツールと同様に、ファイルをマージすることもできます。そうすることで、両方のファイルを見て、何が変更されたかを判断し、両方の変更セットを含む新しいファイルを作成しようとします!

これは必然的に、ソース管理ツールがマージの競合を呼び出す場合があります-2つのファイルが以前のバージョンと比較して相互に互換性のない編集があり、ソフトウェアが正しい解像度を決定できない場合。マージの競合を解決するためのUIは厄介で直感的ではないので、どのファイルを保存するのが適切かをプレイヤーに尋ねた方がよいでしょう。

ただし、ゲームによっては、チートできる場合があります。ゲームに互換性のない決定がない場合(例:ストーリーの分岐)、最高の価値を維持することができます。これについてもう少し詳しく見てみましょう...

オンラインの保存ファイルのレベル1、2、3にそれぞれ1つ星があるとします。ユーザーはタブレット(オフライン)でゲームをプレイし、レベル1で3つ星を獲得します。ユーザーは携帯電話(オフライン)でゲームをプレイし、レベル2で3回のスタートを獲得します。ユーザーが突然電話にインターネット接続を取得し、ゲームが自動的にクラウドに保存されます。次に、ユーザーはタブレットでWi-Fiに接続してゲームをロードします。ゲームは何が起こったかを認識し、両方のレベルで3つ星を表示します。

ゲームが相互に互換性のない決定を行う場合がある場合、複数の保存ファイルをサポートし、マージの競合が発生した場合は、新しいファイルを(ローカル時間で)保持することをお勧めします)、古いものをバックアップとしてリストに保存します。

1
DallonF