//Live Coding 2010/3/29 mon AM 10:17~ 翌AM 0:35 //as3初心者だけど今日一日でタイピングゲーム作る。 // // //今日のところはこれで完成 //Live Codingを見に来てくださった方々ありがとうございました。 // //まだちょっと修正したいところがあるので //明日以降forkしてもうちょっと作りこんでいきたいと思ってます。 //3/30 バグがあったので一行だけ修正 //3/31 バグがあったので一部修正 package{ import flash.display.Sprite; import flash.text.*; import flash.events.*; import flash.utils.*; [SWF(width=465, height=465, backgroundColor = 0xDDDDFF, frameRate = 60)] public class Main extends Sprite{ public var timeCheck2:Timer = new Timer(30); public var timeCheck:Timer = new Timer(5000); public var typing:Typing = new Typing(); public var time:int = 6000; public var countDown:int; public var test:TextField = new TextField(); public var mesField:TextField = new TextField(); public var mesFormat:TextFormat = new TextFormat(); public var mesField2:TextField = new TextField(); public var mesFormat2:TextFormat = new TextFormat(); public var countField:TextField = new TextField(); public var countFormat:TextFormat = new TextFormat(); public var touchField:TextField = new TextField(); public var touchFormat:TextFormat = new TextFormat(); public var missField:TextField = new TextField(); public var missFormat:TextFormat = new TextFormat(); public var finField:TextField = new TextField(); public var finFormat:TextFormat = new TextFormat(); public function Main() { typing.wordList = [ {word:"カピバラ", kana:"かぴばら"}, {word:"なしくずし", kana:"なしくずし"}, {word:"江戸っ子", kana:"えどっこ"}, {word:"情状酌量", kana:"じょうじょうしゃくりょう"}, {word:"マチュピチュ", kana:"まちゅぴちゅ"}, {word:"なれのはて", kana:"なれのはて"}, {word:"ダブルラリアット", kana:"だぶるらりあっと"}, {word:"アルファルファ" , kana:"あるふぁるふぁ" }, {word:"ちょんまげ", kana:"ちょんまげ"}, {word:"もやしっ子", kana:"もやしっこ"}, {word:"あっけらかん", kana:"あっけらかん"}, {word:"ヤンバルクイナ", kana:"やんばるくいな"}, {word:"老若男女", kana:"ろうにゃくなんにょ"}, {word:"マカロン", kana:"まかろん"}, {word:"小腹", kana:"こばら"}, {word:"ざっくばらん", kana:"ざっくばらん"}, {word:"真人間", kana:"まにんげん"}, {word:"オコジョ", kana:"おこじょ"}, {word:"チチンプイプイ", kana:"ちちんぷいぷい"}, {word:"チョモランマ", kana:"ちょもらんま"}, {word:"プルコギ", kana:"ぷるこぎ"}, {word:"アルパカ", kana:"あるぱか"}, {word:"トンチンカン", kana:"とんちんかん"}, {word:"タクラマカン砂漠", kana:"たくらまかんさばく"} ] ; /*typing.addTarget(3);*/ test.autoSize = TextFieldAutoSize.CENTER; addChild(test); with(countFormat){ size = 50; font = "メイリオ"; bold = true; } with(countField){ text = "制限時間"; x=50; y=10; alpha=0.4; autoSize = TextFieldAutoSize.CENTER; } countField.setTextFormat(countFormat); with(finFormat){ size = 88; color=0x000000; font = "メイリオ"; bold = true; } with(finField){ text = "単語数"; x=320; y=130; alpha=0.6; autoSize = TextFieldAutoSize.CENTER; } finField.setTextFormat(finFormat); with(touchFormat){ size = 108; color=0xFF0000; font = "メイリオ"; bold = true; } with(touchField){ text = "タイプ数"; x=290; y=-30; alpha=0.6; autoSize = TextFieldAutoSize.CENTER; } touchField.setTextFormat(touchFormat); with(missFormat){ size = 38; color=0xFF6600; font = "メイリオ"; bold = true; } with(missField){ text = "ミスタイプ数"; x=120; y=200; alpha=0.7; autoSize = TextFieldAutoSize.CENTER; } missField.setTextFormat(missFormat); with(mesFormat){ size = 20; color=0xFFAA00; font = "メイリオ"; bold = true; } with(mesField){ text = "Escキーを押すと始まります。"; x=220; y=380; alpha=0.6; autoSize = TextFieldAutoSize.CENTER; } mesField.setTextFormat(mesFormat); addChild(mesField); with(mesFormat2){ size = 20; color=0xFECC00; font = "メイリオ"; bold = true; } with(mesField2){ text = "入力は半角英数で行ってください"; x=150; y=340; alpha=0.6; autoSize = TextFieldAutoSize.CENTER; } mesField2.setTextFormat(mesFormat2); addChild(mesField2); addChildAt(touchField,0); addChildAt(missField,0); addChildAt(countField,0); addChildAt(finField,0); addChild(typing); stage.addEventListener(KeyboardEvent.KEY_DOWN, KeyDown); } public function start():void{ mesField.visible = false; touchField.visible = true; missField.visible = true; countField.visible = true; finField.visible = true; finField.text = "0"; missField.text = "0"; touchField.text = "0"; missField.setTextFormat(missFormat); touchField.setTextFormat(touchFormat); finField.setTextFormat(finFormat); typing.play = true; countDown = time; timeCheck2.addEventListener(TimerEvent.TIMER, count); timeCheck2.start(); timeCheck.addEventListener(TimerEvent.TIMER, add); timeCheck.start(); } public function stop():void{ mesField.visible = true; typing.play = false; timeCheck2.stop(); timeCheck.stop(); } public function add(e:Event):void{ typing.addTarget(1); } public function count(e:Event):void{ countField.text =""+ countDown; countField.setTextFormat(countFormat); finField.text =""+ typing.finWord; finField.setTextFormat(finFormat); countDown-=3; if(countDown<0){ stop(); //3/30 ここになぜかstart();が入っていたので修正 countDown=0; } } public function KeyDown(e:KeyboardEvent):void{ if(e.keyCode==27){ stop();start(); }else{ typing.typed += String.fromCharCode(e.charCode); touchField.text =""+ typing.touch; touchField.setTextFormat(touchFormat); missField.text =""+ typing.missTouch; missField.setTextFormat(missFormat); } } } } import flash.display.Sprite; import flash.text.*; import flash.events.*; class TypingWindow extends Sprite{ private var _width:int = 200; private var _height:int = 90; public function set kana(t:String):void{ kanaField.text = t; kanaField.setTextFormat(kanaFormat); } public function set word(t:String):void{ typeField.text = t; typeField.setTextFormat(typeFormat); } public function set typedRoman(t:String):void{ var l:int = t.length; if (l >= romanField.text.length){ l = romanField.text.length-1; } romanField.setTextFormat(typingFormat,-1,l); } public function set roman(t:String):void{ romanField.text = t; romanField.setTextFormat(romanFormat); } private var kanaField:TextField = new TextField(); private var typeField:TextField = new TextField(); private var romanField:TextField = new TextField(); private var typeFormat:TextFormat = new TextFormat(); private var typingFormat:TextFormat = new TextFormat(); private var kanaFormat:TextFormat = new TextFormat(); private var romanFormat:TextFormat = new TextFormat(); public function TypingWindow(){ x = 225*Math.random(); y = 375*Math.random(); drow(); with(kanaFormat){ size = 13; font = "MS ゴシック"; bold = true; } with(kanaField){ autoSize = TextFieldAutoSize.CENTER; } kanaField.y = 10; kanaField.x = width/2 - kanaField.width/2; addChild(kanaField); with(typingFormat){ color = 0x666666; } with(typeFormat){ size = 20; font = "メイリオ"; bold = true; } with(typeField){ autoSize = TextFieldAutoSize.CENTER; setTextFormat(typeFormat); } typeField.y = 25; typeField.x = width/2 - typeField.width/2; addChild(typeField); with(romanFormat){ size = 18; } with(romanField){ autoSize = TextFieldAutoSize.CENTER; } romanField.y = 55; romanField.x = width/2 - romanField.width/2; addChild(romanField); } public function drow():void{ graphics.lineStyle (4, 0x000000, 0.9); // 線のスタイル指定 graphics.beginFill (0xAAAACC, 0.7); // 面のスタイル設定 graphics.drawRoundRect (0, 0, _width, _height , 20 , 20); } } class Typing extends Sprite{ public var _typed:String =""; public function set typed(s:String):void{setTyped(s);} public function setTyped(s:String):void{ var miss:Boolean=true; for(var i:int=0;i<target.length;i++){ if(match(wordList[target[i]].kana,s) == s.length){ _typed=s; var preffered:String = preferredRoman(wordList[target[i]].kana,s); if(_typed==preffered){ finWord++; clear(i); } typingWindows[i].roman = preffered; typingWindows[i].typedRoman=_typed; miss = false; }else{ typingWindows[i].roman = firstRoman(wordList[target[i]].kana); } } if(miss){ setTyped(_typed); touch--; missTouch++; }else{ touch++; } } public function get typed():String{return _typed;} public var _play:Boolean =false; public function set play(b:Boolean):void{ if(_play!=b){// 3/31 修正 _play=b; if(b){ touch=0; missTouch=0; finWord=0; addTarget(3); }else{ while(numChildren > 0){ removeChildAt(0); } typingWindows.splice(0); target.splice(0); typed=""; } } } public function get play():Boolean{return _play;} public var touch:int = 0; public var missTouch:int = 0; public var finWord:int = 0; public var typingWindows:Array = new Array(); private var romanList:Array = new Array(); private var _wordList:Array = new Array(); //単語表 public function set wordList(list:Array):void{ _wordList = list; unused.splice(0); for(var i:int=0;i<_wordList.length;i++){ unused[i] = i; } } public function get wordList():Array{return _wordList;} private var target:Array = new Array();//現在タイプ可能な候補 private var hint:Array = new Array();//次以降の候補 private var unused:Array = new Array(); //未使用の単語の表 private var usedNum:int; //単語表の単語のうちいくつが使用済みか? public function addTarget(n:int):void{//nだけ候補に単語を追加 if(_wordList.length < 1){return;} for(var i:int=0;i<n;i++){ if(unused.length==0){ for(var j:int=0;j<_wordList.length;j++){ unused[j] = j; usedNum=0; } } var w:Object; var rand:int = Math.random() * unused.length; var k:int = unused.splice(rand,1); target.push(k); typingWindows.push(new TypingWindow()); typingWindows[typingWindows.length-1].kana = wordList[k].kana; typingWindows[typingWindows.length-1].word = wordList[k].word; typingWindows[typingWindows.length-1].roman = firstRoman(wordList[k].kana); addChildAt(typingWindows[typingWindows.length-1],0); } } public function clear(n:int):void{ removeChild(typingWindows[n]); typingWindows.splice(n,1); target.splice(n,1); if(target.length == 0 && play){addTarget(1);} typed=""; } public function match(kana:String,roman:String):int{ //与えられたかなの先頭にromanが最大何文字マッチするかの判定用 //返り値 == roman.lengthでromanすべてが一致 var matchLength:int = 0; var longest:int = 0; var unreaded:String = kana; var unreadedRoman:String = roman; while(unreaded.length != 0){ loop1:for(var n:int=4;n>0;n--){//文字数 for(var m:int=0;m<3;m++){//候補番号 if(romanList[m][unreaded.substring(0,n)] != undefined){ var term:String = romanList[m][unreaded.substring(0,n)] if(term == unreadedRoman.substring(0,term.length)){ unreaded = unreaded.substring(n); unreadedRoman = unreadedRoman.substring(term.length); matchLength += term.length; longest = matchLength; break loop1; }else{ while(term.length > 1){ term = term.substring(0,term.length - 1); if(term == unreadedRoman.substring(0,term.length)){ if(longest < matchLength + term.length){longest = matchLength + term.length;} break; } } } } } } if(n==0){break;} } return longest; } public function preferredRoman(kana:String,roman:String):String{ //romanがタイプされているときの最適なローマ字の振り方を返す var matchLength:int = 0; var longest:int = 0; var preferred:String = ""; var unreaded:String = kana; var unreadedRoman:String = roman; while(unreaded.length != 0){ loop1:for(var n:int=4;n>0;n--){//文字数 for(var m:int=0;m<4;m++){//候補番号 if(romanList[m][unreaded.substring(0,n)] != undefined){ var term:String = romanList[m][unreaded.substring(0,n)] if(term == unreadedRoman.substring(0,term.length)){ preferred += term; unreaded = unreaded.substring(n); unreadedRoman = unreadedRoman.substring(term.length); matchLength += term.length; longest = matchLength; if(roman.length==longest){return preferred + firstRoman(unreaded);} break loop1; }else{ var bterm:String = term; while(term.length > 1){ term = term.substring(0,term.length - 1); if(term == unreadedRoman.substring(0,term.length)){ longest = matchLength+term.length; if(roman.length==longest){ preferred += bterm; unreaded = unreaded.substring(n); unreadedRoman = unreadedRoman.substring(term.length); matchLength += term.length; longest = matchLength; return preferred + firstRoman(unreaded); } break; } } } } } } if(n==0){ preferred += firstRoman(unreaded); break; } } return preferred; } public function firstRoman(kana:String):String{ //kanaのもっとも簡単なローマ字の振り方を返す var unreaded:String = kana; var preferred:String = ""; while(unreaded.length != 0){ loop1:for(var n:int=4;n>0;n--){//文字数 for(var m:int=0;m<4;m++){//候補番号 if(romanList[m][unreaded.substring(0,n)] != undefined){ preferred += romanList[m][unreaded.substring(0,n)]; unreaded = unreaded.substring(n); break loop1; } } } if(n==0){ break; } } return preferred; } public function Typing(){ romanList = new Array(4); //かなとローマ字の変換表 //候補1------------------------------------------------------------ romanList[0] = new Array(); romanList[0]["ー"] = "-"; romanList[0]["。"] = "."; romanList[0]["、"] = ","; romanList[0]["?"] = "?"; romanList[0]["!"] = "!"; romanList[0][" "] = " "; romanList[0]["あ"] = "a"; romanList[0]["い"] = "i"; romanList[0]["う"] = "u"; romanList[0]["え"] = "e"; romanList[0]["お"] = "o"; romanList[0]["か"] = "ka"; romanList[0]["き"] = "ki"; romanList[0]["く"] = "ku"; romanList[0]["け"] = "ke"; romanList[0]["こ"] = "ko"; romanList[0]["さ"] = "sa"; romanList[0]["し"] = "si"; romanList[0]["す"] = "su"; romanList[0]["せ"] = "se"; romanList[0]["そ"] = "so"; romanList[0]["な"] = "na"; romanList[0]["に"] = "ni"; romanList[0]["ぬ"] = "nu"; romanList[0]["ね"] = "ne"; romanList[0]["の"] = "no"; romanList[0]["た"] = "ta"; romanList[0]["ち"] = "ti"; romanList[0]["つ"] = "tu"; romanList[0]["て"] = "te"; romanList[0]["と"] = "to"; romanList[0]["は"] = "ha"; romanList[0]["ひ"] = "hi"; romanList[0]["ふ"] = "fu"; romanList[0]["へ"] = "he"; romanList[0]["ほ"] = "ho"; romanList[0]["ま"] = "ma"; romanList[0]["み"] = "mi"; romanList[0]["む"] = "mu"; romanList[0]["め"] = "me"; romanList[0]["も"] = "mo"; romanList[0]["や"] = "ya"; romanList[0]["ゆ"] = "yu"; romanList[0]["いぇ"] = "ye"; romanList[0]["よ"] = "yo"; romanList[0]["ら"] = "ra"; romanList[0]["り"] = "ri"; romanList[0]["る"] = "ru"; romanList[0]["れ"] = "re"; romanList[0]["ろ"] = "ro"; romanList[0]["わ"] = "wa"; romanList[0]["ゐ"] = "wi"; romanList[0]["ゑ"] = "we"; romanList[0]["を"] = "wo"; romanList[0]["が"] = "ga"; romanList[0]["ぎ"] = "gi"; romanList[0]["ぐ"] = "gu"; romanList[0]["げ"] = "ge"; romanList[0]["ご"] = "go"; romanList[0]["ざ"] = "za"; romanList[0]["じ"] = "ji"; romanList[0]["ず"] = "zu"; romanList[0]["ぜ"] = "ze"; romanList[0]["ぞ"] = "zo"; romanList[0]["だ"] = "da"; romanList[0]["ぢ"] = "di"; romanList[0]["づ"] = "du"; romanList[0]["で"] = "de"; romanList[0]["ど"] = "do"; romanList[0]["ば"] = "ba"; romanList[0]["び"] = "bi"; romanList[0]["ぶ"] = "bu"; romanList[0]["べ"] = "be"; romanList[0]["ぼ"] = "bo"; romanList[0]["ぱ"] = "pa"; romanList[0]["ぴ"] = "pi"; romanList[0]["ぷ"] = "pu"; romanList[0]["ぺ"] = "pe"; romanList[0]["ぽ"] = "po"; romanList[0]["ぁ"] = "la"; romanList[0]["ぃ"] = "li"; romanList[0]["ぅ"] = "lu"; romanList[0]["ぇ"] = "le"; romanList[0]["ぉ"] = "lo"; romanList[0]["ゃ"] = "lya"; romanList[0]["ゅ"] = "lyu"; romanList[0]["ょ"] = "lyo"; romanList[0]["ゎ"] = "lwa"; romanList[0]["っ"] = "ltu"; romanList[0]["きゃ"] = "kya"; romanList[0]["きぃ"] = "kyi"; romanList[0]["きゅ"] = "kyu"; romanList[0]["きぇ"] = "kye"; romanList[0]["きょ"] = "kyo"; romanList[0]["しゃ"] = "sya"; romanList[0]["しぃ"] = "syi"; romanList[0]["しゅ"] = "syu"; romanList[0]["しぇ"] = "sye"; romanList[0]["しょ"] = "syo"; romanList[0]["ちゃ"] = "tya"; romanList[0]["ちぃ"] = "tyi"; romanList[0]["ちゅ"] = "tyu"; romanList[0]["ちぇ"] = "tye"; romanList[0]["ちょ"] = "tyo"; romanList[0]["にゃ"] = "nya"; romanList[0]["にぃ"] = "nyi"; romanList[0]["にゅ"] = "nyu"; romanList[0]["にぇ"] = "nye"; romanList[0]["にょ"] = "nyo"; romanList[0]["ひゃ"] = "hya"; romanList[0]["ひぃ"] = "hyi"; romanList[0]["ひゅ"] = "hyu"; romanList[0]["ひぇ"] = "hye"; romanList[0]["ひょ"] = "hyo"; romanList[0]["みゃ"] = "mya"; romanList[0]["みぃ"] = "myi"; romanList[0]["みゅ"] = "myu"; romanList[0]["みぇ"] = "mye"; romanList[0]["みょ"] = "myo"; romanList[0]["りゃ"] = "rya"; romanList[0]["りぃ"] = "ryi"; romanList[0]["りゅ"] = "ryu"; romanList[0]["りぇ"] = "rye"; romanList[0]["りょ"] = "ryo"; romanList[0]["ぎゃ"] = "gya"; romanList[0]["ぎぃ"] = "gyi"; romanList[0]["ぎゅ"] = "gyu"; romanList[0]["ぎぇ"] = "gye"; romanList[0]["ぎょ"] = "gyo"; romanList[0]["じゃ"] = "ja"; romanList[0]["じぃ"] = "zyi"; romanList[0]["じゅ"] = "ju"; romanList[0]["じぇ"] = "je"; romanList[0]["じょ"] = "jo"; romanList[0]["ぢゃ"] = "dya"; romanList[0]["ぢぃ"] = "dyi"; romanList[0]["ぢゅ"] = "dyu"; romanList[0]["ぢぇ"] = "dye"; romanList[0]["ぢょ"] = "dyo"; romanList[0]["びゃ"] = "bya"; romanList[0]["びぃ"] = "byi"; romanList[0]["びゅ"] = "byu"; romanList[0]["びぇ"] = "bye"; romanList[0]["びょ"] = "byo"; romanList[0]["ぴゃ"] = "pya"; romanList[0]["ぴぃ"] = "pyi"; romanList[0]["ぴゅ"] = "pyu"; romanList[0]["ぴぇ"] = "pye"; romanList[0]["ぴょ"] = "pyo"; romanList[0]["うぁ"] = "wa"; romanList[0]["うぃ"] = "wi"; romanList[0]["うぇ"] = "we"; romanList[0]["うぉ"] = "wo"; romanList[0]["ヴぁ"] = "va"; romanList[0]["ヴぃ"] = "vi"; romanList[0]["ヴ"] = "vu"; romanList[0]["ヴぇ"] = "ve"; romanList[0]["ヴぉ"] = "vo"; romanList[0]["ヴゃ"] = "vya"; romanList[0]["ヴゅ"] = "vyu"; romanList[0]["ヴょ"] = "vyo"; romanList[0]["てゃ"] = "tha"; romanList[0]["てぃ"] = "thi"; romanList[0]["てゅ"] = "thu"; romanList[0]["てぇ"] = "the"; romanList[0]["てょ"] = "tho"; romanList[0]["ふぁ"] = "fa"; romanList[0]["ふぃ"] = "fi"; romanList[0]["ふぅ"] = "fwu"; romanList[0]["ふぇ"] = "fe"; romanList[0]["ふぉ"] = "fo"; romanList[0]["ふゃ"] = "fya"; romanList[0]["ふゅ"] = "fyu"; romanList[0]["ふょ"] = "fyo"; romanList[0]["でゃ"] = "dha"; romanList[0]["でぃ"] = "dhi"; romanList[0]["でゅ"] = "dhu"; romanList[0]["でぇ"] = "dhe"; romanList[0]["でょ"] = "dho"; romanList[0]["くぁ"] = "qa"; romanList[0]["くぃ"] = "qi"; romanList[0]["くぅ"] = "qwu"; romanList[0]["くぇ"] = "qe"; romanList[0]["くぉ"] = "qo"; romanList[0]["くゃ"] = "qya";//何て読むんだよ,これ。 romanList[0]["くゅ"] = "qyu"; romanList[0]["くょ"] = "qyo"; romanList[0]["すぁ"] = "swa"; romanList[0]["すぃ"] = "swi"; romanList[0]["すぅ"] = "swu"; romanList[0]["すぇ"] = "swe"; romanList[0]["すぉ"] = "swo"; romanList[0]["ぐぁ"] = "gwa"; romanList[0]["ぐぃ"] = "gwi"; romanList[0]["ぐぅ"] = "gwu"; romanList[0]["ぐぇ"] = "gwe"; romanList[0]["ぐぉ"] = "gwo"; romanList[0]["どぁ"] = "dwa"; romanList[0]["どぃ"] = "dwi"; romanList[0]["どぅ"] = "dwu"; romanList[0]["どぇ"] = "dwe"; romanList[0]["どぉ"] = "dwo"; romanList[0]["とぁ"] = "twa"; romanList[0]["とぃ"] = "twi"; romanList[0]["とぅ"] = "twu"; romanList[0]["とぇ"] = "twe"; romanList[0]["とぉ"] = "two"; romanList[0]["つぁ"] = "tsa"; romanList[0]["つぃ"] = "tsi"; romanList[0]["つぇ"] = "tse"; romanList[0]["つぉ"] = "tso"; romanList[0]["ん"] = "nn"; //候補2------------------------------------------------------------ romanList[1] = new Array(); romanList[1]["い"] = "yi"; romanList[1]["う"] = "wu"; romanList[1]["うぁ"] = "wha"; romanList[1]["うぃ"] = "whi"; romanList[1]["うぇ"] = "whe"; romanList[1]["うぉ"] = "who"; romanList[1]["う"] = "wu"; romanList[1]["か"] = "ca"; romanList[1]["く"] = "cu"; romanList[1]["こ"] = "co"; romanList[1]["くぃ"] = "qwi"; romanList[1]["くぅ"] = "qwu"; romanList[1]["くぇ"] = "qwe"; romanList[1]["くぉ"] = "qwo"; romanList[1]["くぁ"] = "kwa"; romanList[1]["くぃ"] = "qwi"; romanList[1]["くぅ"] = "qwu"; romanList[1]["くぇ"] = "qwe"; romanList[1]["くぉ"] = "qwo"; romanList[1]["しゃ"] = "sha"; romanList[1]["し"] = "shi"; romanList[1]["しゅ"] = "shu"; romanList[1]["しぇ"] = "she"; romanList[1]["しょ"] = "sho"; romanList[1]["せ"] = "ce"; romanList[1]["じ"] = "zi"; romanList[1]["じゃ"] = "zya"; romanList[1]["じぃ"] = "jyi"; romanList[1]["じゅ"] = "zyu"; romanList[1]["じぇ"] = "zye"; romanList[1]["じょ"] = "zyo"; romanList[1]["ちゃ"] = "cha"; romanList[1]["ち"] = "chi"; romanList[1]["ちぃ"] = "cyi"; romanList[1]["ちゅ"] = "chu"; romanList[1]["ちぇ"] = "che"; romanList[1]["ちょ"] = "cho"; romanList[1]["つ"] = "tsu"; romanList[1]["ふ"] = "hu"; romanList[1]["ふぁ"] = "fwa"; romanList[1]["ふぃ"] = "fwi"; romanList[1]["ふぇ"] = "fwe"; romanList[1]["ふぉ"] = "fwo"; romanList[1]["ぁ"] = "xa"; romanList[1]["ぃ"] = "xi"; romanList[1]["ぅ"] = "xu"; romanList[1]["ぇ"] = "xe"; romanList[1]["ぉ"] = "xo"; romanList[1]["ゃ"] = "xya"; romanList[1]["ゅ"] = "xyi"; romanList[1]["ょ"] = "xyu"; romanList[1]["ゎ"] = "xwa"; romanList[1]["っ"] = "ltsu"; //候補3------------------------------------------------------------ romanList[2] = new Array(); romanList[2]["う"] = "whu"; romanList[2]["し"] = "ci"; romanList[2]["くぁ"] = "qwa"; romanList[2]["くぃ"] = "qyi"; romanList[2]["くぇ"] = "qye"; romanList[2]["じゃ"] = "jya"; romanList[2]["じゅ"] = "jyu"; romanList[2]["じぇ"] = "jye"; romanList[2]["じょ"] = "jyo"; romanList[2]["ちゃ"] = "cya"; romanList[2]["ちゅ"] = "cyu"; romanList[2]["ちぇ"] = "cye"; romanList[2]["ちょ"] = "cyo"; romanList[2]["ふぃ"] = "fyi"; romanList[2]["ふぇ"] = "fye"; romanList[2]["ふぉ"] = "fwo"; romanList[2]["ぃ"] = "lyi"; romanList[2]["ぇ"] = "lye"; //候補4------------------------------------------------------------ romanList[3] = new Array(); romanList[3]["ぃ"] = "xyi"; romanList[3]["ぇ"] = "xye"; //一文字目になるひらがな表 var beforetse1:Array = [ "あ","い","う","え","お", "か","き","く","け","こ", "さ","し","す","せ","そ", "た","ち","つ","て","と", "は","ひ","ふ","へ","ほ", "ま","み","む","め","も", "や","ゆ","よ", "わ","ゐ","う","ヱ","を","ん", "ら","り","る","れ","ろ", "が","ぎ","ぐ","げ","ご", "ざ","じ","ず","ぜ","ぞ", "だ","ぢ","づ","で","ど", "ば","び","ぶ","べ","ぼ", "ぱ","ぴ","ぷ","ぺ","ぽ","ヴ", "ゃ","ゅ","ょ","ゎ", "ぁ","ぃ","ぅ","ぇ","ぉ", "!","?",".",","," " ]; var beforetse2:Array = ["","ゃ","ゅ","ょ", "ぁ","ぃ","ぅ","ぇ","ぉ" ]; //連続すると「っ」になるアルファベット var tse:Array =["q","w","r","t","y","p","s","d","f","g","h","j","k","l","z","x","c","v","b","m"]; //直前にn 1つで「ん」になるアルファベット var nn:Array =["q","w","r","t","p","s","d","f","g","h","j","k","l","z","x","c","v","b","m","!","?",".",","," "]; //「っ」の付く候補作成 for(var i:int = 0;i < beforetse1.length;i++){ for(var j:int = 0;j < beforetse2.length;j++){ for(var k:int = 0;k < 4;k++){ var ok1:Boolean = false; if( romanList[k][ beforetse1[i]+beforetse2[j] ] !=undefined){ for(var n:int=0;n<tse.length;n++){ if(romanList[k][ beforetse1[i]+beforetse2[j] ].substring(0,1) == tse[n]){ok1 = true;} } } if( ok1 ){ romanList[k][ "っ"+beforetse1[i]+beforetse2[j] ] = romanList[k][ beforetse1[i]+beforetse2[j] ].substr(0,1) + romanList[k][ beforetse1[i]+beforetse2[j] ]; } var ok2:Boolean = false; if( romanList[k][ beforetse1[i]+beforetse2[j] ] !=undefined){ for(n=0;n<tse.length;n++){ if(romanList[k][ beforetse1[i]+beforetse2[j] ].substring(0,1) == nn[n]){ok2 = true;} } } if( ok2 ){ romanList[k][ "ん"+beforetse1[i]+beforetse2[j] ] = "n" + romanList[k][ beforetse1[i]+beforetse2[j] ]; } if( ok1 && ok2 ){ romanList[k][ "ん"+"っ"+beforetse1[i]+beforetse2[j] ] = "n" + romanList[k][ beforetse1[i]+beforetse2[j] ].substr(0,1) + romanList[k][ beforetse1[i]+beforetse2[j] ]; } } } } } } LIVE CODING 一日でタイピングゲーム作る on 2010-3-29