※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

実行画面



ソース

アクション - 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てとらくろろじべんぞぱらじおきしん
,さんごしょうのみえるうみ
,ざんねんでしかたがない
,あさめしまえ
,はんにんはやす
,やすこさん、あさごはんは?
,じゅうだいなえらーがはっせいしました。ただちにしゅうりょうしてください。