金曜日 11 21, 2008
金曜日 11 21, 2008
1つ前のエントリで少し触れた「あなたはどんなオープンソースソフトのユーザ?という診断をするゲーム」ですが、せっかくイベントまでに今から作成するので、事前にねたをばらしていくことにします。本音としては、どう作ってよいのか分からないので、誰かに助けてほしい、というところです。
設計コンセプト?は極おおまかに以下のような感じです。
ねらい:
しくみ:
4 つのパラメタ:
ここら辺がどう作ればよいか最も不明な点なのですが、仮に次のように経験値と、興味の方向性ベクトル (3 次元) としてみます。
興味の指向性がわかると、つぎのような話の展開が可能です。ほんとか?
最後に、UI だけでなく、設問と診断ロジックも JavaFX スクリプトで記述してみます。たとえば、下のような感じに。最後の analyze という属性は、整数のシークエンス (配列みたいなもの) として選択したものを渡し、表示する文字列のシークエンスを返す関数を定義しています。スクリプトだと、例えば XML でするより、ここら辺が柔軟に記述できるので便利です。なお、ここに書いてある設問や診断は完全にデタラメです。どなたかアイディアあればこっそりご連絡下さい。
var MODEL = Questionnaire {
title: "コミュニティキャラ診断"
questions: [
Question {
title: "第1問"
question: "ソフトウェアに問題を見つけました。 どうしますか?"
choices: [
"使うのをやめてしまう。",
"ユーザフォーラムや ML に聞いてみる。",
"開発元のバグ追跡システムに報告する。"
]
helpText: ""
},
Question {
title: "第2問"
question: "オープンソースソフトの使い方で一番多いのは?"
choices: [
"一般ユーザ向けの安定版を使う。",
"試したい拡張がある場合など、開発ビルドを使う。",
"バイナリは自分でビルドする。"
]
helpText: ""
},
Question {
title: "第3問"
question: "技術的なセミナー、イベントなどには、"
choices: [
"しばしば参加している。",
"実はその後の懇親会が目的だ。",
"あまり参加しない。"
]
helpText: ""
},
Question {
title: "第4問"
question: "オープンソース製品を使う際、情報源は主に ..."
choices: [
"英語のドキュメント、フォーラムなど難なく使いこなす。",
"ドキュメントやユーザフォーラムは日本語希望。",
"日本語ドキュメントが充実していないことが多い。"
]
helpText: ""
},
Question {
title: "第5問"
question: " コミュニティに参加して、ずばり、"
choices: [
"ユーザ間で情報交換をしたい。",
"製品の改善や拡張に取り組みたい。",
"スキルを磨きたい。"
]
helpText: ""
}
]
result: Result {
title: "あなたは、"
text: [""] // leave it blank
helpText: "※この結果は科学的な裏付けがあるものでは全くありません。"
}
analyze: function(a:Integer[]):String[] {
var expe:Integer; //experience
var soci:Integer; //social
var qual:Integer; //quality, usability
var inno:Integer; //innovation
// Question 1 evaluation logic.
if (a[0] == 0) { expe--; qual--; }
else if (a[0] == 1) { soci++; }
else { qual++ }
// Question 2 evaluation logic.
if (a[1] == 0) { expe--; qual--; }
else if (a[1] == 1) { expe++; inno++; }
else { qual+=2 }
// Question 3 evaluation logic.
if (a[2] == 0) { soci++; inno++; }
else if (a[2] == 1) { soci + 2; }
else { soci-- }
// Question 4 evaluation logic.
if (a[3] == 0) { soci++; }
else if (a[3] == 1) { qual++; }
else { qual++ }
// Question 5 evaluation logic.
if (a[4] == 0) { soci++; }
else if (a[4] == 1) { inno++; }
else { inno++; expe++; }
// Output Text. 2 Strings.
return [
// 1st string
if (expe>2) "経験を積んだ オープンソース開発者です。"
else if (expe<0) "平均的なオープンソース製品ユーザです。"
else "高度なオープンソース製品ユーザです。",
// 2nd string
if (soci>qual and soci>inno and soci>0) "社交性の高さを活かしコミュニティで活躍できるでしょう。"
else if (qual>soci and qual>inno and qual>0) "製品品質へのこだわりを活かしコミュニティから喜ばれるでしょう。"
else "その創造性を、ぜひ新しいプラグイン開発などに活かして下さい。"
]
}
};