実行画面
ソース
アクション - 1フレーム
/*
* キー入力を感知したら入力したキーのキーコードを受け取るキーリスナーを定義
*/
var KeyListener:Object = new Object();
Key.addListener(KeyListener);
/*
* テキストを読み込み、配列に格納したら次フレームへ移行
*/
var textData_Array:Array = new Array(); //テキストを格納する配列
var textScale_Array:Array = new Array(); //テキストの読みを格納する配列
var textIndex_Array:Array = new Array(); //文字の入力パターンを格納する配列
var loadText:LoadVars = new LoadVars(); //一時的に、読み込んだテキストを格納する変数
var loadPattern:LoadVars = new LoadVars(); //一時的に、ローマ字の入力パターンを格納する変数
var mess = "データを読み込んでいます...";
var iLength:Number;
var jLength:Number;
var kLength:Number;
storage = function(){
mess = "テキストデータの適化中...";
//問題分を一字毎に細分化
iLength = textScale_Array.length;
for(i = 0; i < iLength; i++){
textScale_Array[i] = textScale_Array[i].split("");
}
//読み込んだパターンを配列に格納
//textIndex_Array[読み一字分の表記][読み一字分のローマ字表記][ローマ字一字分のアルファベット表記]
iLength = textIndex_Array.length;
for(i = 0; i < iLength; i++){
textIndex_Array[i] = textIndex_Array[i].split("-");
jLength = textIndex_Array[i].length;
for(j = 0; j < iLength; j++){
textIndex_Array[i][j] = textIndex_Array[i][j].split("");
}
}
/*
//読み込んだパターンをすべて表示
iLength = textIndex_Array.length
for(i = 0; i < iLength; i++){
jLength = textIndex_Array[i].length
for(j = 0; j < jLength; j++){
trace("[" + i + "] [" + j + "] : " + textIndex_Array[i][j]);
}
trace("");
}
*/
nextFrame();
};
loadText.onLoad = function(success:Boolean){
if(success){
//trace(this.toString());
textData_Array = this.textData.split(","); //読み込んだテキストをカンマ(",")で区切って配列に格納
textScale_Array = this.textScale.split(","); //同上
if(textData_Array.length == textScale_Array.length){
storage();
}else{
trace("データが壊れています"
+ "\ntextData_Array : " + textData_Array.length
+ "\ntextScale_Array : " + textScale_Array.length);
}
}else{
trace("Error loading/parsing LoadVars.");
}
};
loadPattern.onLoad = function(success:Boolean){
if(success){
//trace(this.toString());
textIndex_Array = this.pattern.split("|");
loadText.load("./typing.txt");
}else{
trace("Error loading/parsing LoadVars.");
}
};
loadPattern.load("./textPattern.txt");
アクション - 2フレーム
mess = "";
textData = "";
scale = "";
var rand:Number = 0;
var inputNext:Number = 0; //textIndex_Array[]に格納されている次の文字の番地を保持する
var inputCnt:Number = 0; //現在出ている問題で入力した文字数を保持する変数
var inputTotalCnt:Number = 0; //トータルで入力したキーの数を保持する変数
var inputTotalMiss:Number = 0;
var inputDuration:Number = 0;
var inputMaxDuration:Number = 0;
var cnt:Number = 0; //入力に成功したローマ字を表示させないようにする為のカウントアップ保持変数
var inputKey:Array = new Array(""); //正解を格納する変数
var spStr_Bool:Boolean = new Boolean(false);
var endStr:Number = 0;//入力し終えた文字の数
var endRome:Number = 0;//処理中の一文字のうち、入力中のローマ字の数
var lineI:Array = new Array("い", "き", "し", "ち", "に", "ひ", "み", "り", "ぎ", "じ", "ぢ", "び", "ぴ");
var lineVocal:Array = new Array("あ", "い", "う", "え", "お");
rand = Math.floor(Math.random() * textData_Array.length);
//引数として与えられた文字が、母音、な行、ん、で無ければtrueを返す
vocalCheck = function(str){
switch(str){
case "a":
bool = false;
break;
case "i":
bool = false;
break;
case "u":
bool = false;
break;
case "e":
bool = false;
break;
case "o":
bool = false;
break;
case "n":
bool = false;
break;
default :
bool = true;
break;
}
return bool;
}
//textIndex_Array[]から次の文字が入っている番地を探す
searchNext = function(num){
jLength = textIndex_Array.length;
for(j = 0; j < jLength; j++){
if(textScale_Array[rand][num+1] == textIndex_Array[j][0][0]){
return j;
break;
}
}
}
//文章を一つ入力し終えたらtextInit()を呼び出して新しいテキストを表示する
textInit = function(){
inputCnt = 0;
cnt = 0;
rand = Math.floor(Math.random() * textData_Array.length);
textData = textData_Array[rand];
scaleInit();
};
//正答となるキーを入力したらローマ字表記を表示するscaleを更新する
scaleInit = function(){
cnt = 0;
scale = "";
iLength = textScale_Array[rand].length;
for(i = endStr; i < iLength; i++){
inputNext = searchNext(i);
//入力中の文字が"っ"の場合
if(textScale_Array[rand][i] == "っ"){
//次の文字が母音、な行でない場合
if(vocalCheck(textIndex_Array[inputNext][1][0])){
if(inputCnt <= cnt){
scale += textIndex_Array[inputNext][1][0];
}
cnt++;
i++;
inputNext = searchNext(i);
}
}
//入力中の文字が"ん"の場合
if(textScale_Array[rand][i] == "ん"){
//次の文字が母音、な行でない場合
if(vocalCheck(textIndex_Array[inputNext][1][0])){
if(inputCnt <= cnt){
scale += "n";
}
cnt++;
i++;
inputNext = searchNext(i);
}
}
//通常処理
for(j = 0; j < jLength; j++){
if(textScale_Array[rand][i] == textIndex_Array[j][0][0]){
kLength = textIndex_Array[j][1].length;
for(k = 0; k < kLength; k++){
//特殊な文字でなければ普通に入力させる
if(inputCnt <= cnt){
scale += textIndex_Array[j][1][k];
}
cnt++;
//入力中の文字が「い」列で、その後にゃぃゅぇょがある場合
//J以外のい列の後に小文字が入るならば入力を省略する
if((textIndex_Array[j][1][1] == "i") && (textIndex_Array[inputNext][1][0] == "x")){
if(textIndex_Array[j][1][0] != "j"){
if(inputCnt <= cnt){
scale += "y";
}
cnt ++;
}
if(inputCnt <= cnt){
scale += textIndex_Array[inputNext][1][textIndex_Array[inputNext][1].length-1];
}
cnt++;
i++;
break;
}
}
break;
} //if
} //for j
} //for i
}; //function
KeyListener.onKeyDown = function(){
mess = "DOWN -> Code: " + Key.getCode() + "\tACSII: " + Key.getAscii()+"\tKey: " + chr(Key.getAscii());
if(chr(Key.getAscii()).toString() == scale.split("", 1).toString()){
inputTotalCnt++;
inputCnt++;
inputDuration++;
endRome++;
scaleInit();
if(scale.length <= 0){
textInit();
}
if(inputMaxDuration < inputDuration){
inputMaxDuration = inputDuration;
}
}else if(!Key.isDown(16)){
mess = "miss tatch";
inputTotalCnt++;
inputTotalMiss++;
inputDuration = 0;
}
total = inputTotalCnt;
miss = inputTotalMiss;
duration = inputDuration;
maxDuration = inputMaxDuration;
};
textInit();
同じ階層に入れた外部読み込み用のテキストtextPattern.txt
pattern=あ/a
い/i
う/u
え/e
お/o
か/ka/ca
き/ki
く/ku/cu
け/ke
こ/ko/co
さ/sa
し/si/shi/ci
す/su
せ/se/ce
そ/so
た/ta
ち/ti/chi
つ/tu/tsu
て/te
と/to
な/na
に/ni
ぬ/nu
ね/ne
の/no
は/ha
ひ/hi
ふ/hu/fu
へ/he
ほ/ho
ま/ma
み/mi
む/mu
め/me
も/mo
や/ya
ゆ/yu
よ/yo
ら/ra
り/ri
る/ru
れ/re
ろ/ro
わ/wa
を/wo
ん/nn
が/ga
ぎ/gi
ぐ/gu
げ/ge
ご/go
ざ/za
じ/ji/zi
ず/zu
ぜ/ze
ぞ/zo
だ/da
ぢ/di
づ/du
で/de
ど/do
ば/ba
び/bi
ぶ/bu
べ/be
ぼ/bo
ぱ/pa
ぴ/pi
ぷ/pu
ぺ/pe
ぽ/po
ぁ/xa/la
ぃ/xi/li/xyi/lyi
ぅ/xu/lu
ぇ/xe/le/xye/xle
ぉ/xo/lo
っ/xtu/ltu/ltsu
ゃ/xya/lya
ゅ/xyu/lyu
ょ/xyo/lyo
A/a
B/b
C/c
D/d
E/e
F/f
G/g
H/h
I/i
J/j
K/k
L/l
M/m
N/n
O/o
P/p
Q/q
R/r
S/s
T/t
U/u
V/v
W/w
X/x
Y/y
Z/z
1/1
2/2
3/3
4/4
5/5
6/6
7/7
8/8
9/9
0/0
、/,
。/.
!/!
?/?
ー/-
同じ階層に入れた外部読み込み用の問題文typing.txt
textData=こんにちは
,おはようございます
,こんばんは
,抹茶プリンは最高!
,ゴノレゴ13
,提出物を出して下さい
,なんとなく人生を謳歌している
,そんな馬鹿な。
,白い白馬から落馬して落ちた
,三人寄れば文殊の知恵
,料理のさしすせそ
,朝食は毎日食べましょう
,ホップ、ステップ、ジャンプ!
,知覚過敏
,2378テトラクロロジベンゾパラジオキシン
,サンゴ礁の見える海
,残念で仕方が無い
,朝飯前
,犯人はヤス
,靖子さん、朝ご飯は?
,重大なエラーが発生しました。直ちに終了して下さい。
&textScale=こんにちは
,おはようございます
,こんばんは
,まっちゃぷりんはさいこう!
,ごのれご13
,ていしゅつぶつをだしてください
,なんとなくじんせいをおうかしている
,そんなばかな。
,しろいはくばかららくばしておちた
,さんにんよればもんじゅのちえ
,りょうりのさしすせそ
,ちょうしょくはまいにちたべましょう
,ほっぷ、すてっぷ、じゃんぷ!
,ちかくかびん
,2378てとらくろろじべんぞぱらじおきしん
,さんごしょうのみえるうみ
,ざんねんでしかたがない
,あさめしまえ
,はんにんはやす
,やすこさん、あさごはんは?
,じゅうだいなえらーがはっせいしました。ただちにしゅうりょうしてください。
最終更新:2007年12月18日 20:08