第12話 新しい魔道具と、魔法の仕様と、遠征の計画
次の目標はウルフだそうだ。
ここで些細な問題がある。
ウルフの生息区域が遠いのだ。
歩いて行くと子供の足で一週間。
馬に乗れたら良いがマイラも俺も馬には乗れない。
都合よく乗合馬車なんかが通っている訳もない。
なにせウルフというモンスターが出没する地域なのだ。
徒歩で移動するしかない訳だ。
それで遠出をするので、元スリグループの元締めに魔道具を多めに渡す訳なのだが。
違う種類の魔道具を頼まれた。
客を飽きさせない為の工夫は必要だよな。
extern MAGIC *water_make(float mana);
void main(void)
{
MAGIC *mp;
mp=water_make(0.00005);/*水生成*/
}
『/*』と『*/』というのがあるがこの二つに挟まれた言葉はコメントでいわゆる注釈。
もっと砕けて言えば説明書きだ。
プログラムには影響を及ぼさない。
魔法の場合はどうなるか分からないがな。
まあ、実行してみるだけだ。
結果はコメント付きの方が効率が上がった。
効率が上がる分には問題は無い。
extern MAGIC *light_make(float mana);
void main(void)
{
MAGIC *mp;
mp=light_make(0.00005); /*灯り生成*/
}
水生成と灯りの魔道具が出来上がった。
ここで一つ疑問が芽生えた。
プログラムだと実行時間は一瞬だ。
灯りの呪文だとほんの一瞬しか光らないはず。
これを成立させるには。
extern MAGIC *light_make(float mana);
void main(void)
{
MAGIC *mp;
while(1){ /*無限ループ*/
mp=light_make(0.00005); /*灯り生成*/
}
}
こうしなくちゃいけない。
無限ループにすべきだ。
これはあれか。
脳内の実行のイメージが、魔法を一度実行すると、終了させるまで終わらないとなっているからか。
イメージを変えて灯り魔法を実行してみる。
おお、灯りが一瞬光って消えたぞ。
どっちが便利なのだろう。
俺としては一瞬で消える方が自然だ。
プログラムだからな。
実行は一瞬だ。
水生成を試してみる。
うん、一瞬では消えないな。
実体があるからか。
炎で試してみる。
少しタイムラグがあって消えた。
炎は燃料としての魔力が燃え尽きるまで時間差があるのだな。
灯りも消えた訳ではない。
光が拡散しただけだ。
つまりこの世界の魔法は創造魔法なんだな。
魔力で物やエネルギーを作りだしている。
「タイト、難しい顔ばかりしていると、お爺さんになっちゃうわよ」
「仕事が一段落したところ。ところで魔法は終わらせるまで続くけど、おかしいと思わない」
「そんな変な事を考えてたんだ。そんなのどっちでもいい。それより遠征の荷物が重た過ぎる」
「なんでそんなに大荷物なんだ?」
「往復で2週間分の食料でしょう。現地で1週間は狩りをしたいから、合計3週間分の食料ね。調理器具も必要だし。寝袋も必要」
うわっ、馬車か馬が無いとやってられない。
魔法の構築なんかしている場合じゃない。
「どうするの。とても運べないよ」
「ポーターを雇うか荷物運びのロバを借りるのね」
「ポーターを雇ったら大赤字だよ」
「じゃ、ロバね」
何だマイラは解決策を持ってたんだな。
遠征の準備はマイラに任せよう。
それよりも魔法継続問題だ。
あれっ、もう一つ考え方があるのに気づいた。
extern MAGIC *light_make(float mana);
extern int mclose(MAGIC *mp);
void main(void)
{
MAGIC *mp;
mp=light_make(0.00005); /*灯り生成*/
while(1); /*無限ループ*/
mclose(mp); /*魔法終わり処理*/
}
それがこれだ。
生成すると魔法の処理が終わらない限り、生成を保持するという考え方だ。
これだと俺のプログラム感覚により近い。
使い分けるのは駄目だな。
ダブルスタンダードはバグの素だ。
よし、最後に考えた処理の間だけ保持する方式を採用するぞ。
種火の魔法もその仕様に合わせて変えないと。
OSやシステムとかが仕様変更になるとプログラムがやり直しになったりするのはよくある事だ。
それに後処理だ。
このプログラムでは無限ループになっているから必要ないが、『mclose(mp);』が必要になる。
終わりの処理がないと魔法が終わらない。
書かなくても良いが、明示した方が良いだろう。




