0

XNAを使ってWP7用のカジュアルなワードゲームを作る予定です。ゲームの仕組みは私が実装するのに十分ですが、それは彼らが作る単語が実際に単語であるかどうかを確認するだけです。

最初にテキストファイルを持ってそれをメモリにロードすることを考えましたが、確かにこれは電話のメモリに保持することはできませんか?また、これから単語であるかどうかを確認するのにどれだけ時間がかかるでしょうか。それらはどのようにメモリに保存されますか?辞書/ハッシュマップを使用するのが最善で、それぞれkeyが単語であり、そのキーが存在するかどうかを確認するだけですか?それとも、それらを配列に入れますか?

これを実装するための最良の方法に固執しているので、どんな入力でも大歓迎です。ありがとう

4

2 に答える 2

3

携帯電話のハードウェアによっては、おそらくテキスト ファイルをメモリにロードするだけで済みます。英語にはおそらく数十万語しかありません。平均的な単語が約 5 文字程度であると仮定すると、それはおよそメガ データです。そのファイルをメモリ内で管理するオーバーヘッドがありますが、それはハードウェアの詳細が重要です。ところで、現在の世代の携帯電話に 1 ギガの RAM が搭載されていることは珍しくありません。

単語辞書用のテキスト ファイルを必要とする次の関連する SO の質問を参照してください。

辞書テキストファイル

于 2012-06-27T18:19:14.873 に答える
1

辞書全体であっても、テキストファイルをメモリに入れることは、seth flowers言ったようにそれほど悪くはないはずです。単語を保持するための適切なデータ構造を選択することが重要になります。

言葉をキーにした辞書はお勧めしません...正直言ってばかげています。キーだけがあり、値がない場合、辞書は何が良いですか?ただし、Dictionaryのアイデアは順調に進んでいる可能性があります。私が最初に試みるのはDictionary<char, string[]>、キーが最初の文字であり、値がその文字で始まるすべての単語のリストである、です。もちろん、その配列は非常に長くなり、配列の検索時間は遅くなります(ただし、文字のハッシュは一意であるため、キーの検索は厳密である必要があります)。利点は、適切な.txt辞書ファイルを使用して各単語を順番にロードすると、リストがアルファベット順に並べられていることがわかることです。したがって、バイナリ検索などの効率的な検索手法や、事前に並べ替えられたリスト用に作成された任意の数の検索を使用できます。結局、それほど遅くはないかもしれません。

ただし、さらに詳しく知りたい場合は、予測テキストの基礎となる構造を使用できます。これは、PatriciaTrieまたはRadixTrie(Wikipedia)と呼ばれます。最初の文字から始めて、次のいずれかになるまで、考えられるすべてのブランチを処理します。

  1. ユーザーが入力した単語を組み立てて、有効な単語にします
  2. ブランチの終わりに到達します。この言葉は存在しません。

この種の問題に対処するために「試行」が行われました。私はコードでこれを表現したことがないので、私はあなたにポインタを与えることができないのではないかと思います(ba dum tsh!)が、インターネット上でそれを行う方法についての豊富な情報があるでしょう。Trieを使用するのがおそらく最も効率的な解決策ですが、上記のようなアルファベット辞書がバイナリ検索を使用して十分に高速であることがわかった場合は、実際のゲームプレイを開発する間、今のところそれを維持することをお勧めします。ゲームを開始したばかりのときに最良の解決策を見つけることに行き詰まると、それを成し遂げるための情熱が失われる傾向があります。パフォーマンスの問題が発生した場合は、改善を行います。少なくとも、ゲームを設計するときの私の哲学です。

良い点は、Windows Phoneは基本的に2つの異なる仕様しかサポートしていないため、アプリをテストしてスムーズに実行されることを確認したら、さらに悪い条件に合わせて最適化することを心配する必要がないことです。だから、うまくいくものを使ってください!

PS:Windows Phoneでは、テキストファイルの読み込みには注意が必要です。これがあなたを助けるはずの問題に関する投稿です。

于 2012-06-27T19:53:05.123 に答える