閑話 KAC2022で出された11のお題

第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]); /*魔法終わり処理*/

}


「【誘導弾二刀流】」


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


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


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


 セレンの驚愕した声。


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

「ええ、どうやったの」


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

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

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

「ぐう」

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


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


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

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


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

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


 マイラが起きた。


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

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


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


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

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る