「ゴブリンでもわかるゲームプログラミング」第34話 ~読むだけでゲームプログラミングがなんとなくわかるようになる謎のファンタジー小説~

本作は連載作品です。第1話は下記です。
気に入っていただけたら↓に「スキ」いただけると嬉しいです。

「それに、ルビィ嬢、もう一つ間違いがある。魔法補助具じゃない」

「えっ……?」

「魔法具って言うんだぜ?」

(それも呼び方変えただけだけどね…………だけど……)

 呼び方を変えただけ……確かにそうであったが、そうであっても……
 魔法具と呼んでくれたアイシャ様の敬意に報いたい――

実行エグゼ……!」

「え…………?」

 ルビィは驚きの声をあげる。

(くらえ……! スプリンクラー戦闘版バトル・エディション!)

 ユキの杖の先端から多数の氷のつぶてがまるで螺旋を描くように放射される。

 ぷぎぃ、ぷぎぃ、ぶぎぃ……

 一つ一つの礫の威力は大きくはない。

 しかし、螺旋を描くように放射された弾は回避困難……
 着実にイッカク・ファングの身体にダメージを蓄積していく。

 そして……

 ぷぎぃ、ぷぎぃ、ぶぎぃ、ぶぎぃいいいいい

 ついにイッカク・ファングは崩れ落ちる。

「え……? どういうこと……?」

 ルビィは困惑する。

 それはルビィが知っている魔法補助具とはかけ離れた威力のものであった。

 ユキは、研究開発室での成果を戦闘用に調整チューニングしていたのだ。

////////////////////////////////////////////
// スプリンクラー戦闘版バトル・エディション
// 冷蔵庫用との変更箇所を★で表記

class Shot{
// 要素の定義
count // カウンター
time // 射出時間
interval // 射出間隔
angle // 射出角度
angle_y // ★射出角度(Y方向)
angle_z // ★射出角度(Z方向)
position //射出位置
size // 大きさ
power // 威力
attribute // 属性
sub_attribute // 副属性
speed // 速度
acceleration // 加速度
bullets

 ・・・

// 処理(メソッド)の定義
set(){
 // 弾の初期化処理
 time = 1200 // 射出時間
 interval = 10 // ★射出間隔
 angle = 0 // ★射出角度
 angle_y = 30 // ★射出角度(Y方向)
 angle_z = 360 / 10 * count / 60 // ★射出角度(Z方向)
 position = device.position //射出位置
 size = 1 // ★大きさ
 power = 2 // ★威力
 attribute = ICE // 属性=氷
 speed = 7 // ★速度
 acceleration = 0 // 加速度
}

create_bullets(){
  // 弾の生成処理
 if(count < time && count % interval == 0){
  // カウンターが射出時間(time)より小さい かつ
  // カウンターが射出間隔(interval)に達した 場合

  set_bullets() // ↓の弾の設定処理を呼び出す

  // 以下に処理を追加
  angle_z += 360 / 4 // ★角度(Z方向)を90°足す
  set_bullets() // ↓の弾の設定処理を呼び出す

  angle_z += 360 / 4 // ★角度(Z方向)を90°足す
  set_bullets() // ↓の弾の設定処理を呼び出す

  angle_z += 360 / 4 // ★角度(Z方向)を90°足す
  set_bullets() // ↓の弾の設定処理を呼び出す

  angle_z += 360 / 4 // ★角度(Z方向)を90°足す
 }
}

set_bullets(){
 // 弾の設定処理
 bullet = new Bullet() // 新しい弾を生成

 bullet.angle = angle // 射出角度
 bullet.angle_y = angle_y // ★射出角度(Y方向)
 bullet.angle_z = angle_z // ★射出角度(Z方向)
 bullet.position = position //射出位置
 bullet.size = size // 大きさ
 bullet.power = power // 威力
 bullet.attribute = attribute // 属性
 bullet.sub_attribute = sub_attribute // 副属性
 bullet.speed = speed // 速度
 bullet.acceleration = acceleration // 加速度

 bullets.add(bullet) // 新しい弾を追加する

}
 ・・・
}
////////////////////////////////////////////

 まず射出角度(angle)についてだが、冷却装置においては基本的に杖の水平(X)方向の角度だけ考えていればよかったのだが、戦闘となると、基本的には前方に弾丸を飛ばす必要がある。
 前方に弾丸を飛ばし、見栄えをよくするためには、杖の水平(X)方向だけの設定では不十分であった。
 そこで、ユキは水平(X)方向以外の射出角度があるという前提の元、解析を行った。解析は案外すぐに成功し、Y方向、Z方向の射出角度を発見した。

 この三方向の角度を調整し、前方に向けて、四方向の弾丸がくるくる回りながら射出されるように設定した。

 更に、戦闘時は、冷却装置のようにゆっくり長く冷やす必要はなく、その分、単位時間当たりの出力を上げることができる。

 そのため、射出間隔を短くして、連射力を上げ、大きさ、威力、速度もそれぞれ上方修正している。

 しかも、うねるように回転しながら射出するように設定したことで、〝見栄え〟が著しく上昇したおかげか、これまでの限界を大幅に超えることができたのであった。

「…………」

 ルビィは驚いてはいたが、それ以上、何かを言うことはなかった。

 実際、確かにユキの魔法具は、一般的な魔法補助具より遥かに性能は高かった。
 しかし、ルビィの炎魔法より強いかと言われるとそうでもない。
 あくまでも最低ランクのものが一般的なランクまで底上げされている程度である。
 現状では、才能ある者には及ばない。そういう代物である。

「ユキくんナイス! よし、これで課題のクリア条件は達成だな!」

 オーエスがユキの健闘を称える。

 オーエスの言う通り、これで、野外演習の及第点は達成したことになる。

|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
【第一回 前期野外演習レギュレーション】
 ③1チームにつきイッカク・ファング5体の討伐で及第点
 ┗5体の内訳のうちチームメンバー1名につき最低1体は討伐する
 (攻撃魔法が専門外で事前に申請している者は対象外となる)
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

「で、この後、どうする?」

 オーエスが尋ねる。

「私はもちろん……続ける……」

 そう答えたのはルビィだ。

 5体討伐はあくまでも及第点である。
 要するに100点満点なら50点ということだ。
 それは暗にそれ以上の成果を上げれば、及第点以上の評価を得られるということを意味していた。

 ルビィは更に続ける。

「私はやるけど、あなたたちに無理強いはしない……」

 ユキとしては正直、及第点で十分であったのだが、チーム制である以上、より上の成績を目指す者の意見を尊重すべきであろう。

「わかりました。協力させてもらいます」

 そうして、三人は演習を続行する。

#IT
#テクノロジー
#プログラミング
#プログラミング初心者
#プログラミング教育
#小説

この記事が気に入ったらサポートをしてみませんか?