今回はタイピングゲームアルゴリズムで使用する
データ構造について解説します。
「はじめに」でも書いた通り、
さまざまな入力パターンをサポートできるようなデータ構造となっています。
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