0

私はこのゲームをAS3で作成しました。このゲームは、英語の単語とフランス語の4つの可能な翻訳を表示します。XMLファイルからすべての単語をロードし、問題なく動作します(両方の言語で約1000語のプール)。

私がやりたかったのは、間違いを引き起こした単語を追跡して、生徒が正しくなるまでそれらを再提示できるようにすると同時に、すでに成功して使用されている単語に「マーク」を付けて、間違いを犯すようにすることです。二度と現れない。

私はこれについて長くて難しいことを考え、グーグルで検索しましたが、興味深いものは何もありませんでした。これが私が思いついたアイデアです。コメントして、正しい方向に向けてください。

私の語彙XMLファイルは次のようになります

<VOCAB>
<ENGLISH> The dog </ENGLISH>
<FRENCH> Le chien </FRENCH>
<VOCAB_ID> 0458 </VOCAB_ID>
<VOCAB_CATEGORY> 12 </VOCAB_CATEGORY>
</VOCAB>

IDEA1:すべてを追跡する追加のXMLタグを既存のファイルに含めます。利点:2つのXMLオブジェクトをロードして、それらを同時に処理する手間が省けます。ファイルサイズが小さいドローバック:スコアが語彙ファイルに関連付けられるため、ゲームを使用できるのは1人のプレーヤーのみです(ただし、追加のプレーヤー用に重複した語彙ファイルを作成できます)

<VOCAB>
<ENGLISH> The dog </ENGLISH>
<FRENCH> Le chien </FRENCH>
<VOCAB_ID> 0458 </VOCAB_ID>
<VOCAB_CATEGORY> 12 </VOCAB_CATEGORY>
<SCORE> -2 </SCORE> // Negative number indicates fails, zero = never used, pos number =  success
</VOCAB>

IDEA2:スコアを維持するためだけに新しいXMLファイルを作成する利点:それぞれが独自のスコアファイルを持つ無限の数のプレーヤーを持つことができます。語彙を維持し、2つの別々のものを獲得します。ドローバック:ゲームによって選択された新しい語彙ごとにXMLファイル全体が解析されないように、巧妙なプログラミングを行う必要があります。これにより、処理速度が低下します。

<TRACKING>
<VOCAB_CATEGORY> 12 </VOCAB_CATEGORY>
<VOCAB_ID> 0458 </VOCAB_ID>
<SCORE>-2</SCORE> // Negative number indicates fails, zero = never used, pos number =  success
</TRACKING>

どう思いますか?

4

4 に答える 4

2

フィードバック:

「vocab_id」を含めるのは賢明でした。これにより、ある種の「ルックアップテーブル」またはデータベースで識別子として使用する一意のキーが得られます。

この誤りをどのように追求するかということに関して、もしそれが私なら、私は間違いなく答えを言葉から切り離します。これにより、単語を含む「元のファイル」が多くの異なる結果データで「乱雑」になることがないため、やりたいことが何でもできるようになります。

vocab_idのおかげで、ユーザーの応答と単語の間にマッピングを作成する可能性があります。

この時点では、データをどのように保存するかは重要ではありません。xmlでそれを行うと、将来いつか簡単にすべてのデータをデータベースに入れることができます。今のところ最も重要なのは、データを保存して安全な場所に保存することです。(Git / Svn、バックアップなど)

将来的には、ある種のデータベースを使用してすべてのデータを保存し始めるのが賢明かもしれません。しかし、xmlを使い続ける場合は、データベースにxmlからのデータを取り込む小さなプログラムを作成するだけです。

次のステップとして、個々のユーザーごとにxmlファイルを作成し、そこにユーザーが回答した単語と、おそらく各単語で回答した単語を保存するか、すべてのユーザーと回答を含む1つのxmlファイルを作成する必要があると思います。

<words>
<vocab id="458" word="the dog">
<answer timestamp="..">le dog</answer>
<answer timestamp="..">la dog</answer>
<answer timestamp="..">le chien</answer>
</vocab>
<vocab id="404" word="foo">
..
</vocab>
</words>
于 2012-05-21T08:02:52.987 に答える
0

OK私は最終的にそれをクラックしました。

語彙リストはXMLオブジェクトとして読み込まれ、単語が正しく推測されると、そのノードがXMLから削除されます。このようにして、正しい単語が二度と聞かれることのないようにします。

同時に、テキスト変数は、ユーザーが必要なときに保存できるXMLとしてフォーマットされた(ただし、文字列として保持された)XMLとしてフォーマットされた(正しいかどうかまたはスキップされた)すべての回答のタブを保持します。

新しいゲームが開始されると、このファイルがロードされ(存在する場合)、このファイルがロードされるとすぐに、過去の正解がXMLオブジェクトから削除されます。

パフォーマンスに関しては、ファイルに1500以上のノードがあり、現時点では劣化は見られません。

于 2012-06-10T08:20:55.810 に答える
0

単語数とプレーヤー数を見ると、XMLは使用しません。SQLiteデータベースを使用します。プレーヤーごとにスコアを簡単に追跡できます。その隣で、すべてを外部キーとリレーショナルにすることができます。

于 2012-05-21T06:47:51.930 に答える
0

また、xmlよりもjsonをお勧めします。Jsonは、メモリ内でxmlよりもはるかに小さいです。XMLは、実装が構造を認識しておらず、特定の子などを解析する必要がある場合に適しています。コードが完全な構造を知っている場合、JSONははるかに高速です(フラッシュネイティブjsonを使用)

于 2012-05-21T07:09:33.090 に答える