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

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

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

エラーが発生しました。

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

61/62

第61話 二刀流と、入れ子と、おねむ

 修練場でマイラが短剣を器用に二本操っている。


「マイラは良く二つの短剣を同時に操れるな」

「慣れれば訳ないよ。タイトの方が凄い。魔法を自在に操ってる。魔法で二刀流ってできないの」

「魔法で二刀流かぁ。うーん」


 プログラムで二刀流というのは厳密な意味で言うと出来ない。

 CPUが二つあって別々のプログラムを走らせれば別だ。


 だが、一つのCPUのパソコンで、複数のプログラムを同時に動かしていると思うだろう。

 あれにはタネがある。


 一つのCPUで二刀流を実現するのは実は高速に切り替えて実行しているだけだ。

 じゃあ、魔法でもやれよと言われそうなので、まあやってみるか。


extern MAGIC *water_ball_make(float mana);

extern void time_wait(long time_ms);

extern void magic_straight(MAGIC *mp,char *orbit,int orbit_size);

extern void vector_add(MAGIC *mp,char vector_data);

extern int mclose(MAGIC *mp);

void magic_move_multi(MAGIC **mp,char **orbit,long orbit_size,int multi_size)

{

 long i; /*カウンター*/

 int j; /*カウンター*/

 for(i=0;i<orbit_size;i++){ /*軌道データの数だけループ*/

  for(j=0;j<multi_size;j++){ /*対象の数だけループ*/

   vector_add(mp[j],*(&orbit[j][i])); /*一個分の速度を設定*/

  }

  time_wait(1);

 }

}


void main(void)

{

 MAGIC *mp[2]; /*魔法二個の定義*/

 orbit[2][1000]; /*軌道データ*/

 int i; /*カウンター*/

 for(i=0;i<2;i++){

  mp[i]=water_ball_make(0.00005); /*水球を作る*/

  magic_straight(mp[i],orbit[i],1000); /*軌道真っ直ぐ*/

 } /*繰り返しの終わり*/

 magic_move_multi(mp,orbit,1000,2); /*水球を二つ動かす*/

 mclose(mp[0]); /*魔法終わり処理*/

 mclose(mp[1]); /*魔法終わり処理*/

}


「マイラ、出来たよ」

「【二刀流】」


 二つの水球がまっすぐに飛んで行く。


「タイト、ごめん。どこが凄いのか、全然分からない」

「たしかに二回魔法を唱えても、同じような事が出来る。じゃあちょっと変えてみよう」


extern MAGIC *water_ball_make(float mana);

extern void vector_add(MAGIC *mp,char vector_data);

extern void magic_move_multi(MAGIC **mp,char **orbit,long orbit_size,int multi_size)

extern void magic_direct(MAGIC *mp,char *orbit,int orbit_size,char *target_data);

extern int mclose(MAGIC *mp);


void main(int argc,char *argv[])

{

 MAGIC *mp[2]; /*魔法二個の定義*/

 orbit[2][10]; /*軌道データ*/

 int i,j; /*カウンター*/

 for(i=0;i<2;i++){ /*2回ループ*/

  mp[i]=water_ball_make(0.00005); /*水球を作る*/

 }


 for(i=0;i<100;i++){ /*100回ループ*/

  for(j=0;j<2;j++){ /*2回ループ*/

   magic_direct(mp[j],orbit[j],10,argv[j+1]); /*目標に向かって軌道データ生成*/

  }

  magic_move_multi(mp,orbit,10,2); /*水球を二つ動かす*/

 }

 mclose(mp[0]); /*魔法終わり処理*/

 mclose(mp[1]); /*魔法終わり処理*/

}


「【誘導弾二刀流】」


 二つの水球が的に誘導されていく。


「どこが凄いのか分からない」


「うそっ、一つの魔法でいっぺんに二つの誘導弾をやるなんて」


 セレンの驚愕した声。


「セレンには難しさが分かるよな」

「ええ、どうやったの」


「繰り返しを使ったんだ。入れ子してる。二重ループという奴だな。もっとも俺はサブルーチンを使ったが」

「二重ループは分かるわ。繰り返しが列だとすると。二重にすると列と行になるのよね」

「そうだな。その理解で合っている。一次元が二次元になるって訳だ」

「ぐう」

「マイラがおねむのようだ」


 俺は脇に設置してあるベンチにマイラを寝かせ、話の続きをする事にした。


「サブルーチンというのは何?」

「機能をまとめておいて、一言で呼び出すみたいな事かな。『副呪文、火球発射。火球生成。火球飛べ。終わり。主呪文。火球発射呼び出し。火球発射呼び出し』このように使う」


「なんか物凄く複雑な呪文になりそうね」

「むっきー、二人で分かり合った顔しないで」


 マイラが起きた。


「マイラも魔法を勉強すれば分かるよ」

「じゃあ、タイトつきっきりで教えてよ」


「マイラが眠くなるぐらい教えてやろう」


 結論、魔法でも刃物でも二刀流は難しい。

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

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

↑ページトップへ