GUST NOTCH? DIARY

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

その9からの続きです。
今回は2つ。シールド制御とダメージ制御です。

  • シールド制御


3460 IF D[7] >= 0 THEN 3490
3470 PRINT "SHIELD CONTROL IS NON-OPERATIONAL"
3480 GOTO 1270
3490 PRINT "ENERGY AVAILABLE ="E+S" NUMBER OF UNITS TO SHIELDS:";
3500 INPUT X
3510 IF X <= 0 THEN 1270
3520 IF E+S-X<0 THEN 3490
3530 E=E+S-X
3540 S=X
3550 GOTO 1270

まず、シールド制御が故障していないかを確認します。3460行がそれなのですが、このD[7]というのはD[6]の間違いだと思われます。
故障中の場合は、メッセージを出して、コマンド入力待ちに戻ります。(3480行)

そうでない場合は、シールドにまわすエネルギーの指定をします。
あまり難しくないと思います。シールドのエネルギーSはエネルギーEの中から割り当てているものであり、シールドの量を下げるとその分がEに戻ります。

入力値が負の場合は、キャンセルとなり、コマンド入力待ちに戻ります。(3510行)
指定したエネルギーが、全エネルギーよりも大きい場合は、入力のやり直しになります。(3520行)

指定された値に応じて、EとSの値を再設定し、コマンド入力処理に戻ります。

  • ダメージ制御


3560 IF D[6] >= 0 THEN 3590
3570 PRINT "DAMAGE CONTROL REPORT IS NOT AVAILABLE"
3580 GOTO 1270
3590 PRINT
3600 PRINT "DEVICE STATE OF REPAIR"
3610 FOR R1=1 TO 8
3620 GOSUB 5610
3630 PRINT "",D[R1]
3640 NEXT R1
3650 PRINT
3660 GOTO 1270

まず最初に、ダメージコントロールが故障していないかを確認します。ここもD[6]はD[7]の間違いだと思われます。

故障中の場合は、メッセージを出して、コマンド入力待ちに戻ります。(3560行から3580行)

故障していない場合は、各計器の名前と、故障状態である配列Dの値を表示して、コマンド入力処理に戻ります。

3610行からのループの変数が R1 なのは、ワープ時に故障/修復する計器を決めるときに乱数で決定していて、同じ5610行からの装置名表示ルーチンを使っているためです。

次回はコンピュータの処理です。
その11に続きます。