2007年05月26日

得点を計算してくれる二択のクイズ

JavaScriptの勉強、マジ楽しいです。
外国語の学習よりずっと楽しいのは、相手が人間ではないとは言え、「正しければきちんと動く」「間違っていれば動かない」というフィードバックがすぐに得られるということとではないでしょうか。ユーザーとして試用してみても、きちんと動くときは、一つ一つの選択に対しても、その瞬間ごとにユーザーはフィードバックが得られます。
で、今日作ってみたのは、前回と同じような漢字の読みのタスクです。
前回と違うのは、「正誤判定を行ってくれる」ということです。おまけに得点も計算してくれます。

ここにありますので、興味のある人はやってみてください。

得点を計算してくれる二択のクイズ
変数に得点代入.htm

これを作るために使ってみたのは「変数」という概念です。

この「変数」という概念が最初はよく分からなかったのですが、「エクセルで何かの計算のために参照している欄のことだな」と思ったら、すぐに使えました。

エクセルを使っている人なら、得点であれ、出席であれ、成績簿の最後の欄かどこかに、学生別の平均を出したりしますよね。そして、全員の平均値をさらに平均すれば、クラスの平均値が得られます。

私の理解では、この、クラスの平均値を出すための、まず学生別に算出した平均値を入れているセルこそが、「変数」みたいなものです。どんな数字が入っているかは分からないけど、そのセルを参照すれば、その学生の平均値が分かります。

で、今回の試作品では、「得点」という変数を作りました。最初は得点をゼロにしておいて、先日勉強した「確認ウィンドウ」で二択の問題を出し、正解なら一点ずつ加えていくのです。そして、最後に、「alert」で全得点を学習者にフィードバックします。先日の「条件分岐」を使って、満点なら「おめでとう!」という表示も行います。

alert("ただしい=OK ただしくない=キャンセル");
tokuten = 0;

if(confirm("一日=ついたち?")) {tokuten = tokuten + 1; alert("ただしいです! とくてん="+tokuten);} else alert("ちがいます! とくてん="+tokuten);

if(confirm("二日=ふっか?")) {alert("ちがいます! とくてん="+tokuten);} else {tokuten = tokuten + 1; alert("ただしいです! とくてん="+tokuten);}

if(confirm("三日=みっか?")) {tokuten = tokuten + 1; alert("ただしいです! とくてん="+tokuten);} else alert("ちがいます! とくてん="+tokuten);

if(confirm("四日=よっか?")) {tokuten = tokuten + 1; alert("ただしいです! とくてん="+tokuten);} else alert("ちがいます! とくてん="+tokuten);

if(confirm("五日=いっか?")) {alert("ちがいます! とくてん="+tokuten);} else {tokuten = tokuten + 1; alert("ただしいです! とくてん="+tokuten);}

if(confirm("六日=むっか?")) {alert("ちがいます! とくてん="+tokuten);} else {tokuten = tokuten + 1; alert("ただしいです! とくてん="+tokuten);}

if(confirm("七日=ななか?")) {alert("ちがいます! とくてん="+tokuten);} else {tokuten = tokuten + 1; alert("ただしいです! とくてん="+tokuten);}

if(confirm("八日=ようか?")) {tokuten = tokuten + 1; alert("ただしいです! とくてん="+tokuten);} else {tokuten = tokuten + 1; alert("ただしいです! とくてん="+tokuten);}

if(confirm("九日=ここなか?")) {alert("ちがいます! とくてん="+tokuten);} else {tokuten = tokuten + 1; alert("ただしいです! とくてん="+tokuten);}

if(confirm("十日=じっか?")) {alert("ちがいます! とくてん="+tokuten);} else {tokuten = tokuten + 1; alert("ただしいです! とくてん="+tokuten);}

if(tokuten==10) alert("おめでとう! 全問正解です!"); else alert("あなたは"+ tokuten + "てんでした!");


これで、いちおう動いているのですが、まだまだ満足できていないところがあります。
それは、正答の場合の「得点に1を加える」「ただしいです。あなたは〜点ですと表示する」という複数の処理が、全部、別々の場所に書いてあることです。

だから、修正したいことが出てきても、膳武修正しなくてはならず、ちょっと面倒くさいです。たとえば、今はフィードバックの「ただしいです! とくてん=2」という表現が「正解です」のつもりなのに「漢字の読みは正しい」(つまり、場合によっては誤答のフィードバック)と解釈されそうなので変更したいのですが、十カ所もあるのでやる気が起きません。

まあ、秀丸エディターを使っているので、全置換してしまえばいいんですが、できれば変数のように「処理の入れ物」を作っておいて、そこだけ直せば、参照している全部に反映されるようにしたいものです。

実は、functionというのを使うと、そういうことができるらしいのですが、ちょっと今日はうまくいきませんでした。参考書も何も見ないでやっているので仕方がありません。明日は、何か参考書を見ながら、やってみますね。うまくできたら、ここでご報告します。
posted by 村上吉文 at 07:01 | Comment(0) | TrackBack(0) | 日本語hacks! | このエントリーをはてなブックマークに追加
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]


この記事へのトラックバック