- ベストアンサー
キーセッティング機能とは?
- キーセッティング機能とは、タイピングゲームにおいて、入力方法自動判別機能が不要になる機能です。
- 通常、単語ごとに異なるパターンの入力を用意する必要がありますが、キーセッティング機能を使用すると、自動で入力方法が判別されます。
- キーセッティング機能の導入により、作業効率が向上し、入力パターンの数も削減できます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
簡単なのは日本語で判断することです。 キーを押すごとに打った文字を平仮名に変換します。「じょうかまち」の場合だと 最初に「j」を打ちます →平仮名に変換できない 次に「o」を打ちます →joなので「じょ」に変換される もちろん zyo と打った時も同じ様に「じょ」になります。 説明しづらいのでASを書きました。 以下をフレームに貼り付けてください。 (全角スペースが入っているので半角スペースか空文字列に置き換えて) //------------------------------------------------------------------------- var key_obj:Object = new Object(); var mondai:String; //打ち終わった文字(ひらがな) var typed:String = ""; //打ってる最中の文字(ローマ字) var typing:String = ""; var view:String = ""; mondai = "じょうかまち"; // key_obj.onKeyDown = function() { w = String.fromCharCode(Key.getAscii()); if (Key.isDown(Key.BACKSPACE)) { //バックスペース //末尾文字削除 ( 最初の文字から最後の文字の一つ前まで取得) typing = typing.slice(0, -1); } else { typing += w; } //ひらがなに変換 hira = GetHiragana(typing); if (hira == "") { //変換できなかった時 ( =入力途中) } else { //変換できた時 typed += hira; typing = ""; } view = typed+typing; trace(view); }; function GetHiragana(w:String) { r = ""; switch (w) { case "jo" : case "jyo" : case "zyo" : r = "じょ"; break; case "ji" : case "zi" : r = "じ"; case "lyo" : case "xyo" : r = "ょ"; break; case "u" : r = "う"; break; case "ka" : r = "か"; break; case "ma" : r = "ま"; break; case "ti" : case "chi" : r = "ち"; break; } return r; } Key.addListener(key_obj); //-----------------------------------------------------------------ここまで しかしこの方法だとローマ字を打った時点では正誤判定が出来ません。 たとえば「じょうか」まで打ったとして次のキーは「m」ですが、 「p」でも「e」でも「r」でも何でも打ててしまいます。 それを消すためにBackSpaceキーを押せるようにしてあるのですが、 タイピングでそういうのってあまりないですよね。 一般的なタイピング(?)みたいに問題がローマ字表示されていて 打ち終わった部分が問題から削られていくタイプのものでの自動変換は 私の考える限り一文字づつ見ていくしかないかと思います。 「joukamachi」と表示されていて「z」を打った場合、 今の文字が「j」で次の文字が「o」だからzの入力を受け付けてjoをzyoに置換。 「youkamachi」になって「i」を打った場合、 前の文字が「z」で今の文字が「y」で次の文字が「o」だからiの入力を受け付けてzyoをzixyoに置換。 と言う風に条件分岐の嵐ですね。 それは大変そうなので次に入力候補を絞っていく方法です。 以下をフレームに貼り付けてください。 (全角スペースが入っているので半角スペースか空文字列に置き換えて) //------------------------------------------------------------------------- var key_obj:Object = new Object(); var mondai:String; var idx:Number = 0; var kouho_array = new Array(); var miss_bln:Boolean; var N_bln:Boolean = false; mondai = "[jo|zyo|jixyo|zixyo]ukama[chi|ti]"; // Key.addListener(key_obj); key_obj.onKeyDown = function() { //ミス入力フラグ初期化 miss_bln = false; //キーボードで打った文字を取得 w = String.fromCharCode(Key.getAscii()); //問題文の一文字目が何かを判断 switch (mondai.charAt(idx)) { case "[" : // 一文字目が"[" のとき // "]"の位置を取得 pos = mondai.indexOf("]", idx); // [ ] の中の文字を | で区切って配列に入れる // ( jo 、zyo、jixyo、zixyoに分かれて入る ) kouho_array = mondai.substr(idx+1, pos-1).split("|"); // 「ん」の時 if (kouho_array[0] == "N") { //「ん」入力フラグを立てる (次にnを押してもタイプミスにしない) N_bln = true; s = ""; } else { //キーボードで打った文字と候補の一文字目を比較 for (i=kouho_array.length-1; i>=0; i--) { if (w != kouho_array[i].charAt(0)) { //打った文字が候補と違う場合、その候補は削除する kouho_array.splice(i, 1); } } if (kouho_array.length == 1) { //候補が一つだけ残ったとき → その候補に決定 s = kouho_array[0].substring(1); } else if (kouho_array.length>=1) { //一つ以上のこったとき | 区切りにして[ ] で囲う // ( 次にキーを打ったときまた候補として出てくる) s = "["; for (i=0; i<kouho_array.length; i++) { if (i>0) { s += "|"; } s += kouho_array[i].substring(1); } s += "]"; } else { //候補の数が0 ⇒ ミス入力時 // "[" から "]" までの文字列を取得 //s = mondai.substr(idx, pos+1); trace("ミス入力 "+w); miss_bln = true; } } if (!miss_bln) { //ミス入力以外 //問題再作成 = s + "]" 以降の文字列 mondai = s+mondai.substring(pos+1); } break; default : //一文字目がその他のとき //打った文字が正しいか判断 if (w == mondai.charAt(idx)) { //正しい場合は打った文字を削る mondai = mondai.substring(1); } else if (N_bln) { //「ん」入力フラグがたっている時 「n」を入力しても正解 N_bln = false; //switch文を抜けたトコで一文字削除するのでnを付け加えとく hyouji = "n"+hyouji; } else { trace("ミス入力 "+w); miss_bln = true; } } if (!miss_bln) { //表示用テキスト一文字削除 if (hyouji.charAt(0) == w) { hyouji = hyouji.substring(1); } } if (mondai.length == 0) { trace("終了"); } else { trace(mondai); } }; //-----------------------------------------------------------------ここまで 見ての通り複数入力候補のあるローマ字は[ ]で囲って「|」で区切ります。 「じょ」の場合は[jo|zyo|jixyo|zixyo]です。 それいがいは普通に記述します。 1回入力でも2回入力でもいい「n」(「ん」)の場合は、 mondai = "[ja|jya|zya|jixya|zixya][N]ke[N]ponn"; //(じゃんけんぽん) と言うように大文字のNで記述してください。