GUST NOTCH? DIARY

スタートレックのソースを読む その8

その7からの続きです。

  • フェーザ


2530 IF K3 <= 0 THEN 3670
2540 IF D[4] >= 0 THEN 2570
2550 PRINT "PHASER CONTROL IS DISABLED"
2560 GOTO 1270
2570 IF D[7] >= 0 THEN 2590
2580 PRINT " COMPUTER FAILURE HAMPERS ACCURACY"
2590 PRINT "PHASERS LOCKED ON TARGET. ENERGY AVAILABLE="E
2600 PRINT "NUMBER OF UNITS TO FIRE:";
2610 INPUT X
2620 IF X <= 0 THEN 1270
2630 IF E-X<0 THEN 2570
2640 E=E-X
2650 GOSUB 3790
2660 IF D[7] >= 0 THEN 2680
2670 X=X*RND(1)
2680 FOR I=1 TO 3
2690 IF K[I,3] <= 0 THEN 2770
2700 H=(X/K3/FND(0))*(2*RND(1))
2710 K[I,3]=K[I,3]-H
2720 PRINT USING 2730;H,K[I,1],K[I,2],K[I,3]
2730 IMAGE 4D," UNIT HIT ON KLINGON AT SECTOR ",D,",",D," (",3D," LEFT)"
2740 IF K[I,3]>0 THEN 2770
2750 GOSUB 3690
2760 IF K9 <= 0 THEN 4040
2770 NEXT I
2780 IF E<0 THEN 4000
2790 GOTO 1270

まず、2530行でクリンゴンの有無を確認します。
クリンゴンがいない場合はメッセージをだして、1270行のコマンド入力待ちに戻ります。
このとき、短距離センサが故障しているかはチェックしてないんですね。


3670 PRINT "SHORT RANGE SENSORS REPORT NO KLINGONS IN THIS QUADRANT"
3680 GOTO 1270

次に、2540行で、フェーザが故障していないかを確認します。
故障している場合は、使えないというメッセージを出して(2550行)、1270行のコマンド入力待ちに戻ります。

フェーザが故障していない場合は、2570行でコンピュータが故障していないかを確認します。
コンピュータが故障している場合、フェーザの攻撃精度が低下することになっています。
故障している場合はそのことを示します。(2580行)

現在のエネルギー残量を表示し、フェーザに使用するエネルギーを入力させます。(2590行〜2610行)
もし入力された値が0以下の場合は、フェーザによる攻撃をキャンセルし、コマンド入力待ちに戻ります。(2620行)
また、指定されたエネルギーが残量よりも大きい場合は2570行に戻って値の入れなおしになります。
適切な値が指定された場合、エネルギー残量から減らされます。(2640行)

まず、先にクリンゴンからの攻撃があります。ワープの時に受けるのと同じ3790行からのルーチンです。

コンピュータが故障中は精度が低下します。2670行がその処理で、実効エネルギーが指定したエネルギーよりも減ってしまうのです。

2680行から2770行が攻撃の処理です。
攻撃力は2700行で決定します。クリンゴンからの攻撃と同じような式ですが、存在するクリンゴンの数K3で分配されます。そして、その値の最大2倍のエネルギーが攻撃力となり、距離に反比例して減衰します。
攻撃力のエネルギーはクリンゴンのエネルギーから引かれます。(2710行)
まだクリンゴンのエネルギーが残っている場合は次のクリンゴンへの攻撃処理に移ります。
もし、クリンゴンのエネルギーがなくなった場合は、3690行からの処理で、そのクリンゴンの情報を更新し、その座標から消します。


3690 PRINT USING 3700;K[I,1],K[I,2]
3700 IMAGE "KLINGON AT SECTOR ",D,",",D," DESTROYED ****"
3710 K3=K3-1
3720 K9=K9-1
3730 A$=" "
3740 Z1=K[I,1]
3750 Z2=K[I,2]
3760 GOSUB 5510
3770 G[Q1,Q2]=K3*100+B3*10+S3
3780 RETURN

3690行で、どの座標のクリンゴンが撃墜されたかを示します。
3710行で、現在の宇宙域にいるクリンゴンの数を減らし、3720行で全体のクリンゴン残数も減らします。
3730行から3760行の処理で、そのクリンゴンのいた場所を空白で置き換えます。
3770行で銀河系の情報を更新し、元の処理に戻ります。

注意したいのは、ここで更新されるのは銀河系の情報だけであり、コンピュータが保持している銀河系地図の情報は更新されないということです。銀河系地図の情報が更新されるのは長距離センサを実行した時だけです。

2760行で、クリンゴンの残数を確認します。全部撃墜した場合は、任務終了で評価がでてゲームオーバーです。
クリンゴンからの攻撃があったので、2780行で、エネルギーの残量を確認します。もしエネルギーがなくなったら、ゲームオーバーです。

次回は光子魚雷の処理です。
その9に続きます。