2017年9月4日月曜日

VBAで魔法呪文のマクロを組んでみた

このエントリーをはてなブックマークに追加

魔法使いは呪文を唱えることが多い。「チンカラホイ!」とか(『のび太の魔界大冒険』より)。
なぜ唱えるのだろうか。ぼくは魔法を使ったことがないのでよくわからない。

わざわざ呪文を口にすることにはデメリットがいくつかある。
まず、発動までに時間がかかる。
スポーツ漫画だと「トルネードアロースカイウイングシュート!」と言いながらシュートを打ったりするが(『キャプテン翼』より)、どう考えても時間の無駄だ。「トルネードアロースカイウイングシュート!」と叫ぶためには相当長い”溜め”をつくることが必要で、PKのときならともかく、ゴール前でそんなことを叫んでいたらあっという間にボールを取られてしまうだろう。

また、相手に察知されるというマイナス面もある。野球でピッチャーが「スライダー!」と叫びながら球を投げたら、打たれる可能性はまちがいなく高まる(ときどき嘘を混ぜれば効果的かもしれないが)。



かようなデメリットがあるにもかかわらず魔法使いが呪文を唱えるのは、そうしなければならない理由があるからだろう。

それはつまり、魔法というものは魔法使いの内なる力ではないということを意味する。
内なる力の発動であれば心の中で思うだけで十分だ。ピッチャーが黙ってスライダーを投げるように。
わざわざ言語化するのは他者に対して指示を与えているからだ。
たぶん精霊みたいなものが近くにいて、そいつに対して「こういう魔法を使いたいからよろしく!」というメッセージを発する、それが呪文なのだ。

構造としては、コンピュータを操作するときにコマンドを打ちこむことで望むとおりの動作をさせるのと同じだ。
つまり、魔法使いとは精霊を思い通りに動作させるプログラマーであり、呪文はプログラミング言語にあたるわけだ。



魔法は科学と対極にあるものとして語られることが多いが(『のび太の魔界大冒険』でも魔法が使える世の中では科学が迷信扱いされていた)、はたしてそうなのだろうか。

魔法を使いこなすためには、同一の条件下で同一の呪文を唱えたときは同一の動作が確認されなければならない。あるときは火が出て、あるときは氷が出て、あるときは相手を回復させるような呪文は使い物にならない。ドラクエシリーズには「パルプンテ」という何が起こるかわからない呪文があるが、これを常用するユーザーはまずいないだろう。
少なくとも呪文を唱えることによって何が起きたかという結果が確認できて、さらに「この呪文を唱えれば10回中8回以上は××という効果が生じる」といった傾向が把握できないと役には立たない。

すなわち魔法を有用なものとして使うためには検証可能性や再現性、測定可能性が求められるわけで、これはまさしく科学のアプローチそのものである。
魔法とは科学なのだ。



呪文が精霊に対するコマンドである以上、命令の内容は客観的・普遍的なものでなければならない。
たとえばドラクエシリーズにおける呪文”メラ”は「敵に対して小さな火球をぶつける」といった説明がなされているが、これはゲームユーザーに対する簡略化された説明であって、実際はこんな指示では魔法は発動できないはずだ。

まず”敵”のような漠然とした概念では場所を特定できないから、座標を用いて火球をぶつけるオブジェクト(対象)を指定してやる必要がある。
「呪文詠唱者を起点として真北から方位角132度の方向6.1メートルの位置」といった一点に定まる座標の指示を与えなければならない。
方位角や距離を正確に把握するためには三角法に対する正しい知識と素早い計算能力が必要になるから、魔法使いは相当数学に強くないとやっていけない。


さらに”小さな火球”といった曖昧な表現では精霊はうまく対応できないから、サイズ、温度、継続時間といった指標を設定する必要がある。
ただし”敵”は毎回変わるのに対して”小さな火球”は毎回同じものでもかまわないから、マクロのようなものを組んで毎回の発動を簡素化することができる。
一般にはそのマクロの名前が呪文と呼ばれるのだろう。
(ドラゴンボールに出てきた「タッカラプト ポッポルンガ プピリットパロ」のように極端に長い呪文はマクロではなくコードをそのまま読みあげているものだと予想する。神龍の召喚のように数年に一回しか使わないコマンドはマクロとして登録する必要性があまりない。)


ということで、VBAでメラのマクロを組んでみた。



このエントリーをはてなブックマークに追加

0 件のコメント:

コメントを投稿