メイン 迷える子羊の部屋【初心者専用】 クイズcsvの読み込みをカテゴリ別に変えたい | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
werdan | Åê¹ÆNo.45602 投稿日時: 2010-8-30 10:39 |
新米 居住地: 投稿: 4
使用環境:
WinXP flash cs3 使用言語AS3 |
クイズcsvの読み込みをカテゴリ別に変えたい はじめまして、wedanと申します。
この度は稚拙ながらも学ばせて頂きたい所存ですので どうぞ宜しくお願い致します。 質問です 私は現在CSV読み込みでのクイズを作成しております。 出題数は20問 クイズには4つ(FS、M1、M2、M3)のカテゴリと共通問題があり それぞれを15問、5問の割合で引っ張ってくるように設定しておりました。 ここに新たに「SM」というカテゴリを加え、共通問題からは吸い上げをせず、全て「SM.CSV」から20問吸い上げるという設定にしたいと考えております。 現在これをif文で設定するやり方を考えているのですが もっと簡単にswitchの中で設定するやり方はないものかと模索しております。 宜しくお願い致します 環境 flash cs3 AS3 WinXP ----------------------------------------------------------- 「QuizManager.as」 //出題問題を管理するクラス // package script.model { import flash.events.EventDispatcher import flash.events.Event; import script.model.QuizCollection; public class QuizManager extends EventDispatcher { //quizCollectionから問題を出題するランクを決めるクラス //共通問題出題数を決めるクラス //出題問題 public var quiz:Array; //問題集 public var quizCollection:QuizCollection; private var targetQuestions; //問題数 private var quizNum:int; //共通問題数 private var commonNum:int=5; public function QuizManager() { quiz=new Array() quizCollection=new QuizCollection; } /* id:data[i][0], rank:data[i][1], question:data[i][2], explanation:data[i][3], choice1:data[i][4], choice2:data[i][6], choice3:data[i][8], choice4:data[i][10], correct:correct */ private function setQuestions() { for(var i=20;i<targetQuestions.length;i++) { quiz.push(targetQuestions[i]) } shuffle(quiz) var _common:Array=new Array() if ( setQuestions == quizCollection.SM) { for(i=0;i<quizCollection.COMMON.data.length;i++) { _common.push(quizCollection.COMMON.data[i]) } shuffle(_common) for(i=0;i<commonNum;i++) { quiz.unshift(_common[i]) } } else { for(i=0;i<quizCollection.COMMON.data.length;i++) { _common.push(quizCollection.COMMON.data[i]) } shuffle(_common) for(i=0;i<commonNum;i++) { quiz.unshift(_common[i]) } } quiz=quiz.slice(0,quizNum) for(var j=0;j<quizNum;j++) { quiz[j].order=j+1; quiz[j].answer=new Object() } /* id:data[i][0], rank:data[i][1], question:data[i][2], explanation:data[i][3], choice1:data[i][4], choice2:data[i][6], choice3:data[i][8], choice4:data[i][10], correct:correct order1-20 answer:1-4 */ } private function shuffle(value:*) { for(var i=0;i<value.length;i++) { var j:int=int(Math.random()*(i+1)) var temp:Object=value[j]; value[j]=value[i]; value[i]=temp; } return value; } public function setSkill(value) { switch(value) { case "FS" : targetQuestions=quizCollection.FS.data; break; case "M1" : targetQuestions=quizCollection.M1.data; break; case "M2" : targetQuestions=quizCollection.M2.data; break; case "M3" : targetQuestions=quizCollection.M3.data; break; case "SM" : targetQuestions=quizCollection.SM.data; break; } setQuestions() } public function set quizTotal(value:int) { quizNum=value; } public function setAnswer(value1:int,value2:String) { quiz[value1].answer=value2; } } } ----------------------------------------------------------- 「QuizCollection.as」 package script.model { import flash.events.EventDispatcher import flash.events.Event; import script.model.CSVLoader; import flash.net.URLRequest; public class QuizCollection extends EventDispatcher { //呼び出されたランクの問題集を作成するクラス //public var data:Array public var M1:Object; public var M2:Object; public var M3:Object; public var FS:Object; public var SM:Object; public var COMMON:Object; public function QuizCollection(...args) { for(var i=0;i<args.length;i++) { switch(args[i]) { case "FS" : FS=new CSVLoader() FS.load(new URLRequest("FS.csv")) FS.addEventListener(Event.COMPLETE,csvLoaded) break; case "M1" : M1=new CSVLoader() M1.load(new URLRequest("M1.csv")) M1.addEventListener(Event.COMPLETE,csvLoaded) break; case "M2" : M2=new CSVLoader() M2.load(new URLRequest("M2.csv")) M2.addEventListener(Event.COMPLETE,csvLoaded) break; case "M3" : M3=new CSVLoader() M3.load(new URLRequest("M3.csv")) M3.addEventListener(Event.COMPLETE, csvLoaded) //trace("M3") break; default: break; } } COMMON=new CSVLoader() COMMON.load(new URLRequest("共通.csv")) COMMON.addEventListener(Event.COMPLETE,csvLoaded) SM=new CSVLoader() SM.load(new URLRequest("SM.csv")) SM.addEventListener(Event.COMPLETE,csvLoaded) } //**.csvをロードして**にhashTableを保存 private function csvLoaded(event:Event) { var _data:Array=new Array() var _temp:Object=new Object() for(var i=0;i<event.target.data.length;i++) { var correct:Object; if(event.target.data[i][4]=="1") { correct=1; } if(event.target.data[i][6]=="1") { correct=2; } if(event.target.data[i][8]=="1") { correct=3; } if(event.target.data[i][10]=="1") { correct=4; } _temp= { id:event.target.data[i][0], question:event.target.data[i][1], explanation:event.target.data[i][2], choice1:event.target.data[i][3], choice2:event.target.data[i][5], choice3:event.target.data[i][7], choice4:event.target.data[i][9], correct:correct } _data.push(_temp.valueOf()) } event.target.data=_data; } } } |
ひろゆき | Åê¹ÆNo.45603 投稿日時: 2010-8-30 12:45 |
ちょんまげら 居住地: 東京砂漠 投稿: 4403
使用環境:
10.8.5 Flash Professional CS4/CS6/CC Safari 6.1 |
Re: クイズcsvの読み込みをカテゴリ別に変えたい これだけ長いスクリプトであれば、もう少し整形された方がよろしいかと。
また、不要な部分は削除してもよろしいのでは? [code][/code]で囲めば、次のように表示できます。 QuizManager.as
QuizCollection.as
この状態で、何が問題で、どう改善なさりたいのでしょう?
|
werdan | Åê¹ÆNo.45604 投稿日時: 2010-8-30 13:58 |
新米 居住地: 投稿: 4
使用環境:
WinXP flash cs3 使用言語AS3 |
Re: クイズcsvの読み込みをカテゴリ別に変えたい ひろゆきさん
ご返信ありがとうございます 問題点は QuizManager.asの中のif文で設定しているはずの 「SMのときはcommon.csvからは問題を取ってこない。SM.csvからのみ20問取ってくる」 がうまく設定出来てない事です。 なのでそこをごっそり削って switchの中でそれぞれのCSV読み込み設定を行いたい所存です。 宜しくお願い致します。 |
werdan | Åê¹ÆNo.45626 投稿日時: 2010-9-3 11:34 |
新米 居住地: 投稿: 4
使用環境:
WinXP flash cs3 使用言語AS3 |
Re: クイズcsvの読み込みをカテゴリ別に変えたい ひろゆき様
再度ご説明させてください。 今回、既存のスクリプトの仕様を変更することになりました。 まず、問題集が"FS"、"M1"、"M2"、"M3"、"COMMON"のように5種類あります。 それぞれ.csvから読み込む形となっております。 ユーザ側で選べる問題の種類は"FS"、"M1"、"M2"、"M3"の4種類で、 選ばれた問題集から20問出題するようになっており、 そのうちの5問は"COMMON"の問題集から共通して必ず5問出題するような設定となっております。 この度の変更では"SM"という問題集が追加されることになりました。 そして、"SM"の問題が選ばれた際には"COMMON"からは選出されず、 "SM"からのみ、20問出題される というものです。 QuizCollection.as
QuizManager.as
QuizCollection.as の中のswitch文にて、SM以外の問題が選ばれた場合にのみ COMMONのcsvを読み込むように書いてみました。 でも、やはり"SM"の場合でもCOMMONは読み込まれてしまいます。 どこが問題なのでしょうか? また、別の方法を考えているときに、QuizManager.asの中の
この部分をifで出し分けられたら と思い、試行錯誤しておりましたが、 そもそも"SM"という値が入る変数を見つけられないでいるので、 そちらもうまくいきませんでした。 プログラム自体が初心者のため、大変初歩的な質問かとは思いますが 何卒ご教授いただけませんでしょうか。 宜しくお願いします。 |
野中文雄 | Åê¹ÆNo.45629 投稿日時: 2010-9-3 12:34 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: クイズcsvの読み込みをカテゴリ別に変えたい
|
ひろゆき | Åê¹ÆNo.45630 投稿日時: 2010-9-3 12:54 |
ちょんまげら 居住地: 東京砂漠 投稿: 4403
使用環境:
10.8.5 Flash Professional CS4/CS6/CC Safari 6.1 |
Re: クイズcsvの読み込みをカテゴリ別に変えたい 指名されても、忙しいので無理!
もっと早い段階で、情報を整理するなり、第三者が検証しやすいようにflaファイル等々用意するなりしていれば、 対応できたかもしれませんが、残念ながら、多忙モードに突入したため、 まどろっこしいことに構ってられません。 # CSVLoader.asについては全く説明がありませんし、 # csvは回答者が用意せねばならないのでしょうか? 空いた時間に見て差し上げても、構いませんが、 それなりのファイルをご用意していただく必要があるでしょう。
|
werdan | Åê¹ÆNo.45631 投稿日時: 2010-9-3 12:57 |
新米 居住地: 投稿: 4
使用環境:
WinXP flash cs3 使用言語AS3 |
Re: クイズcsvの読み込みをカテゴリ別に変えたい 野中文雄様 ひろゆき様
ご返信いただき、ありがとうございます。 よくわかりました。 大変失礼な形で質問を投げかけたと痛感しております。 失礼致しました。 問題を単純化し、疑問部分のみを載せ質問させていただきます。 また宜しくお願い致します。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |