LAST UPDATE 1998/08/22


『 その11-2 』




 ■ ブロック8、9

image126.gif image127.gif
image103.gif image104.gif
 考え方は同じなので、特に説明は必要ないと思う。本当は最初に作ったときは、プログラムはもっと短かった。符号を表すフラグなどを数式に織り交ぜて少ない行数だったのだが、ロジックが複雑で、説明しにくい形になってしまったので、このように分岐点を多くし、それぞれの個所を単純にしたのである。暇があったら各自挑戦してみるのも良いかもしれない。



 ■ ゲート上での処理(20番)

image108.gif
image102.gif

    If (BlockInfo(Ba.bx + 1, Ba.bz, 1) = 0) Then
 ゲート0は横に2のサイズがある。ボールが存在している場所の1個右を調べてその値が0ということは、右隣には何も存在していないということを意味する。ということはボールは右側から入って左側へ出て行くと言うことを意味する。
    Ba.px = Bcx - 1 + Cos(Rang)
    Ba.pz = Bcz + 1 - Sin(Rang)
    Ba.vx = -Sin(Rang)
    Ba.vz = -Cos(Rang)
 ボールの表示座標と進行方向のベクトルを計算している。ただし注意することは、通常ブロックの場合、角度は0~90の範囲で与えられていたが、ゲートの場合は0~180の範囲で与えられることになる。
    If (Ba.count = 0) Then
 このifの条件が真(本当)である場合は、ボールがゲートを通過し終わったことを意味する。
    GateNo = 20: GflipCount = 18
    GateID = BlockInfo(Ba.bx, Ba.bz, 0)
 通過済みのゲートは裏返さなければならない。ここではその準備をしている。
    BlockInfo(Ba.bx, Ba.bz, 0) = 0
    BlockInfo(Ba.bx - 1, Ba.bz, 0) = 0
    BlockInfo(Ba.bx, Ba.bz, 1) = -1
    BlockInfo(Ba.bx - 1, Ba.bz, 1) = -1
 使用済みのゲートの情報をBlockInfo内から消している。
    Ba.bx = Ba.bx - 1
 左側から入ったボールはブロックで数えて一個左隣から出て行く。そこでXのブロック上の座標を表す変数を1減らしている。 Else以降は左側から入って右側から出て行くときの処理で、考え方は全く同じである。







その 11 -1 | その 11-2 | その 11-3 | その 11-4 | その 11-5 | その 11-6

『 サルのゲーム製作講座 』 目次 | その 1 | その 2 | その 3 | その 4 |
その 5 | その 6 | その 7 | その 8 | その 9 | その 10 | その 11


もどる

e-mail: sc_3da@magical2.egg.or.jp