• ベストアンサー

タイピングゲームの異なるローマ字入力

こんにちは。 javascriptでタイピングゲームを作っています。 基本的な構造はできたのですが、異なるローマ字打ちを どの様に作ればいいかわかりません。 word="kyatto,cyatto,cyotto" //キャット、チャット、ちょっと list=new Array(); list=word.split(","); 変数wordがタイプするローマ字の中身です。 例えば、最初の「kyatto」を「kixyaxtsuto」や「kyaxtuto」 などでも読み込めるようにするにはどうすればいいでしょうか? 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.2

語彙が少ないなら、考え方は #1 多いなら、それぞれの語のハッシュを用意しておくと楽? 参考までに。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <title></title> <script type="text/javascript"> var romanAlphabetMap = {  0x0074 : [ // t   /[\u305F\u3061\u3064\u3066\u3068]/, // たちつてと   {    0x0069 : /^([\u3061\u30C1])/, // i : ちチ    0x0079 : { // y     0x0061 : /^(\u3061\u3083|\u30C1\u30E3)/ // a : ちゃチャ    }   }  ],  0x006C : [ // l   /[\u3083\u3085\u3087]/, // ゃゅょ   {    0x0079 : { // y     0x0061 : /^[\u3083\u30E3]/ // a : ゃャ    }   }  ],  0x0078 : [ // x   /[\u3083\u3085\u3087]/, // ゃゅょ   {    0x0079 : { // y     0x0061 : /^[\u3083\u30E3]/ // a : ゃャ    }   }  ] }; var p = romanAlphabetMap; var word = 'ちゃ'; //@cc_on function typeGameHandler( evt ) {  var keyCode = evt./*@if(1) keyCode @else@*/ which /*@end@*/;  if( 'undefined' == typeof p[ keyCode ] ) {   alert( 'Mistake!!' );   /*@if(1) evt.returnValue = false; @else@*/ evt.preventDefault( ); /*@end@*/  } else {   p = p[ keyCode ];   if( p instanceof Array && word.search( p[0] ) == 0 ) {   p = p[1];  } else if( p instanceof RegExp && word.search( p ) == 0 ) {   word = word.replace( p, '' );   p = romanAlphabetMap; word == '' && alert( 'Complete!!' );  }  } } </script> </head> <body> <p><input type="text" onkeypress="typeGameHandler( event );"></p> </body> </html> 途中で飽きた。

willbelate
質問者

お礼

大変勉強になりました。 有難うございます。

その他の回答 (2)

回答No.3

いつも勉強になります! ありがとうございます。

回答No.1

ごみみたいなものをなげてみる! var word_list = { 'kyatto' : ['kyatto', 'kixyaxtsuto', 'kyaxtuto'], 'atoha' : ['atowa'] } function arryMatch (key, list) { var i, spl, kl = key.length, s, ret = []; for (i = 0; spl = list[i]; i++) { s = spl.substr(0, kl); if (s === key) ret.push(s); } return ret; } var chk = arryMatch('kya', word_list['kyatto']); alert (chk.length);

willbelate
質問者

お礼

大変勉強になりました。 有難うございます。

関連するQ&A

専門家に質問してみよう