GUST NOTCH? DIARY

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

その6からの続きです。

  • 長距離センサ


2330 IF D[3] >= 0 THEN 2370
2340 PRINT "LONG RANGE SENSORS ARE INOPERABLE"
2350 IMAGE "LONG RANGE SENSOR SCAN FOR QUADRANT",D,",",D
2360 GOTO 1270
2370 PRINT USING 2350;Q1,Q2
2380 PRINT USING 2520
2390 FOR I=Q1-1 TO Q1+1
2400 MAT N=ZER
2410 FOR J=Q2-1 TO Q2+1
2420 IF I<1 OR I>8 OR J<1 OR J>8 THEN 2460
2430 N[J-Q2+2]=G[I,J]
2440 IF D[7]<0 THEN 2460
2450 Z[I,J]=G[I,J]
2460 NEXT J
2470 PRINT USING 2510;N[1],N[2],N[3]
2480 PRINT USING 2520
2490 NEXT I
2500 GOTO 1270
2510 IMAGE ": ",3(3D," :")
2520 IMAGE "-----------------"

まず、2330行で、長距離センサが故障していないかを確認します。
故障している場合は、使えないことを表示して、1270行のコマンド入力待ちに戻ります。

故障していない場合は、周囲3x3の宇宙域の状態を表示します。2370行で、現在の宇宙域の座標を表示します。使う書式がGOTOをまたいでいるのが少し気持ち悪いですね。

まず、境界線を表示します。
次に各行ごとに、配列変数 N を0で初期化します。変数 N はワープ時の移動量にも使われているので紛らわしいです。そして、銀河系内の座標であればその情報をGからコピーします。
もし、コンピュータが故障していなければ、同時に銀河系地図の情報にもコピーします。つまり、コンピュータが故障していると、長距離センサの結果は保存されません。
各行ごとに3つの領域の値と境界線を表示して、1270行のコマンド入力待ちに戻ります。
具体的な出力はこんな感じになります。


-----------------
: 004 : 103 : 002 :
-----------------
: 015 : 205 : 003 :
-----------------
: 202 : 006 : 001 :
-----------------
2510行の3Dという書式が0パディングをしてくれるのかがわからないのですが、こういう出力を期待したいところです。

次回はフェーザの処理です。
その8へ続きます。