ブログトップ 記事一覧 ログイン 無料ブログ開設

Gust Notch? Diary RSSフィード Twitter

・ 映画作品の評価基準は2010-01-08の記事に書いてあります。

2011-06-14

[] スタートレックのソースを読む その1

Mike Mayfield が1972年に書いた HP BASIC 用のコードを読みながら、プチコンの命令を確認していこうかと思います。オリジナルのソースはこちら。

プチコンのサイトはこちらです。

  • 予備知識

Star Trek というゲームは、銀河系にいるクリンゴンを決められた年数のうちにすべて倒すのが目的です。エンタープライズ号で銀河系を移動しながらクリンゴンを探し、魚雷やフェーザーという武器でクリンゴンを倒します。魚雷の数やエネルギーには限りがあるので、銀河系内にある基地に停泊することで、それらの補充ができます。

なんでクリンゴンと戦っているのかとかは、以下のあたりから自分で調べてください。

銀河系は、宇宙域(Quadrant)と呼ばれる領域で区切られています。ゲーム中では、銀河系は8x8の宇宙域で構成されています。ひとつの宇宙域の中も8x8のフィールドから構成されています。同じ宇宙域中にクリンゴンが存在すると戦闘状態となります。クリンゴンからも攻撃があります。

攻撃を受けたり、ワープ中に宇宙嵐に遭遇したりすると、計器が故障してしばらく使えなくなったりします。

すべてのクリンゴンを倒せば任務終了。エネルギーが0になったり、エンタープライズ号が破壊されたり、決められた年数を過ぎてしまったりするとゲームオーバーです。

  • コメントとインストラクション

順番に読んでいきましょう。

1  REM ****  HP BASIC PROGRAM LIBRARY  ******************************
2  REM
3  REM       STTR1: STAR TREK
4  REM
5  REM       36243  REV B  --  10/73
6  REM
7  REM ****  CONTRIBUTED PROGRAM  ***********************************

昔の BASIC は、行番号があってその順番に命令が実行されるのが一般的でした。しかし、プチコンには行番号はありません。

「REM」はコメントを表します。「'」もコメントに使えます。改行まで命令は無視されます*1

1行は100文字まで、プログラムは9999行までだそうです*2

100  REM *****************************************************************
110  REM ***                                                           ***
120  REM ***     STAR TREK: BY MIKE MAYFIELD, CENTERLINE ENGINEERING   ***
130  REM ***                                                           ***
140  REM ***        TOTAL INTERACTION GAME - ORIG. 20 OCT 1972
150  REM ***                                                           ***
160  REM *****************************************************************
170  GOSUB 5460
180  PRINT "                          STAR TREK "
190  PRINT "DO YOU WANT INSTRUCTIONS (THEY'RE LONG!)";
200  INPUT A$
210  IF A$ <> "YES" THEN 230
220  GOSUB 5820
230  REM *****  PROGRAM STARTS HERE *****

5460  FOR I=1 TO 11
5470  PRINT
5480  NEXT I
5490  PRINT
5500  RETURN

ここまででやっているのは、画面にタイトルを表示して、説明を読むかを聞いています。「YES」とタイプした場合は説明が表示されます。それ以外の入力ではゲームが開始されます。

「GOSUB」はサブルーチンの呼び出しです*3。飛んだ先で「RETURN」になると、呼び出した次の命令に戻って処理を続けます*4。ここで呼ばれているのは12行改行するだけの処理ですね。

プチコンでは行番号がないので、どこに移動するかの指定には「@」ではじまる「ラベル」を使います。ラベル名は、「@」の後、空白か改行が現れるか8文字まで。8文字を超えると実行時に Syntax Error になるようです。「@」の行で空白以降に命令を書いても無視されます*5

「PRINT」は文字列や変数の値を表示します。文字列を表示する場合は「"」でくくります。「;」で終わると、次の文字列が連続して表示されます*6 *7

往年の BASIC と同様、「PRINT」は「?」で代用できるそうです*8

「INPUT」はキーボードからの、数値や文字列の入力を変数で受け取ります。プチコンでも文字変数は後ろに「$」をつけます。変数名はアルファベットで始まる8文字まで。*9

「INPUT」には説明文をつけられますので*10、190行と200行はまとめて以下のように書けます。

INPUT "DO YOU WANT INSTRUCTIONS (THEY'RE LONG!)";A$

「IF...THEN」は「IF」の後の式が真の場合に「THEN」の後の命令が実行されます*11。「ELSE」はありません。

210行で直接行番号を書いているようように、プチコンでも直接「@ラベル名」を書くことができます*12

また、ラベルに飛ぶだけの場合は「IF...GOTO」という命令もあります*13

比較演算子はCのようなスタイルを使うので、not equal は"!="になります*14 *15

「FOR...NEXT」は同じです。「STEP」の指定も可能です。一般的な BASIC では、必ず一回はループ内が実行されたらしいのですが、プチコンではループの実行前に評価が行われるそうで、STEP の値が初期値よりも小さい場合は、ループ内が実行されないそうです*16 *17 *18

今日の最後に、インストラクションを読んでおきましょう。

5820  PRINT "     INSTRUCTIONS:"
5830  PRINT "<*> = ENTERPRISE"
5840  PRINT "+++ = KLINGON"
5850  PRINT ">!< = STARBASE"
5860  PRINT " *  = STAR"
5870  PRINT "COMMAND 0 = WARP ENGINE CONTROL"
5880  PRINT "  'COURSE' IS IN A CIRCULAR NUMERICAL          4  3  2"
5890  PRINT "  VECTOR ARRANGEMENT AS SHOWN.                  \ ^ /"
5900  PRINT "  INTERGER AND REAL VALUES MAY BE                \^/"
5910  PRINT "  USED.  THEREFORE COURSE 1.5 IS              5 ----- 1"
5920  PRINT "  HALF WAY BETWEEN 1 AND 2.                      /^\"
5930  PRINT "                                                / ^ \"
5940  PRINT "  A VECTOR OF 9 IS UNDEFINED, BUT              6  7  8"
5950  PRINT "  VALUES MAY APPROACH 9."
5960  PRINT "                                               COURSE"
5970  PRINT "  ONE 'WARP FACTOR' IS THE SIZE OF"
5980  PRINT "  ONE QUADRANT.  THEREFORE TO GET"
5990  PRINT "  FROM QUADRANT 6,5 TO 5,5 YOU WOULD"
6000  PRINT "  USE COURSE 3, WARP FACTOR 1"
6010  PRINT "COMMAND 1 = SHORT RANGE SENSOR SCAN"
6020  PRINT "  PRINTS THE QUADRANT YOU ARE CURRENTLY IN, INCLUDING"
6030  PRINT "  STARS, KLINGONS, STARBASES, AND THE ENTERPRISE; ALONG"
6040  PRINT "  WITH OTHER PERTINATE INFORMATION."
6050  PRINT "COMMAND 2 = LONG RANGE SENSOR SCAN"
6060  PRINT "  SHOWS CONDITIONS IN SPACE FOR ONE QUADRANT ON EACH SIDE"
6070  PRINT "  OF THE ENTERPRISE IN THE MIDDLE OF THE SCAN.  THE SCAN"
6080  PRINT "  IS CODED IN THE FORM XXX, WHERE THE UNITS DIGIT IS THE"
6090  PRINT "  NUMBER OF STARS, THE TENS DIGIT IS THE NUMBER OF STAR-"
6100  PRINT "  BASES, THE HUNDREDS DIGIT IS THE NUMBER OF KLINGONS."
6110  PRINT "COMMAND 3 = PHASER CONTROL"
6120  PRINT "  ALLOWS YOU TO DESTROY THE KLINGONS BY HITTING HIM WITH"
6130  PRINT "  SUITABLY LARGE NUMBERS OF ENERGY UNITS TO DEPLETE HIS "
6140  PRINT "  SHIELD POWER.  KEEP IN MIND THAT WHEN YOU SHOOT AT"
6150  PRINT "  HIM, HE GONNA DO IT TO YOU TOO."
6160  PRINT "COMMAND 4 = PHOTON TORPEDO CONTROL"
6170  PRINT "  COURSE IS THE SAME AS USED IN WARP ENGINE CONTROL"
6180  PRINT "  IF YOU HIT THE KLINGON, HE IS DESTROYED AND CANNOT FIRE"
6190  PRINT "  BACK AT YOU.  IF YOU MISS, HE WILL SHOOT HIS PHASERS AT"
6200  PRINT "  YOU."
6210  PRINT "   NOTE: THE LIBRARY COMPUTER (COMMAND 7) HAS AN OPTION"
6220  PRINT "   TO COMPUTE TORPEDO TRAJECTORY FOR YOU (OPTION 2)."
6230  PRINT "COMMAND 5 = SHIELD CONTROL"
6240  PRINT "  DEFINES NUMBER OF ENERGY UNITS TO BE ASSIGNED TO SHIELDS"
6250  PRINT "  ENERGY IS TAKEN FROM TOTAL SHIP'S ENERGY."
6260  PRINT "COMMAND 6 = DAMAGE CONTROL REPORT"
6270  PRINT "  GIVES STATE OF REPAIRS OF ALL DEVICES.  A STATE OF REPAIR"
6280  PRINT "  LESS THAN ZERO SHOWS THAT THAT DEVICE IS TEMPORARALY"
6290  PRINT "  DAMAGED."
6300  PRINT "COMMAND 7 = LIBRARY COMPUTER"
6310  PRINT "  THE LIBRARY COMPUTER CONTAINS THREE OPTIONS:"
6320  PRINT "    OPTION 0 = CUMULATIVE GALACTIC RECORD"
6330  PRINT "     SHOWS COMPUTER MEMORY OF THE RESULTS OF ALL PREVIOUS"
6340  PRINT "     LONG RANGE SENSOR SCANS"
6350  PRINT "    OPTION 1 = STATUS REPORT"
6360  PRINT "     SHOWS NUMBER OF KLINGONS, STARDATES AND STARBASES"
6370  PRINT "     LEFT."
6380  PRINT "    OPTION 2 = PHOTON TORPEDO DATA"
6390  PRINT "     GIVES TRAJECTORY AND DISTANCE BETWEEN THE ENTERPRISE"
6400  PRINT "     AND ALL KLINGONS IN YOUR QUADRANT"
6410  RETURN

このバージョンでの機能は

    • ワープ
    • 短距離センサ
    • 長距離センサ
    • フェーザ
    • 光子魚雷
    • シールド制御
    • ダメージレポート
    • コンピュータ
      • 銀河系地図
      • 状況レポート
      • 魚雷弾道計算

です。

ワープは右側が1で、左周りに8.9までの値で方向と移動量を指定します。

短距離センサは、宇宙域内の状況を表示します。

長距離センサは、周囲の宇宙域の状況を表示します。

フェーザは、エネルギーを放出する武器です。複数のクリンゴンに同時に攻撃ができます。

光子魚雷は、コースを指定して命中すると、確実にクリンゴンを倒すことができます。

シールド制御は、攻撃を防御するためにシールドに回すエネルギーを決定します。

ダメージレポートは、計器の故障状況と復旧状況を示します。

コンピュータが利用可能な場合は以下の機能が使えます。銀河系地図は、これまでに長距離センサで探査した範囲の状況をまとめてみることができます。状況レポートは、残りのクリンゴンの数や残り年数などの確認ができます。魚雷弾道計算は、現在いる宇宙域内のクリンゴンの座標と魚雷のコースを示します。

次回は変数の用途についてです。その2に続きます。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

2004 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2015 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2016 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2017 | 01 | 02 | 03 | 04 | 05 |
小説 ゼビウス―ファードラウト サーガ スーパーゼビウス ドッツ ゼビウス ナムコミュージアム Vol.2 ゼビウス ソルバルウ (NONスケールプラスチックキット)