開発環境
- OS X Mavericks - Apple(OS)
- Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
- Safari、Firefox + Firebug (Webプラウザ、プラグイン)
- JavaScript (プログラミング言語)
- jQuery (JavaScript Library)
Head First JavaScript ―頭とからだで覚えるJavaScriptの基本( Michael Morrison (著), 豊福 剛 (翻訳)、オライリージャパン)の8章(ページの部品をかき集める)、自分で考えてみよう(p.385)を解いてみる。
その他参考書籍
自分で考えてみよう(p.385)
コード(BBEdit)
sample.js
var scenetext = $('#scenetext'),
decision1 = $('#decision1'),
decision2 = $('#decision2'),
history = $('#history_figure_adventure'),
start = $('#start0'),
decisions = [decision1, decision2],
cur_scene = 0,
changeScene = function (decision) {
var message = '',
p;
switch (cur_scene) {
case 0:
cur_scene = 1;
message = '旅は分かれ道から始まります。';
decision2.css('visibility', 'visible');
replaceNodeText('decision1', '決定1');
start.css('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 = '魔女に食われる';
endAdventure();
}
break;
case 3:
if (decision === 1) {
cur_scene = 6;
message = '巨人に食われる';
endAdventure();
} else {
cur_scene = 7;
message = '橋の上に巨人';
}
break;
case 4:
if (decision === 1) {
cur_scene = 8;
message = '続く…';
endAdventure();
} else {
cur_scene = 5;
message = '魔女に食われる';
endAdventure();
}
break;
case 7:
if (decision === 1) {
cur_scene = 6;
message = '巨人に食われる';
for (i = 0, max = decisions.length; i < max; i += 1) {
(function () {
decisions[i].css('visibility', 'hidden');
})();
}
} else {
cur_scene = 9;
message = '続く';
endAdventure();
}
break;
}
replaceNodeText('scenetext', message);
if (cur_scene !== 0) {
p = $('<p>').text(
'決定 ' + decision + ' -> シーン ' + cur_scene + ' : '+ message);
history.append(p);
} else {
history.children().remove();
}
},
replaceNodeText = function (id, new_text) {
var node = document.getElementById(id),
text_node = document.createTextNode(new_text);
while (node.firstChild) {
node.removeChild(node.firstChild);
}
node.appendChild(text_node);
},
endAdventure = function () {
for (i = 0, max = decisions.length; i < max; i += 1) {
(function () {
decisions[i].css('visibility', 'hidden');
})();
}
start.css('visibility', 'visible');
},
resetAdventure = function () {
cur_scene = 0;
replaceNodeText('scenetext', 'シーン説明');
replaceNodeText('decision1', 'ゲームスタート');
decision1.css('visibility', 'visible');
decision2.css('visibility', 'hidden');
start.css('visibility', 'hidden');
history.children().remove();
},
i,
max;
start.css('visibility', 'visible');
decision2.css('visibility', 'hidden');
for (n = 0, max = decisions.length; n < max; n += 1) {
(function () {
var decision = decisions[n],
id = 'decision' + (n + 1);
decision.mouseover(function (event) {
document.getElementById(id).className = 'decisionhover';
});
decision.mouseout(function (event) {
document.getElementById(id).className = 'decision';
});
})();
}
for (i = 0, max = decisions.length; i < max; i += 1) {
(function () {
var decision = i + 1;
decisions[i].click(function (event) {
changeScene(decision);
});
})();
}
start.click(function (event) {
resetAdventure();
});
start.mouseover(function(event) {
document.getElementById('start0').className = 'decisionhover';
});
start.mouseout(function (event) {
document.getElementById('start0').className = 'decision';
});
start.css('visibility', 'hidden');
シーン説明
ゲームスタート 決定2 始めから
0 コメント:
コメントを投稿