第6話 条件分岐★
「お前ら……! 許されねぇぞ!」
大笑いするジェイソンらに対し、イントが怒りを向ける。
「許されない? 許されないのはお前らだろ? 五連弾
ジェイソンが前に出した右手の周辺に五角形の陣形を組む炎の弾が発生する。
「くっ……!」
イントは歯を食いしばる。
「くらえ……!」
ジェイソンがそう叫ぶと五つの炎弾がユキとイントに向けて容赦なく放たれる。
「うぉっ……!」
ユキとイントはなんとかそれを回避する。
「おらおら、こんなんじゃ終わらねえぞ! もういっちょ五連弾
再びジェイソンの手の平の周囲に、五角形の陣形を組む炎の弾が発生する。
と、ユキは杖を構え、ぼそりとつぶやく。
「……
「「……え?」」
すっとんきょうな驚きの声をあげたのはジェイソンらであった。
ユキの杖の先端付近に、水の塊が生成され、その塊が次第に巨大になっていくからである。
「は……? おい、あれって、魔法補助具だよな?」
「そ、そのはずだが……」
ジェイソンの連れもうろたえている。
「おいおいおい、魔法補助具ってのは弱い魔法しか……」
ジェイソンがそうこう言っているうちに、ユキの杖の先端から巨大な水の塊が放出される。
「弱い魔法しか使えないはずじゃ……なかったのかよぉおお!!」
水の塊はジェイソンが発生させた炎弾を飲みこみ、さらにはジェイソンに着弾するのであった。
「……相変わらず、ユキの魔法補助具はすごいな」
水を浴びて、のびているジェイソンを横目にイントがそうつぶやく。
「あ、ありがとう……」
ユキは少し照れくさそうに反応する。
////////////////////////////////////////////
// 弾の初期化処理
time = 0 // 射出時間
interval = 0 // 射出間隔
angle = device.angle // 射出角度
position = device.position //射出位置
size = 2.8 // 大きさ
power = 4 // 威力
attribute = WATER // 属性=水
speed = 0 // 速度
acceleration = 0 // 加速度
・・・
// 弾の更新処理
if(count < 360){
// countが360より小さい場合
position = device.position // 弾の位置
size += 0.02 // 大きさを大きくする
}
else if(count == 360){
// countが360となった場合
speed = 3 // 速度をセット
accelaration = 0.01 // 加速度をセット
angle = device.angle // 射出角度を再設定
}
////////////////////////////////////////////
今回、ユキが使用した魔法補助具の
基本的な構造は芝刈り機に似ている。
属性を水に変更し、弾の初期化処理で、弾の初期位置を杖の先端位置(position = device.position)に設定する。
初期の弾の大きさは2.8(size = 2.8)として、攻撃用であるため力はやや強めの4(power = 4)としている。
これだけだと杖の先端部分に少し大きくて強めの水の弾が出現するだけなのだが、加えて、更新処理を記述している。
////////////////////////////////////////////
// 弾の更新処理
if(count < 360){
// countが360より小さい場合
position = device.position // 弾の位置
size += 0.02 // 大きさを大きくする
}
else if(count == 360){
// countが360となった場合
speed = 3 // 速度をセット
accelaration = 0.01 // 加速度をセット
angle = device.angle // 射出角度を再設定
}
////////////////////////////////////////////
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
【プログラミング豆知識】
更新処理では、プログラミングの大事な処理の一つ〝条件式〟を使用しています。
条件式は
・if(もし~~)
・else if(もしくは、もし~~)
・else(もしくは)
を用いて、
条件によって処理の内容を変化させたい時に使用します。
if(条件A){
処理1
}
else if(条件B){
処理2
}
else{
処理3
}
のように記述されていれば、
・条件Aを満たせば、処理1
・条件Bを満たせば、処理2
・それ以外なら、処理3
のように処理が分岐していきます。
また条件式の中で、 左の値=右の値 ならば という条件を記載したい場合は、
〝==〟という記号を用います。
(例)
else if(count == 360){ //countが360となった場合
プログラミングにおける単なる〝=〟は代入を表す記号となっているため、区別するためにこのようになっています。
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
上記踏まえて、改めて更新処理を確認していく。
////////////////////////////////////////////
// 弾の更新処理
if(count < 360){
// countが360より小さい場合
position = device.position // 弾の位置
size += 0.02 // 大きさを大きくする
}
else if(count == 360){
//countが360となった場合
speed = 3 // 速度をセット
accelaration = 0.01 // 加速度をセット
angle = device.angle // 射出角度を再設定
}
////////////////////////////////////////////
360カウントになるまで(if(count < 360))、弾の位置を先端にとどめ(position = device.position)、サイズを徐々に大きくしていく(size += 0.02)。
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
【プログラミング豆知識】
〝+=〟とは加算を表しています。
size += 0.02とは、元々、入っていたsizeの値を+0.02するという意味になります。
例えば、元々、sizeに2.8が入っていたなら、
size += 0.02を一回すると、sizeの値は2.82となります。
同様に、〝-=〟は減算を表します。
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
なお、360カウント=およそ3秒である。
ユキの検証の結果、どうやら
FPSとは1秒間にプログラムが処理される回数だと思ってほしい。
例えば、
FPSが120なら、弾の更新処理が1秒間に120回実行され、その都度、カウンター(count)が1増加する。
つまるところ、1/120秒(約0.0083秒)に一回、カウンター(count)が1カウントアップされ、弾の更新処理が1回実行される。
360カウント(およそ3秒)になるまで、1/120秒(約0.0083秒)毎にサイズを0.02大きくすることで、かなり大きな水の塊ができあがる。
そして360カウントになったときに(else if(count == 360))、速度をセット(speed = 3)して、満を持して弾を発射するわけだ。
この時、射出角度を杖の角度にセットしなおす(angle = device.angle)。
そうしないと、
また加速度を設定する(accelaration = 0.01)ことで、弾が少しずつ加速して見栄えが良くなる。
これらは、一見、無駄なことのように思えるだろう。
最初からサイズを大きく、速度も速くした方が無駄がない。
しかし、この〝見栄えを良くする〟ことが魔法補助具の魔法設定において非常に重要なのである。
魔法補助具の制約で、設定値には限界がある。
しかし、なぜか〝見栄えを良くするとある程度、限界を超えた設定が可能〟なのであった。
……
「てめえら……よくも……!」
のびているジェイソンの連れが、ユキを睨みつける。
「仕掛けてきたのはそっちでしょ!」
イントが反論する。
その時であった。
「君たち、こんなところで何をしている?」
「「「!?」」」
ユキの後方から透き通った女性の声が聞こえた。
振り返るとそこには、王立学園高等部の制服を着た女性がいた。
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます