4.ゴーレム攻略?
俺は落ちないように慎重に右手を腰に伸ばし、ライのナイフを抜く。
そして精一杯身体を伸ばして、届く限り上の方に突き刺した。
今度はその右手に左手を重ねると、俺は既にここまでのよじ登りで限界を迎えつつある腕に限界を超えさせ、身体を持ち上げる。
「くっそぉぉぉぉ!」
つらい、めちゃくちゃ辛い!
視界がチカチカするくらい腕に力を入れて、そして足をメチャクチャに蹴ってゴーレムの背中を登る。
そうしてついに、俺はゴーレムの首元に到達した。
ゴーレムの肩越しに下を見れば、恐ろしい光景が見える。
「ひっ……」
ケヴィンは仰向けに倒れていた。
目立った外傷はないものの、苦悶の表情を浮かべてる。
そしてケヴィンの足は、ゴーレムの幾度めかの攻撃であいた穴に突っこまれていた。
もしかして、あの穴に落ちて避けられなくて攻撃を受けたのか……?
幸いなことに、ゴーレムは攻撃の手をゆるめ周囲を見渡していたから、急いで魔力紋に視線を戻す。
ケヴィンが動けなくなったから、今度は俺を探してるのかもしれない。
俺は何とか息を整え、スキルを唱える。
頼む、効いてくれ!
「<コードインスペクション>!」
切実な祈りの中、ついに視界に紗がかかり薄暗くなった。
「きたきたぁ~!」
はあぁぁぁ、良かった~!
スキルが効かないわけじゃなかったんだ……。
俺は安堵のあまり涙ぐみながら、急いでソースコードに目を通し始める。
なんとかして、この状況を打開する情報をゲットするんだ。
でも一番最初のイベント処理が、今までのモンスターと違ってやたらと長い。
なんだこれ?
それは繰り返しの中にいくつもの分岐がある、複雑な処理だった。
いや、別にプログラミングとして難しいわけじゃないんだけど、長いから読み解くのに少し時間がかかる。
大雑把な文章に変えると、こんな感じだ。
1.足が動いて歩ける間は以下の処理を繰り返す。
(1)A地点からB地点まで移動を開始する。
動くものが視界に入るか、○○以上の音がした場合、戦闘処理へ。
B地点に到達できない場合は(2)へ。
(2)C地点まで移動を開始する。
動くものが視界に入るか、○○以上の音がした場合、戦闘処理へ。
C地点に到達できない場合は(3)へ。
(3)D地点まで移動を開始する。
△△の間、周囲を観察。
動くものが視界に入るか、○○以上の音がした場合、戦闘処理へ。
D地点に到達できない場合は(4)へ。
(以降省略)
つまり、ゴーレムは巡回処理をプログラミングされてるってことだ。
A地点とか○○とか△△はプログラム内で定数で定義されているから、実際に何が入っているのかはすぐには分からない。
定数っていうのはスライムのステータスにも使われてたけど、懐かしき前世の中学校で習った代入ってやつを想像すると分かりやすい。
ほら、「x=1」とかね。
始めて遭遇したとき、なんでアルファベットに数字を入れるんだよ! って思ったのは俺だけじゃないはず……。
せめてさぁ、「実生活でこんな場合にこんな感じで役に立つから、アルファベットに数字を入れるんだよ」みたいな説明をして欲しいよな、唐突感ありまくりだっつーの。
で、プログラミングでいうと、同じ値をあちこちで使う場合にどこか一カ所でその内容を決めておけば他は定数……数学でいう「x」を書いておけばいいから、便利って感じかな。
しかも定数なら途中の処理で中身が変わることもないから分かりやすい。
なんて細かいことはともかく、プログラム内の定数に何が入っているかは、ソースコードのどこか……多分、上の方に書いてあるはずだけど、全部を見ている時間はなさそうだから、次の戦闘処理を見ることにした。
こっちの方が重要そうだしな。
すると、まず冒頭に恐ろしい計算処理があった。
SPEED = BASE_SPEED + 80;
これは……たぶん、「SPEED」が今まさに戦ってるゴーレムの素早さを表していて、「BASE_SPEED」が基本になる素早さなんだろう。
つまり、戦闘処理に入るとゴーレムは素早さが80も上がるってわけだ。その証拠に、戦闘処理の最後に元の素早さに戻す処理も入ってる。
80がどんなもんかは分からないけど、スライムが110だったから、そこそこの数字のはずだ。
どおりでゴーレムのパンチがめちゃくちゃ速いわけだよ……。
あれ? 待てよ。
スライムの場合は、素早さとかのステータスは値を変えられない定数で定義されていたはず。ゴーレムは違うのか?
モンスターのソースコードの構成はみんな同じだと思ってたのにな。
まあ、とりあえず素早さの話はもういい。問題は実際の戦闘処理。
こっちも簡単な繰り返し処理だった。
ちょっとややこしいけどね。
1.周囲360°を見渡し、動くものを見つけた場合。
(1)対象が動き続けている間は、以下の処理を繰り返す。
1)対象物が腕が届く位置にいる場合、殴る。
2)1)以外の場合、対象物に近づく。
(2)△△の間、360°を見渡す。
1)動く物を見つけた場合は(1)と同じ処理を実行。
2)1)以外の場合、処理を抜ける。
2.1以外の場合。
(1)△△の間、周囲、360°を見渡す。
1)動く物を見つけた場合は1の(1)と同じ処理を実行。
2)1)以外の場合、処理を抜ける。
すっごい単純……。
戦闘のメインは、動いている物に対してパンチするってだけだ。そんで、手が届かなければ近づく。
そうして対象物が動きを止めたら、一定時間周囲を観察して、動く物があればまた攻撃する、と。
なければ戦闘処理を終了して、最初の巡回処理に戻るって感じ。
ゴーレムはこうやって敵を見つけたら巡回モードから戦闘モードに切り替わり、倒し終わったらまた巡回モードに戻るってわけだ。
こんな風に細かく動きがプログラミングされてるのはゴーレムが始めてだなぁ。
もしかしてゴーレムは生き物じゃなくて土で作られてるから、噛みつきウサギやスライムと違って、普段の行動も全部プログラミングされてるってことか?
まさに土で作られたロボットってわけだな。
でも、ロボットっていっても完璧じゃない。
これはプログラミングした人……便宜上、魔王としとこう。
その魔王がわざとやってるのか、それともウッカリなのか?
ゴーレム攻略のポイントは、攻撃対象は動いているものだけってところだ。
そう結論付いたところで、タイムアップがきた。
視界が明るくなり、俺が乗ってるゴーレムが動き出す。でもこれはケヴィンを攻撃するためじゃなく、動く対象物がなくなった後の周囲を観察する処理だった。
少しずつ回転しながら、上から下まで視線を走らせている。
俺はすかさず叫んだ。
「ケヴィン、動いちゃだめだ! 動かなきゃこいつは攻撃してこない!」
ゴーレムの視界に入らないように気をつけながら、ケヴィンを見下ろす。
ケヴィンは驚いたように目を見開いていたけど、ピクリとも動かないように固まっている。
さすがケヴィン、俺の言うことを信じてくれたみたいだな。
さあ、ここから反撃開始だ。
ここまで読んでいただきありがとうございます!
プログラミングの内容、文章で書いてますが……分かりにくいですよね?
処理内容の後にアタルが簡単に説明してるので、そっちだけ読んでいただいて問題ありませんので!
当初はExcelでフロー図(処理が図になってるやつで特に分岐や繰り返しがわかりやすい)を描いて挿絵にした方が分かりやすいかと思いましたが、そんな需要はないだろうなと……。
などなど、ご意見、ご感想をいただけると助かります!
そしてブクマや評価(↓の方にある☆)をいただけると励みになります。
引き続き更新頑張りますので、よろしくお願いします〜。




