データ構造

今回はタイピングゲームアルゴリズムで使用する

データ構造について解説します。

 

「はじめに」でも書いた通り、

さまざまな入力パターンをサポートできるようなデータ構造となっています。

Marionetteでは以下のような構造体を定義しています。

    public struct PatternTip
    {
        // アルファベットパターン
        public string Alphabet;
        // 残り文字
        public string Remainder;
    }

上記の構造体は

  1.入力するアルファベット(Alphabet)

  2.Alphabetを入力することで残るひらがな(Remainder)

をセットとして保持します。

 

入力対象のひらがなと、

上記構造体の配列をセットで作成することで

さまざまな入力パターンのサポートが可能になります。

 

少し分かりにくいと思うので、下に例を挙げます。

 

入力パターン①

  入力対象のひらがな: 「しゃ」

  入力候補(PatternTipの配列)

      ・Alphabet:「sha」, Remainder:「」

      ・Alphabet:「sya」, Remainder:「」

      ・Alphabet:「shi」, Remainder:「ゃ」

      ・Alphabet:「si」, Remainder:「ゃ」

      ・Alphabet:「ci」, Remainder:「ゃ」

 

入力パターン②

  入力対象のひらがな: 「ゃ」

  入力候補(PatternTipの配列)

      ・Alphabet:「lya」, Remainder:「」

      ・Alphabet:「xya」, Remainder:「」

 

 

上の2パターンを作成すると、

「しゃ」という文字を

さまざまなアルファベットパターンで入力可能になります。

 

一般的に「sha」、「sya」と入力しますが、

[し」+「ゃ」と考えることもできます。

 

Marionetteでは上記のように「し」のパターンを

PatternTipのAlphabetにすべて展開していますが、

 

「しゃ」=

    「sha」、「sya」

    +

    「し」+「ゃ」

 

「し」=

    「shi」、「si」、[ci」

 

「ゃ」=

    「lya」、「xya」

 

と定義すれば自動的に例のパターンを作成するような

仕組みを作れば入力パターンの定義もだいぶ楽になる気がします。

※Marionetteではそこまでやっていません(^^;)

※「しゃ」のパターンを例のようにするのは「しゃ」が入力文字なのに対し、

  「し」のパターンを入力した際、「しゃ」が入力されたと判断されないようにする為。

  このあたりのロジックは次回解説します。

 

次回はこのデータ構造を利用して

例文を処理する様子を解説したいと思います。

 

次へ

2010.09.29