表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
ファイヤーボールって、何だ!? 〜呪文屋ロクスケは術式を走らせる〜  作者: 白洲詠人
第三部 エンチャントウェポンって、何だ!?
57/63

第3-10話 無限ループって、何だ!?

「『エンチャントウェポン』の術式の基本は3点。武器から刃の部分を見つけ、そこをほぼ等間隔の区間に分割し、各々を構成する分子(モレキュール)に振動を与える。まず刃の検知だが、searchサブルーチンを使う。これは『ヒール』の術式の痛覚遮断の部分でも、『感覚を脳に伝える線』の位置を検知するのにも使っているが、今回は2つ目の引数の"position"に武器を、3つ目の引数に"edge"を入力する事で、最後に追加された引数"theta"…面どうしの成す角度がtheta以下の箇所を刃とみなしてるんだ。それを、指定した位置から、4つ目の引数…距離”d”の範囲内から刃を見つけ、代数aに代入して出力する。」


「つくづく(わたくし)達の癒しの奇跡も、魔術師の呪文と同じなんですのね。同じさぶるーちん?を使っているなんて…」

キュリアが感心した様に言う。


「次に、サブルーチン"createmesh"で、刃を等間隔の区間…『要素(エレメント)』に分割する。」


「四大元素(エレメント)は無いのに、要素(エレメント)はあるのね…」

以前の話を思い出しながらアゲハが言う。


「まあ、用語の名づけは必要だからな…要素(エレメント)の集合体が、『メッシュ』だ。」


(メッシュ)!?」

ヒサゴが聞きなれない言い回しに戸惑う。


「この言葉の意味は後で説明する。とにかくその各々の要素(エレメント)を1単位として、各々を構成する分子(モレキュール)に振動を与える。これが術式のその後の部分だ。」


「なんか、振動部分がやたら長い上に、同じ様な部分が2つあるんだけど…」

アゲハが自身に構築された術式を見ながら言うと、


「それも後で説明する。分子(モレキュール)ってのは、冷たいと静止しているが、熱を加えるとブルブル震えて、その振動は、温度が高ければ高いほど大きくなって、ついには分子間力を振り切って分離してしまうんだ。」


「分かってきたわ…」アゲハが得心した様に言う。「つまり、のこぎり引きを実現するために、分子(モレキュール)にエネルギーを与えて振動させ、その振動で分子が分離…刃が壊れない様に、分子間力を補強するエネルギーを与える、それが、vibrationサブルーチンの2つ目と3つ目の引数、joulevとjoulebなのね…」


ロクスケはニヤリと笑い、

「やはりお前は賢いな!それで、ここからはさっきの質問への回答だが…まず、ヒサゴが言った『メッシュ』だが、"createmesh"サブルーチンは『プロテクト』…シールドやアーマーへの防御力強化の術式にも使っているんだ。防具の表面の分子結合を強化するために、まず防具の表面を検知して、そこを小さな多角形に分割して、各々に強化を与える形で…その有様が、『網』に似てるから、『メッシュ』と呼んでるんだ。たとえそれが二次元ではなく一次元…面状ではなく線状であっても…」


「はあ…」最後の難しい部分が分からず、曖昧な返事をするヒサゴ。


「そしてアゲハが言った、同じ様な部分が2つある理由だが、これは、対象の武器が自分の物か他人の物かでif文を分岐させている。」


「ああ、確かに…」


「それで、『エンチャントウェポン』の最後の引数はoptionは、対象武器が自分の物である場合は『(True)』が入り、他人の武器である場合は、振動させる時間…秒数が入る。」


「『(True)』………!?」


「ああ…こっちの方は少し応用がかかってるから、先に他人の武器である場合を読んで理解してみろ。」


言われてアゲハはelseの後の方を読み始める。


「え!?えーっと…"for next"のループの中に、"vibration"…さっき作った全ての要素(エレメント)一つ一つに振動を与える…"vibration"の最後の引数optionは振動させる時間。指定した時間だけ、振動させる…まあ、これは確かに分かりやすいわね。問題は"else"の前、自分の武器に対する場合よね。"vibration"の中の時間指定がdeltat…1秒に固定されてる上、"do while"って、何!?ファイヤーボールの術式にも、サブルーチンの中にあった様な無かった様な…最後に"loop"ってあるから、ループの一種なのかしら!?しかもこれが、二重に…」


「ああ、それも繰り返し…ループの一種だ。"for next"は決まった回数だけの繰り返しだが、"do loop"は、"while"の後の条件を満たす間ずっと繰り返す事になる。うっかり絶対に満たさない条件を与えちまったら、魔力が切れるまで止まらない無限ループに陥ってしまうが、そうならない様に気を付けて使いさえすれば有効だ。」


「えーっと、内側の"do loop"の中は、"input(option)"と、"t=nowtime"…"do loop"の前にもtとtstartにnowtimeを代入してて…"do loop"の中で毎回tをnowtime…現在時間で更新してて…tstartに開始時の時間を保存しといて、tstartからの経過時間がdeltat*0.999…約1秒を過ぎるまでループし続ける…それを外側の"do loop"でoptionがTrueの間ずっと続ける…」


「内側の"do loop"には"input(option)"も入っているだろう!?ここで入力を受け付けて、optionに"False"が入力されたらどうなる!?」


アゲハはハッとして、

「外側の"do loop"で"while"以下の条件が満たせなくなり、外側の"do loop"から出る!!つまり自分の武器に『エンチャントウェポン』をかけた場合、自分で"False"と念じるまでエンチャントが持続するって事!?」


「ご名答だ!!」

ロクスケは満足げに言った。


「…でも何で、内側の"do loop"も"for next"文にしないわけ!?これって1秒待つ間の時間稼ぎでもあるのよね!?"for next"ループの所要時間を測って、ちょうど1秒経過する回数だけ指定してfor文で繰り返してもいいんじゃない!?」


「ああ、それは俺も考えたんだが…人間の頭の回転の速さには個人差があるから、固定で何回って決められないんだ。お前(アゲハ)なんか、術式で使える最大の数だけループしても1秒経たないだろうな。」


「ひっどーい!!あたしを化け物か何かだと思ってるわけ!?」

アゲハは唇を尖らせて拗ねてみせた。キュリアは側でため息をつき、


「全く…この様な話になると、アゲハさんの独壇場ですわね…」


「…いくつか質問、いいかな…!?」

ヒサゴが手を上げる。


「おう、何だ!?」


「話の最初の頃に言ってた、刃を一定長さのエレメントに分割して振動させるって話…つまりそれは、エレメントの数が多い程、魔力消費が高くなるからそうしてるって事!?」


「そうだ。だから、剣なんかの刃の長い武器へのエンチャントは、本職の魔術師じゃなきゃ出来んだろうな。」


「そう…じゃあもう一つ。この術式…『エンチャントウェポン』も、自分の武器にかけるより、他人の武器にかけた方が、魔力消費が大きいんだよね!?なんか、自分にかける方が色々何行も書かれてるけど…」


「そうだ。他人にかける魔力負荷の方が大きい。」

ロクスケは頷いた。


「…質問は以上だよ。ありがとね。」

ヒサゴがそう言うと、ロクスケは、


「他に質問は無いか!?…なら、俺の講義はここまでだ。」

おまけ


アゲハ「つまり、これは…

for i=1 to imax

:

next i

こう書き換えられるって事ね。

i=1

do while i<=imax

:

i=i+1

loop」

ロクスケ「そういう事だ。」

評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

↑ページトップへ