2021年02月15日

師匠のVB.NETどたばた塾~第18回

sisyo.gif
師匠T:うむ、師匠Tじゃ。そういえば、昨日はバレンタインじゃったのう。

deshi.gif
弟子D:もしかして師匠……。

sisyo.gif
なんでもないぞ。今年は妹弟子Aからしか義理のイチゴショートしかもらってなくて寂しいだなんて思ってないぞっ!!(べきっ

deshi.gif
(師匠の握っていたクルミが……師匠の怒りと悲しみが、言葉なく伝わってくる……!)

sisyo.gif
さぁ、今回も初めていくとしようぞ。今回は、前回話した通り、今回付け足した四つの関数やサブルーチンについて説明していくぞ!

deshi.gif
は、はい……。

【 まずはEraseShotとClearShotからぢゃ! 】

sisyo.gif
まずは、LoadShotサブルーチンからといきたいところだが、これは難しいことはなかろう。ただ、GraphModuleモジュールのモジュール変数hndShotに、LoadGraph関数で、ショットの画像のハンドルを格納しているだけじゃ。

deshi.gif
ふむふむ。そして、GetShotHnd()関数は、そのhndShotの値を、戻り値として返しているわけですか。

sisyo.gif
その通りじゃ。こうしておけば、いちいちLoadGraph関数を実行する必要もなく、かつこれまでと同じように手軽にハンドルの値を取得することができるからの。

(前)
Handle = LoadGraph(~)

(後)
Handle = GetShotHnd()

deshi.gif
ふむふむ。

sisyo.gif
そして次。ShotEraseサブルーチンじゃな。

vb2102-01.JPG

sisyo.gif
これは、引数として、削除したいショットの配列の番号を受け取り、該当する配列oShot()にNothingを入れることによって、指定されたショットを消すサブルーチンじゃ。

deshi.gif
なるほど。次はShotClearですね。

vb2102-02.JPG

sisyo.gif
うむ。こちらは、そのShotEraseを利用して、For~Nextループを使って、配列oShot()の内容を全て削除するサブルーチンじゃ。例えば、自機が破壊されて、ゲームをやり直す場合、それまで残っていたショットが残っているとおかしいからの。

deshi.gif
なるほど。

sisyo.gif
それと、今回はショットは256個に限定したが、それより多かったり少ない数にしたい場合は、ショットの数を定数として用意し、それを使うとよい。その場合は、先ほどのFor文のToの後の数など、いくつかの数値を、この定数に変える必要があるがな。

(前)
For s = 0 To 255
Next

(後)
Const SHOTS = 255
……
For s = 0 To SHOTS
Next

sisyo.gif
こんなところじゃな。なお、定数はパブリック定数として定義したほうが、面倒がなくてよかろう。

deshi.gif
なるほど!

【 ShotExist関数じゃ! 】

sisyo.gif
そして最後。ShotExists関数じゃな。これは、引数で指定したショットがあるかどうかをTrueかFalseで返す関数じゃ。言うまでもないかもしれんが、存在していればTrue、なければFalseじゃ。

vb2102-03.JPG

deshi.gif
If文で、存在していればTrue、そして存在してなければFalseをReturnで返してるんですね。Is Nothingは、それがあるかどうかを判定する演算子、でしたっけ。

sisyo.gif
よく覚えておったの。その通り。それほど難しいことはなかろう。なお、今回はわかりやすくIf文を使ったが、もっと短く書きたい場合は、こんな風に書く方法もある。

----------
Return oShot(s) IsNot Nothing
----------

sisyo.gif
どちらの方法を使うかは、それぞれのプログラミングスタイルによるであろう。よく熟慮せよ。

deshi.gif
はい!

sisyo.gif
それでは次回は、敵キャラの出現、移動についてレクチャーする。復習を忘れぬようにな。



※次の更新は、『レトロゲーレビュー』の予定です。お楽しみに!

posted by 裏編 at 09:46| Comment(0) | 師匠のVB.NETどたばた塾 | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください