スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

吉里吉里で暗記学習用クイズ作った!

はじめに

 漢字検定一級の当て字学習用にクイズを作りましたー!

 吉里吉里2で。

暗記クイズ三択画面1

 ……いや~実は、私の暗記にはたいして役に立たなかったんですけど……。(→私が漢検一級に合格するまで!
 せっかく作ったので本体とスクリプト置いておきますね☆

 え? スクリプトも?

 はい……。
 バグが次々に出てきたとしても、私には対応スキルがありません……。

 スクリプトを見て自分で修正してくれぇぇ!

 あ、でも、ちゃんと動くことは動きますよ!!

 TJSはよくわかってないので、堂々とスクリプトを載せるのはホントおこがましいレベルなんですが。

 吉里吉里“最”初心者さんの役に立つ可能性もなきにしもあらず!

 たまたま通りかかった吉里吉里上級者さんがもっと良い書き方を教えてくれるかもしれないし!!!(←こっちが本目的。私が理解できるとは限らないけど!)

 ちょっとかじれば誰にでも書けるような、
 こんな情報秘匿してたってしゃーない、しゃなーい。

 というわけで。

 まずは仕様説明からどうぞ~。

スタート画面~オプション設定・問題選択

暗記クイズスタート画面
 スタート画面で『解答形式』と『出題形式』を選びます。

<三択>
 三つの選択肢の中から正解を選ぶ。

<入力>
 キーボードで正解を入力する。

<ランダム>
 問題をランダムに出題。

<順番>
 問題を順番に出題。

<当て字かな>など、問題選択
 解きたい問題を選ぶと出題画面になります。

出題画面~三択or入力

暗記クイズ三択画面1
 <三択>の出題画面です。

暗記クイズ正解
 正解した場合。

暗記クイズ不正解
 不正解だった場合。

暗記クイズ入力画面
 <入力>の出題画面です。
 エディットボックスにキー入力。最後にEnterを押すと次の問題に移ります。

暗記クイズ下部

 出題画面の下部にあるのはそれぞれ、

<戻る>
 スタート画面に戻る。

<中断>
 問題途中でやめて結果画面を見る。

<履歴>
暗記クイズ履歴
 メッセージ履歴の表示。

<コピー>
 問題をクリップボードにコピーする。
 (画面上は何も変わりませんが、クリップボードにコピーされています)
 ※動作には「clipboardEx.dll」が必要です。zipに同梱。

暗記クイズ三択画面2
 例えばこの画面だと「楓蛾」がクリップボードにコピーされます。
 そのままブラウザに貼り付けして検索したり。そんなふうに使いました。

 全問解き終わるか、<中断>をクリックすると結果画面が出ます。

結果画面~問題記録・再挑戦

暗記クイズ結果画面
 結果画面です。

<問題記録>
 今回挑戦した全問(未回答分含む)を記録します。
 上の画面で記録した場合、全517問が記録されます。
 ※このとき画面上では何も変わりませんが、エクスプローラーで確かめると「記録1.csv」が増えています。

暗記クイズ記録1
 <問題記録>するたび、「記録2.csv」「記録3.csv」……と増えていきます。

<弱点克服>
暗記クイズ弱点克服
 間違えた問題だけをもう一度解きます。
 ※間違えた問題が3問未満だった場合、正解した問題からランダムで拾ってきて必ず3問は出題されます。

暗記クイズ全問正解
 全問正解した場合の結果画面です。
 この状態で<問題記録>した場合、全3問が記録されます。

<再度挑戦>
 全問(上の画面だと全3問)にもう一度挑戦します。

 リンクにフォーカスのない状態で決定キーを押すか、余白をクリックするとスタート画面に戻ります。

スタート画面~その他の説明

暗記クイズ前回記録した問題
 先ほどの画面で<問題記録>した場合、<※前回記録した問題(?問)>が増えています。
 クリックすると記録した問題だけをもう一度解くことができます。

 ※ただし、<問題記録>で出力されたファイルを編集しても、<※前回記録した問題(?問)>から出題される内容には影響がありません。

[T]
 問題の登録名を変更できます。

暗記クイズT
暗記クイズT結果
 ※ゲーム画面上の変更です。保存されているファイル名は変わりません。

[F]
 問題用に登録しているCSVファイルを変更できます。
 「ファイルを開く」ダイアログボックスが出るので、登録したいCSVファイルを選んでください。

暗記クイズカスタマイズ
 このようにカスタマイズすることができます。
 一応漢字学習用以外にも使える……といいのですが。

<一時的にCSVファイルを選択>
 ファイル選択ダイアログが開いたあと、選択したCSVを使った出題画面に写ります。
 [F]で登録せず、問題用CSVを一時的に解きたい場合に使います。
 あまり使う機会はありません(笑)

おまけ・四字熟語モード

暗記クイズ四字熟語画面
 これは本当におまけ程度で、さらに実用性がありません。
 ※四字熟語画面では解答形式(<三択>or<入力>)が無効になります。

暗記クイズ四字熟語1
 下の一覧から漢字を選んでクリック。

暗記クイズ四字熟語2
 上の?をクリックして位置を入れ替えます。

暗記クイズ四字熟語3
 上の?をクリックしてから漢字を選ぶこともできます。

暗記クイズ正解
 四字熟語が完成すると「正解」と出て次の問題に進みます。

 正解するまで終わらないので、「不正解」はありません(笑)

 ギブアップする場合は<中断>を選んでください。

 一応こちら↓を参考にして作りました。

>四字熟語 Flash
>http://www.gamedesign.jp/flash/yojifla/yojifla.html

 これ↑をそのまま一級用にしようかな~とも考えたんですが、一級の四字熟語だと難易度が高くなりすぎると思ったのでやめておきました(笑)

問題用CSVファイルの書き方

暗記クイズ記録1

 問題用CSVファイルは、他の問題だと

ふりがな,漢字

 ですが、四字熟語の場合だけ

四字熟語,ふりがな

 にしてください。

 ※シングルクォーテーション('')やダブルクォーテーション("")でくくらないでください。

 ※問題は必ず三問以上用意してください。

暗記クイズエラー

 ※出題用のCSVファイルはUnicodeで保存します。
 でないと文字化けする漢字があります。(→吉里吉里2でunicodeを表示する
 吉里吉里2で読み込む場合、UTF-8ではなくUTF-16でないといけないようです。

実際のスクリプト

 「first.ks」で保存してそのまま使えると思います。(こっちは文字コードShift-JISでも問題なし)

 ※ただし吉里吉里2の「plugin」フォルダに入っている「clipboardEx.dll」がないとエラーが出ます。(zipファイルには同梱)


;クリップボードプラグイン読み込み
[loadplugin module="clipboardEx.dll"]

*start|スタート
[cm][clearvar][startanchor]

;デバッグメニュー表示
;@eval exp="kag.debugMenu.visible=true"

;================================================================ 設定開始

[iscript]
f.title=kag.caption='絶対合格!!';	// タイトル
// 問題ファイルパス(exeファイルと同じ場所に置く
if(sf.file_p===void){
	sf.file_p=[System.exePath+'当て字かな.csv',System.exePath+'当て字カナ.csv',System.exePath+'国名など.csv',System.exePath+'四字熟語.csv'];
}
// 問題ファイルタイトル
if(sf.file_t===void){
	sf.file_t=['当て字かな','当て字カナ','国名など','四字熟語'];
}
// 初期設定
if(sf.hint===void)sf.hint=true;		// 三択
if(sf.random===void)sf.random=true;	// 入力
// 問題記録用
if(sf.csv===void)sf.csv=[];
f.csv=[];				// 問題
f.color_b='0x9999ff';	// 正解文字色
f.color_r='0xff9999';	// 不正解文字色
f.fsize_l=100;			// フォントサイズ大
f.fsize_m=50;			// フォントサイズ中
f.line='------------------------------------';	// 履歴用罫線
f.return=false;			// 出題途中で<戻る>したかどうか
f.retake=0;				// 復習モード(1=再度挑戦,2=弱点克服)
f.record=false;			// 記録出題モード

// ================================================================ 関数

// csv読み込み
function load_csv(file){
	var csv=[];	// csv読み込み用
	var arr=[];	// 配列作成用
	csv.load(file);	// ファイルを読み込む
	for(var i=0;i<csv.count;i++)
	{	// 行数分、カンマで割って配列を作る
		arr[i]=csv[i].split(',');
	}
	return arr;
}

// シャッフル
function shuffle(arr,n=1,num=0){	// n=繰り返し数	num=開始番号
	for(var i=0;i<n;i++)
	{
		for(var c=num;c<arr.count-1;c++)
		{	// シャッフル
			var c2=intrandom(c,arr.count-1);
			arr[c]<->arr[c2];
		}
		for(var c=arr.count-1;c>num;c--)
		{	// 逆順
			var c2=intrandom(num,c);
			arr[c]<->arr[c2];
		}
	}
}

// csv出力(記録[数字].csv、exeと同じ場所に連番をふって新規保存)
function save_csv(data){
	var arr=[];
	arr.assign(data);
	// 二次配列を一次配列にする
	for(var i=0;i<arr.count;i++)arr[i]=arr[i].join(',');
	var fcnt=0;	// ファイル名連番
	// ファイルの有無をチェックする
	while(fcnt!=-1)
	{
		fcnt++;
		if(Storages.isExistentStorage(System.exePath+'記録'+fcnt+'.csv')==false)
		{	//記録
			arr.save(System.exePath+'記録'+fcnt+'.csv');
			fcnt=-1;
		}
	}
}

// ファイルタイトル入力
function edit_title(str){
	var title=System.inputString('問題タイトル変更','名前を入力してください',str);
	if(title==void)title=str;
	return title;
}

// ファイル選択ダイアログ
function open_file(file){
	var params=%[
	filter:["テキストファイル(*.txt;*.csv)|*.txt;*.csv"],
	filterIndex:1,
	name:"",
	initialDir:System.exePath,
	title:"ファイルを開く",
	save:false,
	];
	if(Storages.selectFile(params))return params.name;
	else return file;
}
[endscript]

;================================================================ マクロ

;メッセージ履歴にのみ表示する
@macro name="backlog"
	@current page=back
	@ch text="&mp.text"
	@hr
	@current page=fore
@endmacro

;================================================================ スタート画面

@position left=0 top=0 width="&kag.scWidth" height="&kag.scHeight" visible=true
@nowait
@history output=false
@font color=default

;問題選択肢
問題選択[r]
;選択肢1タイトル
 [link target="*game" exp="f.file=sf.file_p[0]"][ch text="&'<'+sf.file_t[0]+'>'"][endlink] 
;選択肢1タイトル編集
[link target="*game" exp="sf.file_t[0]=edit_title(sf.file_t[0])"][T][endlink]
;選択肢1ファイル選択
[link target="*game" exp="sf.file_p[0]=open_file(sf.file_p[0])"][F][endlink]
;選択肢1ファイル名
[font color="&f.color_b"][ch text="&' '+Storages.extractStorageName(sf.file_p[0])"][font color=default][r]

;選択肢2
 [link target="*game" exp="f.file=sf.file_p[1]"][ch text="&'<'+sf.file_t[1]+'>'"][endlink] 
[link target="*game" exp="sf.file_t[1]=edit_title(sf.file_t[1])"][T][endlink]
[link target="*game" exp="sf.file_p[1]=open_file(sf.file_p[1])"][F][endlink]
[font color="&f.color_b"][ch text="&' '+Storages.extractStorageName(sf.file_p[1])"][font color=default][r]

;選択肢3
 [link target="*game" exp="f.file=sf.file_p[2]"][ch text="&'<'+sf.file_t[2]+'>'"][endlink] 
[link target="*game" exp="sf.file_t[2]=edit_title(sf.file_t[2])"][T][endlink]
[link target="*game" exp="sf.file_p[2]=open_file(sf.file_p[2])"][F][endlink]
[font color="&f.color_b"][ch text="&' '+Storages.extractStorageName(sf.file_p[2])"][font color=default][r]

;選択肢4(四字熟語用f.yoji=true)
 [link target="*game" exp="f.yoji=true,f.file=sf.file_p[3]"][ch text="&'<'+sf.file_t[3]"][font color="&f.color_b"](解答形式無効)[font color=default]>[endlink] 
[link target="*game" exp="sf.file_t[3]=edit_title(sf.file_t[3])"][T][endlink]
[link target="*game" exp="sf.file_p[3]=open_file(sf.file_p[3])"][F][endlink]
[font color="&f.color_b"][ch text="&' '+Storages.extractStorageName(sf.file_p[3])"][font color=default][r]

[if exp="sf.csv.count>0"]
 [link target="*game" exp="f.record=true"][ch text="&'<※前回記録した問題('+sf.csv.count+'問)>'"][endlink]
[endif][r]

 [link target="*game" exp="f.file=open_file()"]<一時的にCSVファイルを選択>[endlink][r]
[r][r]

;オプション選択肢
解答形式[r] 
[link target="*start" exp="sf.hint=true" cond="!sf.hint"]
	[font color="&f.color_b" cond="sf.hint"]
	[font color=default cond="!sf.hint"]
	<三択>
[endlink cond="!sf.hint"]
[link target="*start" exp="sf.hint=false" cond="sf.hint"]
	[font color="&f.color_b" cond="!sf.hint"]
	[font color=default cond="sf.hint"]
	<入力>
[endlink cond="sf.hint"]
[r]
@font color=default

出題形式[r] 
[link target="*start" exp="sf.random=true" cond="!sf.random"]
	[font color="&f.color_b" cond="sf.random"]
	[font color=default cond="!sf.random"]
	<ランダム>
[endlink cond="sf.random!=1"]
[link target="*start" exp="sf.random=false" cond="sf.random"]
	[font color="&f.color_b" cond="!sf.random"]
	[font color=default cond="sf.random"]
	<順番>
[endlink cond="sf.random"]
@endnowait
[s]

;================================================================ 出題画面

*game
;問題ファイルが存在しないとき最初に戻る
[if exp="!f.record && f.retake==0"]
	@gotostart cond="f.file===void"
	;エラーメッセージ
	[if exp="Storages.isExistentStorage(f.file)==false"]
		@cm
		@nowait
		[font color="&f.color_r"][ch text="エラー!"][r]
		[font color="&f.color_b"][ch text="&f.file"][r]
		[font color=default][ch text="が存在しません。"]
		@wait time=3000
		@gotostart
	[endif]
[endif]

[iscript]
//出題準備

	// 弱点克服モード(間違えた問題のみ出題
	if(f.retake==2)
	{
		tf.miss=[];		// コピー用
		// 間違えた問題をコピー
		for(var i=0;i<f.miss.count;i++)tf.miss[i]=[f.csv[f.miss[i]][0],f.csv[f.miss[i]][1]];
		// 問題が3問未満だったとき問題追加(三択用+問題が一問だと弱点克服にならないので
		if(tf.miss.count<3)
		{
			do
			{
				var check=0;	// 重複チェック用
				// 追加する問題をランダム抽出
				tf.tmp=intrandom(0,f.csv.count-1);
				// 重複チェック
				for(var i=0;i<tf.miss.count;i++)if(tf.miss[i][0]==f.csv[tf.tmp][0] && tf.miss[i][1]==f.csv[tf.tmp][1])check++;
				// 重複なしのとき問題追加
				if(check==0)tf.miss.add([f.csv[tf.tmp][0],f.csv[tf.tmp][1]]);
			}
			while(tf.miss.count<3);
		}
		// 問題用変数にコピー
		f.csv.assign(tf.miss);
	}

	// 記録出題モード(前回記録したときの全問を出題
	if(f.record)
	{
		f.file='前回記録した問題';	// ファイル名(タイトルバー用
		f.csv.assign(sf.csv);		// 問題読み込み
	}

	// 初期化
	f.score=0;		// 正解数
	f.miss=[];		// 間違えた問題
	f.mans=[];		// 誤答
	tf.tmp=0;		// 現在の問題番号

	// 問題読み込み
	if(f.retake==0 && !f.record)f.csv=load_csv(f.file);
	// 問題シャッフル
	if(sf.random)shuffle(f.csv,2);

	// モード初期化
	f.retake=0;
	f.record=false;
[endscript]

;問題が三問未満の場合エラーメッセージ
[if exp="f.csv.count<3"]
		@cm
		@nowait
		[font color="&f.color_r"][ch text="エラー!"][r]
		[font color=default][ch text="問題は三問以上作って下さい。"]
		@wait time=3000
		@gotostart
[endif]

;出題
*loop
[iscript]
	tf.ans='';	// 選択回答
	tf.random=[];	// 重複防止用
	f.random=[];	// 解答三択
	f.random.add(f.csv[tf.tmp][0]);	// 正答
	tf.random.add(tf.tmp);
	// 誤答をランダムで2問選ぶ
	while(f.random.count<3){
		tf.ran=intrandom(0,f.csv.count-1);
		if(tf.random.find(tf.ran)==-1){		// 重複チェック
			f.random.add(f.csv[tf.ran][0]);	// 読みがなを格納
			tf.random.add(tf.ran);
		}
	}
	// 解答シャッフル
	shuffle(f.random);

// ★バグ
// 入力モードのとき、Enterキーを押す際にマウスカーソルが<中断>などの近くにあると
// Editボックスの決定よりもリンク選択の方が優先される?その際リンクの適用範囲が広がっている?
// おまじない程度にマウスカーソルを移動させておく
if(!sf.hint){
	kag.fore.base.cursorX=100;
	kag.fore.base.cursorY=150;
}
[endscript]

;タイトルにミス回数と問題ファイル名を表示
@title name="&f.title+' ミス:'+f.miss.count+' 問題:'+f.file"

;四字熟語の場合のみジャンプする
@jump target="*yoji" cond="f.yoji"


;表示
@cm
@nowait
@history output=true
[backlog text="&f.line"]
;問題
@font size="&f.fsize_l"
[emb exp="f.csv[tf.tmp][1]"]
@font size="&f.fsize_m"
[r]
;三択
@history output=false
@font size=default
[if exp="sf.hint"]
  1.[link exp="tf.ans=f.random[0]" target="*loop_end"][emb exp="f.random[0]"][endlink][r]
  2.[link exp="tf.ans=f.random[1]" target="*loop_end"][emb exp="f.random[1]"][endlink][r]
  3.[link exp="tf.ans=f.random[2]" target="*loop_end"][emb exp="f.random[2]"][endlink][r]
[else]
;入力
  [edit name="tf.ans" length="400"]
	[iscript]
		// エディットボックスにフォーカス移動
		kag.current.links[-1].object.focus();
		// エディットボックスでenterジャンプを有効
		kag.current.links[-1].exp += '; kag.process( ,"*loop_end" );';
		// ひらがな入力
		kag.current.links[-1].object.imeMode = imHira;
	[endscript]
[endif]
@endnowait
@jump target="*footer"


;問題下部オプション他
*footer
@history output=false
@nowait
@font size=default color=default
;現在の問題番号/総問題数を表示
@locate x=500
@ch text="&(tf.tmp+1)+'/'+f.csv.count"
;最初に戻る、中断する、メッセージ履歴を表示
[r][r]
  [link target="*end" exp="f.return=true"]<戻る>[endlink]
[link target="*score"]<中断>[endlink]
[link exp="kag.showHistory()"]<履歴>[endlink]
[link exp="Clipboard.asText=f.csv[tf.tmp][1]"]<コピー>[endlink]
@endnowait
[s]


;答合わせ
*loop_end
@commit
@cm
@history output=true
[backlog text="&' '+tf.ans"]
@nowait
@font size=200
;正解
[if exp="f.csv[tf.tmp][0]==tf.ans"]
	@ch text="正解"
	;正解数記録
	@eval exp="f.score++"
;不正解
[else]
	@ch text="不正解"
	;正答
	@font size="&f.fsize_m" color="&f.color_b"
	@r
	@ch text="&' '+f.csv[tf.tmp][0]"
	;間違えた問題を記録
	@eval exp="f.miss.add(tf.tmp)"
	;誤答を記録
	@eval exp="f.mans.add(tf.ans)"
[endif]
@hr
[backlog text="&f.line"]
@endnowait
@wait time=300
@eval exp="tf.tmp++"
;全問終了後結果画面へ
@jump target="*score" cond="tf.tmp==f.csv.count"
;四字熟語の場合のみジャンプする
@jump target="*loop"


;================================================================ スコア画面

*score
@cm
@history output=true
@font color=default
@nowait
[backlog text="&f.line"]
;点数
[ch text="SCORE : "]
[font color="&f.color_r"][ch text="&f.score"]
[font color=default][ch text="/"]
[font color="&f.color_b"][ch text="&f.csv.count"]
;問題数
[font color=default][ch text=" [ "]
[font color="&f.color_b"][ch text="&f.csv.count"]
[font color=default][ch text="問中、"]
;回答数
[font color="&f.color_r"][ch text="&tf.tmp"]
[font color=default][ch text="問回答 ]"]
@r
@ch text="間違えた問題 [ 問題 正答 誤答 ]"
@r
;ミスがあるとき
@jump target="*miss" cond="f.miss.count>0"
;ミスがないとき
@ch text="  なし!"
@r
;復習モード用リンク
[backlog text="&f.line"]
@history output=false
@locate x=300
[link exp="sf.csv.assign(f.csv),save_csv(f.csv)"]<問題記録>[endlink]
[link target="*game" exp="f.retake=1"]<再度挑戦>[endlink]
;最初に戻る
*end
[backlog text="&f.line"]
;タイトルを元に戻す
@title name="&f.title"
;出題中に戻った場合は不要
@waitclick cond="!f.return"
@gotostart


;間違えた問題一覧
*miss
@eval exp="tf.tmp=0"
*miss_loop
;間違えた問題
@font color=default
@ch text="&' '+f.csv[f.miss[tf.tmp]][1]"
;間違えた問題の正答
@font color="&f.color_b"
@ch text="&'  '+f.csv[f.miss[tf.tmp]][0]"
;誤答
@font color="&f.color_r"
@ch text="&'  '+f.mans[tf.tmp]"
@r
@endnowait
@eval exp="tf.tmp++"
@jump target="*miss_loop" cond="tf.tmp<=f.miss.count-1"
;復習モード用リンク
@font color=default
[backlog text="&f.line"]
@history output=false
@nowait
@r
@locate x=300
[link exp="sf.csv.assign(f.csv),save_csv(f.csv)"]<問題記録>[endlink]
[link target="*game" exp="f.retake=2"]<弱点克服>[endlink]
@endnowait
@jump target="*end"


;================================================================ 四字熟語

*yoji
[iscript]
//出題準備
	tf.ans=['?','?','?','?'];	// 答
	f.kanji=[];						// 漢字選択肢
	f.focus=[];						// 選択位置情報
	tf.random='';
	// 漢字選択肢作成
	for(var i=0;i<3;i++)tf.random+=f.random[i];
	// 一文字ずつ配列にする
	for(var i=0;i<tf.random.length;i++)f.kanji.add(tf.random.charAt(i));
	// 漢字選択肢シャッフル
	shuffle(f.kanji);
	// 先頭に?を4つ追加
	for(var i=0;i<tf.ans.count;i++)f.kanji.unshift('?');
[endscript]

;出題画面
*yoji_r
[iscript]
	// 位置情報が二つそろったとき
	if(f.focus.count==2)
	{
		tf.focus=[];	// コピー用
		tf.focus.assign(f.focus);
		// 漢字を直接格納
		for(var i=0;i<tf.focus.count;i++)tf.focus[i]=f.kanji[tf.focus[i]];
		// 入れ替え
		f.kanji[f.focus[0]]=tf.focus[1];
		f.kanji[f.focus[1]]=tf.focus[0];
		// 位置情報を空にする
		f.focus=[];
	}
[endscript]

@cm
@history output=false
@nowait
@font size=default
;読み
[emb exp="f.csv[tf.tmp][1]"][r]
[iscript]
	// 四字熟語描画
	for(var i=0;i<tf.ans.count;i++)
	{
		with(kag.current)
		{
			.setFont(%[size:f.fsize_l]);
			if(f.focus[0]===i)
			{	// 選択済み
				.setFont(%[color:f.color_b]);		// 色変更
				.processCh(f.kanji[i]);
			}
			else
			{	// 未選択
				.setFont(%[color:.defaultChColor]);	// 色戻す
				.beginHyperLink(%[target:'*yoji_r',exp:'f.focus.add('+i+')']);
				.processCh(f.kanji[i]);
				.endHyperLink(%[]);
			}
		}
	}
	// 改行
	kag.current.setFont(%[size:f.fsize_m]);
	kag.current.processReturn();

	// 漢字選択肢描画(最初の?4つを飛ばす
	for(var i=tf.ans.count;i<f.kanji.count;i++)
	{
		with(kag.current)
		{
			.setFont(%[size:f.fsize_m]);
			if(f.focus[0]===i)
			{	// 選択済み
				.setFont(%[color:f.color_b]);		//色変更
				.processCh(f.kanji[i]);
			}
			else
			{	// 未選択
				.setFont(%[color:.defaultChColor]);	//色戻す
				.beginHyperLink(%[target:'*yoji_r',exp:'f.focus.add('+i+')']);
				.processCh(f.kanji[i]);
				.endHyperLink(%[]);
			}
			// 改行
			if((i-tf.ans.count)==(f.kanji.count-tf.ans.count-1)\2).processReturn();
		}
	}

	// 正解判定用
	for(var i=0;i<tf.ans.count;i++)tf.ans[i]=f.kanji[i];
	if(f.csv[tf.tmp][0]==tf.ans.join(''))tf.ans=tf.ans.join('');
[endscript]

;正解したらジャンプ
[if exp="f.csv[tf.tmp][0]==tf.ans"]
	;リンク制御
	@locklink
	;履歴
	@history output=true
	[backlog text="&f.csv[tf.tmp][1]"]
	;回答を見せる待ち時間
	@wait time=400
	@jump target="*loop_end"
[endif]
@jump target="*footer"

 公開に当たってそれなりに手直ししましたが、元は自分用にテキトーに作ったものなので、色々と見苦しい点があるかと……。
 その辺は自由に改良してください。

 そしてもしよかったらアドバイスください!!!!

既知の問題

  •  <入力>モードのとき、「Enter」を押すと<中断>や<履歴>等をクリックしたのと同じ状態になることがある。
     →マウスカーソルの位置によってはリンク選択が優先される?

  •  <入力>モードのとき、入力中にフォーカスを他のソフト等に移すと稀に「Enter」が効かなくなることがある?
     →原因不明。<履歴>を表示して戻ってくると「Enter」が効くようになっていると思います。

ダウンロード

暗記クイズ.zip (1.4 MB)をダウンロード
※レンタルアップローダーに飛びます。

 問題用CSVファイルはzipに同梱。

 しかし中途半端な、というより、全然足りていない問題ファイルです。

 問題を補強したい方はこちら↓のサイト様をリスト化するのがいいと思います。

>漢検ブログ お父さんの合格レシピ(漢検1級問題集)
>http://kanken1kyuu.at.webry.info/

 こちらのサイト様には意味も掲載されています。

 スクリプトを改良して意味が表示されるようにしたり、色々してもいいかもですね。

おわりに

 ところで漢検一級を勉強している人に吉里吉里使いさんはどのくらいいるのでしょうか。
 もしかしたらいないかも……。

 まぁ最初にも書きましたが、はっきり言ってこのクイズはあまり役に立ちません。

 暗記するならこんなソフト使うより、
 ひたすら問題集見た方が早い!!!!!

 です。

 ……お後がよろしいようで。

 それでも私の数時間が、もしかしてどこかの誰かの何かのお役に立てたらとてもうれしいです。

関連記事

コメント

コメントの投稿

非公開コメント


人気記事

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。