メイン コーダーズルーム【スクリプト系】 MXで外部テキストを利用したランダムクイズの作成 | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
miboo | Åê¹ÆNo.8545 投稿日時: 2004-6-24 11:00 |
新米 居住地: 投稿: 13
使用環境:
WinXP Flash MX2004 pro MacOSX 10.3.4 Flash MX2004 |
MXで外部テキストを利用したランダムクイズの作成 はじめましてmibooと申します。
ランダムクイズの作成で行き詰ってしまったので ぜひ、ご助言いただきたく投稿させていただきます。 まず、クイズの仕様ですが、全部で40問の3択クイズです。 一回の出題は10問です。 問題と3つの選択肢、答えは外部txtファイルに以下のように 記述しています。 questionArray=問題,選択肢A,選択肢B,選択肢C,正解, ・ ・ ・ 問題,選択肢A,選択肢B,選択肢C,正解&endFlag=1 としてこれをquestion.txtとしています。 後日難易度別に作ろうと思っているのですが、 現在難易度が1つしかないので、 1フレーム目に this.endFlag = 0; if (this.difficult == 1) { this.loadVariables( "question.txt" ); } と記述し 3フレーム目で下記のように記述し初期化しています。 this.questionArray = this.questionArray.split(newline); for (i=0; i<this.questionArray.length; i++) { questionArray[i] = questionArray[i].split(","); } this.totalCorrect = 0; this.totalCount = 0; 次に4フレーム目で配列からランダムに問題を拾い、 それぞれ配列から変数を拾うようにしています。 this.currentQuestion = Math.floor( Math.random() * this.questionArray.length ); this.question = questionArray[ this.currentQuestion ][ 0 ]; this.selectA = questionArray[ this.currentQuestion ][ 1 ]; this.selectB = questionArray[ this.currentQuestion ][ 2 ]; this.selectC = questionArray[ this.currentQuestion ][ 3 ]; this.correct = questionArray[ this.currentQuestion ][ 4 ]; 正解、不正解の判定は下記のような記述をしております。 if (this.answer == this.correct) { this.judgeIcon.gotoAndPlay("correct"); this.totalCorrect++; if (this.totalCorrect == 1) { this.count1.gotoAndPlay(2); } else if (this.totalCorrect == 2) { this.count2.gotoAndPlay(2); } else if (this.totalCorrect == 3) { this.count3.gotoAndPlay(2); }else if (this.totalCorrect == 4) { this.count4.gotoAndPlay(2); }else if (this.totalCorrect == 5) { this.count5.gotoAndPlay(2); }else if (this.totalCorrect == 6) { this.count6.gotoAndPlay(2); }else if (this.totalCorrect == 7) { this.count7.gotoAndPlay(2); }else if (this.totalCorrect == 8) { this.count8.gotoAndPlay(2); }else if (this.totalCorrect == 9) { this.count9.gotoAndPlay(2); }else if (this.totalCorrect == 10) { this.count10.gotoAndPlay(2); } } else { this.judgeIcon.gotoAndPlay("incorrect"); } this.totalCount++; this.correctRatio = Math.round(this.totalCorrect/totalCount*1000)/10; this.answer = ""; this.stop(); ここまでで、ランダムに読み込むことはできたのですが、同じ問題が出てしまうので同じ問題が出題されないようにしたいのですが、やり方として、問題それぞれに、ユニークナンバーを振り分け最初に10問一気にランダムで読みこんでしまい、その中には同じ番号が入らないようにするのが一番スマートかとおもうのですが、記述のしかたが思い浮かばず・・・・といったところで躓いております。 どなたか、ご助言、ご助力願えますでしょうか。 宜しくお願いいたします。 |
野中文雄 | Åê¹ÆNo.8546 投稿日時: 2004-6-24 11:09 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: MXで外部テキストを利用したランダムクイズの作成 外部テキストファイルから読込んだ40の問題のデータを、(2次元)配列に作成することまではおできになっているということですね。
引用: mibooさんは書きました: 設問の配列がすでにできあがっているのでしたら、そのエレメントをランダムに並替えればよいと思います。 引用: ここまでで、ランダムに読み込むことはできたのですが、同じ問題が出てしまうので同じ問題が出題されないようにしたいのですが、やり方として、問題それぞれに、ユニークナンバーを振り分け最初に10問一気にランダムで読みこんでしまい、その中には同じ番号が入らないようにするのが一番スマートかとおもうのですが、記述のしかたが思い浮かばず・・・・といったところで躓いております。 |
miboo | Åê¹ÆNo.8549 投稿日時: 2004-6-24 11:29 |
新米 居住地: 投稿: 13
使用環境:
WinXP Flash MX2004 pro MacOSX 10.3.4 Flash MX2004 |
Re: MXで外部テキストを利用したランダムクイズの作成 野中様
すばやいご回答ありがとうございます! 早速下記を参考にしてチャレンジしてみます。 また躓いてしまったらご助言、ご助力いただければ幸いです。 それでは宜しくお願いいたします。 引用:
|
miboo | Åê¹ÆNo.8557 投稿日時: 2004-6-24 15:45 |
新米 居住地: 投稿: 13
使用環境:
WinXP Flash MX2004 pro MacOSX 10.3.4 Flash MX2004 |
Re: MXで外部テキストを利用したランダムクイズの作成 mibooです。
お世話になります。 先ほど教えていただいたスクリプトを組み込む場合の スクリプトの流れとして 配列を偏りなくランダムに並び替える ↓ 並び替えられた配列からランダムで問題を選択 という流れになると思い、 //偏りなくランダムに並び替え function shuffleArray(questionArray) { var i = questionArray.length; while (i--) { var j = Math.floor(Math.random()*(i+1)); var t = questionArray[i]; questionArray[i] = questionArray[j]; questionArray[j] = t; } } //さらに問題のランダム表示 this.currentQuestion = Math.floor( Math.random() * this.questionArray.length ); this.question = questionArray[ this.currentQuestion ][ 0 ]; ・ ・ ・ と上記ようにスクリプトを記述しましたが やはり同じ問題が表示されてしまいました。 先ほどの仕様の説明で足りなかったと思われるのですが、 処理の流れとして 1)問題を定義 ↓ 2)判定 ↓ 3)正解、不正解のリアクションを別MCで表示 ↓ 4)10問正解の場合は全問正解へと抜ける それ以外は1)に戻る という形です。(関係なかったらすみません。) 私の上記の考え方が間違っている可能性大ですので ご助言、ご助力いただけないでしょうか。 宜しくお願いいたします。 |
野中文雄 | Åê¹ÆNo.8558 投稿日時: 2004-6-24 16:14 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: MXで外部テキストを利用したランダムクイズの作成
|
miboo | Åê¹ÆNo.8562 投稿日時: 2004-6-24 18:14 |
新米 居住地: 投稿: 13
使用環境:
WinXP Flash MX2004 pro MacOSX 10.3.4 Flash MX2004 |
Re: MXで外部テキストを利用したランダムクイズの作成 mibooです。
お世話になります。 なるほど、最初に出題される問題を決めてしまい(運命を決める)それを頭から順に表示させればよいわけですね。 そこで下記の様に記述してみましたが、 問題が出力されませんでした。。。 //問題のシャッフル(同一問題がでないようにする) function RandomArray(questionArray) { var qResult = questionArray.concat(); var i = qResult.length; while (i--) { var question = Math.floor(Math.random()*(i+1)); var tmp = qResult[i]; qResult[i] = qResult[question]; qResult[question] = tmp; } return qResult; } //運命を決める qt = RandomArray(questionArray); this.currentQuestion = qt; this.question = questionArray[ this.currentQuestion ][ 0 ]; ・ ・ ・ ためしに出力をみてみたのですが、 解答欄の部分は テキスト編集: Variable=_level0.selectA 可視=true テキスト = " という風に出るのですが、問題部分はシンボルと表示されるだけで出力されていませんでした。 見当違いの方向に進んでしまっていたらもうしわけないです。 どうすればよいかアドバイスお願いいたします。 宜しくお願いいたします。 |
野中文雄 | Åê¹ÆNo.8564 投稿日時: 2004-6-24 19:00 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: MXで外部テキストを利用したランダムクイズの作成 スクリプトの処理の内容は、「ActionScript辞書」などで確認されていますか?
ランダムに並替える関数は、先のポストで試された処理と比べて、ステートメントが2行追加されています。どちらを使用しても、同じ結果は得られます。けれど、具体的なスクリプトは異なってきますので、必ず意味は確認してください。 引用: mibooさんは書きました: |
miboo | Åê¹ÆNo.8569 投稿日時: 2004-6-25 1:18 |
新米 居住地: 投稿: 13
使用環境:
WinXP Flash MX2004 pro MacOSX 10.3.4 Flash MX2004 |
Re: MXで外部テキストを利用したランダムクイズの作成 mibooです。
おせわになります。 野中様 あれから色々友人の力をかりたりして試行錯誤しまして、なんとかうごきました ムービーの流れとして正解する度に毎回ランダムで読み込んでいたものを 運命を決めておくという意味をもう一度とらえ直して変えてみました。 クイズの質問にユニークIDを振り、問題定義の前の段階で参考に教えてた頂いた 運命を決めておくスクリプトでランダムな配列を読み出し、重複がないように しました。また、それを頭から順に出題するようにカウントベースでループするようにしました。スクリプトとしては下記の様になってます。 問題定義の前段階として運命を決めてます。 function xRandomArray(lArray) { var lResult = lArray.concat(); var i = lResult.length; while (i--) { var nPos = Math.floor(Math.random()*(i+1)); var temp = lResult[i]; lResult[i] = lResult[nPos]; lResult[nPos] = temp; } return lResult; } a0 = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39"]; a = xRandomArray(a0); //配列をランダムに並び替え var qArray = []; var k = 10; for (i=0; i<k; i++) { ax = a[i]; ay = questionArray[ax]; qArray.push(ay); } trace(qArray); その後次のフレームでカウントごとに頭から表示させるようにしました。 this.question = qArray[this.totalCount][0]; this.selectA = qArray[this.totalCount][1]; this.selectB = qArray[this.totalCount][2]; this.selectC = qArray[this.totalCount][3]; this.correct = qArray[this.totalCount][4]; 非常に有効なアドバイスを頂き本当にありがとうございました。 無事動くようになり、一安心です。 |
野中文雄 | Åê¹ÆNo.8570 投稿日時: 2004-6-25 1:57 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: MXで外部テキストを利用したランダムクイズの作成 直接出題の配列を並替えてはダメなのでしょうか?
引用: mibooさんは書きました:
引用: その後次のフレームでカウントごとに頭から表示させるようにしました。 |
miboo | Åê¹ÆNo.8823 投稿日時: 2004-7-2 21:14 |
新米 居住地: 投稿: 13
使用環境:
WinXP Flash MX2004 pro MacOSX 10.3.4 Flash MX2004 |
Re: MXで外部テキストを利用したランダムクイズの作成 野中様
返事が遅くなってしまい申し訳ありませんでした。 動作確認ができたので安心していました。 野中様のご提案で同様に動作しました。 シンプルな記述だったので、□い頭を○くするというのはあーなるほど、こういうことかと感動しております! これからも色々とアクションスクリプトに挑戦していきますので、今後とも宜しくお願いいたします。 ありがとうございました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |