開発環境
- OS X Mavericks - Apple (OS)
- Dart Editor (開発環境)
- Dartium | Dart/ Structured web apps (ブラウザ, Dart VM 用 (Chromium with the Dart VM))
- Safari (ブラウザ, JavaScript 用)
- Dart (プログラミング言語)
Head First JavaScript ―頭とからだで覚えるJavaScriptの基本( Michael Morrison (著), 豊福 剛 (翻訳)、オライリージャパン)の8章(ページの部品をかき集める)、自分で考えてみよう(p.385)をDartで考えてみる。
その他参考書籍
- What is Dart? [Kindle版] (O'Reilly Media) Kathy Walrath Seth Ladd (著) このブログでの感想
自分で考えてみよう(p.385)
コード
sample.dart
import 'dart:html';
void main() {
decisions.forEach((SpanElement span) {
span
..onMouseOver.listen((MouseEvent event) => span.className =
'decisionhover')
..onMouseOut.listen((MouseEvent event) => span.className = 'decision')
..onClick.listen((MouseEvent event){
var decision = span.id == 'decision1' ? 1 : 2;
changeScene(decision);
});
});
decision2.style.visibility = 'hidden';
start..onClick.listen((MouseEvent event) => reset())
..onMouseOver.listen((MouseEvent event) => start.className = 'decisionhover')
..onMouseOut.listen((MouseEvent event) => start.className = 'decision');
start.style.visibility = 'hidden';
}
SpanElement decision1 = querySelector('#decision1');
SpanElement decision2 = querySelector('#decision2');
SpanElement start = querySelector('#start0');
DivElement history = querySelector('#history_figure_adventure');
List<SpanElement> decisions = [decision1, decision2];
int cur_scene = 0;
void changeScene(int decision) {
String message = '';
switch (cur_scene) {
case 0:
cur_scene = 1;
message = '旅は分かれ道から始まります。';
decision2.style.visibility = 'visible';
replaceNodeText('decision1', '決定1');
start.style.visibility = 'visible';
break;
case 1:
if (decision == 1) {
cur_scene = 2;
message = '林の中でかわいい小さな家を見つけました。';
} else {
cur_scene = 3;
message = '橋にたち、穏やかな流れを眺めます。';
}
break;
case 2:
if (decision == 1) {
cur_scene = 4;
message = '窓に魔女';
} else {
cur_scene = 5;
message = '魔女に食われる';
spanVisibility();
}
break;
case 3:
if (decision == 1) {
cur_scene = 6;
message = '巨人に食われる';
spanVisibility();
} else {
cur_scene = 7;
message = '橋の上に巨人';
}
break;
case 4:
if (decision == 1) {
cur_scene = 8;
message = '続く…';
} else {
cur_scene = 5;
message = '魔女に食われる';
}
spanVisibility();
break;
case 7:
if (decision == 1) {
cur_scene = 6;
message = '巨人に食われる';
} else {
cur_scene = 9;
message = '続く';
}
spanVisibility();
break;
}
replaceNodeText('scenetext', message);
if (cur_scene != 0) {
ParagraphElement p = new ParagraphElement();
p.text = '決定 $decision -> シーン $cur_scene : $message';
history.append(p);
} else {
history.children = [];
}
}
void replaceNodeText(String id, String new_text) {
Node node = querySelector('#$id');
Text text_node = new Text(new_text);
while (!node.childNodes.isEmpty) {
node.childNodes.first.remove();
}
node.append(text_node);
}
void reset() {
cur_scene = 0;
replaceNodeText('scenetext', 'シーン説明');
replaceNodeText('decision1', 'ゲームスタート');
decision1.style.visibility = 'visible';
decision2.style.visibility = 'hidden';
start.style.visibility = 'hidden';
history.children = [];
}
void spanVisibility() {
decisions.forEach((SpanElement span) => span.style.visibility = 'hidden');
start.style.visibility = 'visible';
}
シーン説明
ゲームスタート 決定2 始めから
0 コメント:
コメントを投稿