ひらい ぶらり Hi-Library

ぷろぐらみんぐについて。ときどきどうでもいいことについて。

続・GEO BATTLER

 http://paseo102.sakura.ne.jp/test/index.html
 引き続き改良しております。

 scriptaculousのshakeアニメーションって一体どういう神経している人が使うのだろうと思っていたのですが、僕でした。本当にありがとうございました。

 一見用途のなさそうなものでも、意外なところで役に立ってくれるものです。
 さて、新橋スクリプトですが、ひどいソースになっております。

	function add_text() {
		if (text.charAt(i)) {
			switch(text.charAt(i)) {
				case '/':
					i++;
					switch(text.charAt(i)){
						case 'n':
							scrollText();
							break;
						case 'c':
							i++;
							timer = false;
							break;
						case 'w':
							var query = "";
							i++;
							query = parseQuery();
							i++;
							setTimeout(add_text,eval(query));
							break;
						case 'l':
								var query = "";
								var player = 0;
								i++;
							query = parseQuery();
							player = getPlayer(query);
							$("p" + player).visualEffect("DropOut",{duration:0.3});
							i++;
							setTimeout(add_text,300);
							break;
						case 'd':
							var player = 0;
							var point = 0;
							var palamater_num = 0;
							i++;
							while	(text.charAt(i) != '/') {
								var query = "";
								query = parseQuery();
								switch(palamater_num) {
									case 0:
										player = getPlayer(query);
									break;
									case 1:
										point = query;
										break;
									default:
										break;
								}
								if (text.charAt(i) != '/') {
									palamater_num++;
									i++;
								}
							}
							$("p" + player).visualEffect("Shake",{from:0.1, to:2.0, duration:0.3});
							$("p" + player).visualEffect("Pulsate",{duration:0.3});
							j$("#p" + player + "_hp").animate({width:point + "%"},"500");
							i++;
							setTimeout(add_text,500);
							break;
						case 'a':
							var player = 0;
							var palamater_num = 0;
							i++;
							while	(text.charAt(i) != '/') {
								var query = "";
								query = parseQuery();
								switch(palamater_num) {
									case 0:
										player = getPlayer(query);
									break;
									default:
										break;
								}
								if (text.charAt(i) != '/') {
									palamater_num++;
									i++;
								}
							}
							if (player == 1) {
								new Effect.MoveBy("p" + player, 0, -50, {duration:0.25});
								new Effect.MoveBy("p" + player, 0, 50, {duration:0.25,delay:0.25});
							} else {
								new Effect.MoveBy("p" + player, 0, 50, {duration:0.25});
								new Effect.MoveBy("p" + player, 0, -50, {duration:0.25,delay:0.25});
							}
							i++;
							setTimeout(add_text,500);
							break;
					}
					break;
				default:
					j$("#message_panel").html(j$("#message_panel").html() + text.charAt(i));
					i++;
					setTimeout(add_text,100);
					break;
			}
		}
	}

 関数化してたりしてなかったり。jQuery使ってたりprototype使ってたり、節操なしです。
 見てもよくわからないと思うのですが、一応'/'を見つけたら、コマンドとして次の文字を調べて、該当するものがあればその処理をするというようになっています。
ただ、最初に面倒くさがってコマンドとして認識するものを「文字列」ではなく「文字」としてしまったため、アルファベット分しかコマンドを作れない上に、作ってる本人ですら何のアルファベットに何を割り当てたのか忘れる始末。

 皆さんも似非インタプリタみたいなものを作る時は、面倒くさがらずにちゃんと文字列で判別するようにしましょう。いや、わからないけれども。

 今日はそんなに技術的な話っぽくないですね。ソースコード晒してごまかしているだけですね。