12
ライトニングトーク ライトニングトーク AYAでクイズを作ろう ~データの上手な取り扱い方~ Presenter ヒノハル* ** * 日野春鉄道人間工学研究所 http://railway.nanika.jp/ ** レチハルカ(2007, 家庭教師のおねえさん(ましろ先生)(2004, ユーリ・クラシカル(2004,2007

AYAでクイズを作ろう~データの取り扱い方

Embed Size (px)

DESCRIPTION

「うかべん@横浜#3」LT「AYAでクイズを作ろう~データの取り扱い方」スライド資料クイズや用語解説におけるコアスクリプトとデータの分離について。「うかべん@横浜#3」http://study.nanican.net/2009/0315/

Citation preview

Page 1: AYAでクイズを作ろう~データの取り扱い方

ライトニングトークライトニングトーク

AYAでクイズを作ろう

~データの上手な取り扱い方~

Presenter ヒノハル* **

* 日野春鉄道人間工学研究所 http://railway.nanika.jp/ ** レチハルカ(2007), 家庭教師のおねえさん(ましろ先生)(2004),

ユーリ・クラシカル(2004,2007)

Page 2: AYAでクイズを作ろう~データの取り扱い方

ゴーストにクイズを出題させようゴーストにクイズを出題させよう

ユーザに難読駅名の読み方を答えさせるクイズ

Page 3: AYAでクイズを作ろう~データの取り扱い方

ゴーストにクイズを出題させようゴーストにクイズを出題させよう

クイズって?

ゴーストがクイズの問題文を喋る

ユーザが回答を入力する

クイズの例

難読駅名クイズ(レチハルカ)

お受験クイズ(家庭教師)

Page 4: AYAでクイズを作ろう~データの取り扱い方

クイズの要素クイズの要素

クイズに必要なものは2つだけ

インタフェース (問題文表示、解答入力、正答表示、採点 etc.)

データ (問題、正答、誤答例、解説 etc.)

インタフェースとデータの違いは?

インタフェースは最初に作ればそれでOK

データは多ければ多いほどいいしどんどん増やす必要もある

インタフェースとデータをごっちゃにするとどうなっちゃうの!

Page 5: AYAでクイズを作ろう~データの取り扱い方

インタフェースとデータが……インタフェースとデータが……

いっしょくたにしてみた

どうしていけないの? 別にベタ書きでいいじゃん

選択肢の順番をランダムにできますか?

ちょっとここのウェイトの長さ変えたいんだけど

Page 6: AYAでクイズを作ろう~データの取り扱い方

インタフェースとデータインタフェースとデータ

実際の例全体のレイアウト

クリック時の動作 etc.        →インタフェース

問題ごとに差し変わる部分(赤枠内)        →データ

インタフェースとデータを構造的に「分離」しよう

Page 7: AYAでクイズを作ろう~データの取り扱い方

分離するってどういうことだ分離するってどういうことだ

実際の例 (家庭教師)mashiro_question_engine.dic

OnAskQuestion (問題を出題する関数)

OnAnswerCheck (答え合わせをする関数)

OnGetRecord (成績を表示する関数)

GetQuestionCount (問題数を表示する関数)

Etc.

mashiro_question_data.dic

QuestionsArray (問題のデータ)

管理が楽!

Page 8: AYAでクイズを作ろう~データの取り扱い方

データファイルの中身(データファイルの中身(AYAAYA))

AYAでの実装

クイズのデータを配列として保持

(array 構文)

配列をランダムトークとして扱う

(parallel 構文)

これにより、配列の利点とランダムトークの利点を両立できる

問題数把握(ARRAYSIZE)

重複出題回避(nonoverlap)

AYAにもともとある機能なので

テキストファイルを読むより速い             ……かも?

mashiro_question_data.dic

Page 9: AYAでクイズを作ろう~データの取り扱い方

この考え方、どこでも使えるこの考え方、どこでも使える

用語解説(アンカー) ――ユーリ・クラシカル2ure2_anchorcore.dic

Anchor.AddAnchor (アンカーをつける関数)

Anchor.CreateIndexPagesAnchor.GetIndexPage (用語索引を作成したり        表示する関数)

Anchor.DicAnchorSelected (アンカーがクリックされた    ときに呼ばれる関数)

etc.

ure2_anchorword.dic

Anchor.GetAnchorWords (アンカーをつける単語や  解説、各種フラグデータ  を含む配列)

Page 10: AYAでクイズを作ろう~データの取り扱い方

この考え方、どこでも使えるこの考え方、どこでも使える

用語解説(アンカー) ――ユーリ・クラシカル2ure2_anchorword.dic

Anchor.GetAnchorWords (アンカーをつける単語や  解説、各種フラグデータ  を含む配列)

Page 11: AYAでクイズを作ろう~データの取り扱い方

まとめまとめ

データとインタフェースを分離すると……

データの管理が楽になります!

インタフェースの変更も楽になります!

問題数とかを簡単に把握できるようになります!

まあ、やからってクイズの問題が         増える訳やないんやけどな!

Page 12: AYAでクイズを作ろう~データの取り扱い方

おわりやえー