atc(6) 空港管制官ゲーム

書式

atc -[u?lstp] [-[gf] game_name] [-r random seed]

解説

atc は 1 年あたり何百万人という旅行者の命を危険にさらすことなく飛行機の交通を 制御するという神経をすり減らす任務における技量を試します。 責任者であるあなたは管制空域と滑走路の内や外へジェット機やプロペラ機を 指示して飛ばさなければなりません。 飛行機のスピード (画面更新の間隔) と登場頻度は選んだ空域の難しさによって 決まります。

オプション

-u
使用方法を表示して終了します。
-?
-u と同じです。
-l
使用可能なゲームのリストを表示して終了します。 最初に表示されるゲームの名前は default ゲームです。
-s
得点リストを表示します (以前は上位 10 人のリストでした)。
-t
-s と同じです。
-p
atc は、自分だけが使うファイルがあると思っている専用のディレクトリ のパスを表示します。このパスはプログラムを再インストールするまで 使われ続けます。
-g game
指定されたゲームを実行します。名前を挙げたゲームが -l オプションで表示されるものの中にない場合には、default ゲームが実行されます。
-f game
-g と同じです。
-r seed
乱数のシードを設定します。このフラグを用いるのはいかがなものかと思います。

ゴール

atc におけるあなたのゴールは可能な限りゲームを長く続けることです。 他のプレイヤの時間を破ること以外には、勝利の状態はありません。 あなたがしなければならないのは、滑走路から飛行機を (高度を上げるように 指示することによって) 離陸させること、滑走路に飛行機を (滑走路のちょうど真上で 高度が 0 となるように指示することによって) 着陸させること、そして出口 (exit point) の外へ飛行機を送り出すことです。

いろいろなことがゲームの終わりを引き起こします。 それぞれの飛行機は目的地 (「情報領域」参照) を持っており、 飛行機を違う目的地へ送るとエラーになります。 飛行機は燃料切れになることもありえますし、衝突することもありえます。 衝突は、3 次元のどれかの方向で隣り合った場合であると定義されています。 目的地以外の出口から飛行機が空域を離れるのも同じようにエラーです。

得点は無事だった飛行機の数の順番に並べられます。その他の統計は単に楽しみの ために提供されているだけです。他のプレイヤよりも時間をかけたことに対するペナルティは (同点の場合を除き) ありません。

ゲームの中断は許されません。talk メッセージを受けたとしても、です。 空港管制官が電話に呼び出されるなんて、そんなことがいつありましたっけ?

表示

あなたが atc を走らせている端末に依存しますが、画面は 4 つの部分に分割されます。 ゲームの端末ドライバの部分は変更可能なように設計されているので、 あなたが遊んでいる版によっては表示形式に違いがあるかもしれないことを 強調しておいたほうがよいでしょう。このマニュアルの記述は ASCII 版の ゲームに基づいています。 しかしながら、ゲームのルールや入力形式には変更はないはずです。 Control-L は混乱しているかもしれない画面を描き直します。

レーダ

1 番目の部分はレーダ画面で、飛行機の相対位置や滑走路、標準の出入口、 レーダビーコン、あなたが飛行機を誘導するための単なる目安でしかない「線」が 表示されています。
飛行機は英字 1 文字と高度で表されます。高度の数字が 1 桁の数字であれば、それは 数千フィートを表しています。 プロペラ機とジェット機との間には多少の区別がなされます。ASCII 端末では、 プロペラ機は大文字で、ジェット機は小文字で表されます。
滑走路は数字と飛行機が滑走路へ着陸する際に侵入しなければならない方向を示す 印とで表されます。ASCII 端末では、この印は、'^', '>', '<', 'v' の どれか 1 つで、それぞれ北 (0 度)、東 (90)、西 (270)、南 (180) を表しています。 飛行機はこの方向に離陸もします。
ビーコンは丸またはアスタリスクと数字で表されます。 これらの目的は飛行機のパイロットが簡単に場所を参照できるようにすることです。 このマニュアルの「入力」の項にある「delay コマンド」を参照してください。
入/出口はレーダ画面の枠の上に数字として表示されます。飛行機はこれらの地点から 予告なしに入ってきます。これらの地点はそれらから連想される方向を持っており、 飛行機は常にその方向から領域に入ってきます。ASCII 版の atc では、この方向は表示されません。ゲームが進むにつれてこの方向が明白になります。
やってくる飛行機は常に同じ高度 7000 フィートで入ってきます。 飛行機はうまく入/出口を通って去っていくには、9000 フィートで飛んでいなければ なりません。 (現在のところ) 飛行機が領域から飛び去る時には、どの方向へ飛んでいっても 構いません。

情報領域

2 番目の表示領域は情報領域で、時間 (開始からの更新回数) と領域の外から無事に 誘導した飛行機の数が表示されています。 その下にあるのは今飛行中の飛行機のリストと、 1 行開けて、地面 (滑走路) にいる飛行機のリストです。 それぞれの行は飛行機の名前と現在の高度、アスタリスクがついている場合燃料が 少ないことを、飛行機の目的地、そして飛行機の現在のコマンドが書かれています。 高度の変更はコマンドとはみなされないために表示されません。 以下に示すのは情報表示行のありうる例です:
       B4*A0: Circle @ b1

       g7 E4: 225
1 番目の例は 4000 フィートを飛行中の 'B' と名付けられたプロペラ機を表しています。 この飛行機は燃料が不足しています ('*' に注目)。 この飛行機の目的地は 0 番滑走路です。 次のコマンドは 1 番ビーコンに着いたら旋回することを要求しています。 2 番目の例は、 4 番出口を目指す、高度 7000 フィートで 'g' という名の ジェット機です。この飛行機はちょうど今 225 度方向 (南西) へ回転を実行して いるところです。

入力領域

3 番目の表示領域は入力領域です。あなたの入力は、ここに表示されます。 詳しくはこのマニュアルの「入力」の項を参照してください。

作者領域

この領域は、称賛に値するのは誰かを示すクレジットを知らせるためだけに 使われています :-)。

入力

このゲームにはコマンド補完インタフェースが組み込まれています。 いつでも、'?' を入力すれば可能な入力文字が表示されます。 バックスペース (あなたが使用している消去文字) を入力すると前に戻り、 コマンドの最後の部分を消します。 コマンドが完成したら、リターンを押せば入力されます。意味上のチェックはすべて この時に行なわれます。もし 1 つもエラーが見つからなかったら、コマンドは適切な 飛行機に送られます。チェックの段階でエラーが見つかった場合、間違った文に下線が 引かれ、(うまくいけば) 説明のメッセージがその下に表示されます。

コマンド構文は 2 つの部分に分けられます: 即時のみ延期可能 コマンドです。 即時のみ コマンドは次の更新で実施されます。 延期可能 コマンドも次の更新で実施することができますが、付加的な Delay コマンドと呼ばれる述語が後ろについている場合は例外です。

下の表において、構文 [0-9] はいずれかの 1 つの数字を意味し、 <dir> は 's' キーの周りのキー、つまり ``wedcxzaq'' にあてはまります。 絶対参照においては、'q' は北西すなわち 315 度にあてはまり、'w' は北すなわち 0 度にあてはまります。 相対参照においては、'q' は -45 度すなわち「左折 45 度」にあてはまり、'w' は 0 度すなわち「方向に変更なし」に当てはまります。

すべてのコマンドは飛行機を表す文字で始まります。 これはコマンドの受け取り手を示します。 大文字小文字は無視されます。

即時のみコマンド

- a Altitude:
飛行機の高度 (と離陸) に作用します。
- [0-9] Number:
与えられた高度 (千フィート単位) に行きます。
- c/+ Climb:
相対高度を変更 (上昇) します。
- [0-9] Number:
千フィート単位での高度差です。
- d/- Descend:
相対高度を変更 (下降) します。
- [0-9] Number:
千フィート単位での高度差です。
- m Mark:
強調モードで表示します。コマンドは普通に表示されます。
- i Ignore:
強調表示をとりやめます。もしコマンドがない時にはコマンドはダッシュの線で 表示されます。
- u Unmark:
ignore と同じですが、延期されたコマンドが処理されると飛行機はマークされます。 飛行機の行程のすべてでなく一部の間忘れたい時に便利です。

延期可能コマンド

- c Circle:
飛行機に旋回させます。
- t Turn:
回転します。
- l Left:
反時計回りに回転します (デフォルトでは 45 度です)。
- <dir> Direction:
反時計回りに与えられた角度回転します。 0 度は回転無しを表します。-45 度反時計回り回転は 45 度時計回り回転です。
- r Right:
時計回りに与えられた角度回転します (デフォルトでは 45 度です)。
- <dir> Direction:
turn left <dir> と同じです。
- L Left 90:
90 度反時計回りに回転します。
- R Right 90:
90 度時計回りに回転します。
- <dir> Direction:
与えられた絶対羅針盤方向へ回転します。 最も近い回転が選ばれます。
- t Towards:
ビーコン、滑走路または出口へ向かいます。回転は推測だけで行われます。
- b/* Beacon:
ビーコンへ向かって回転します。
- [0-9] Number:
ビーコンの番号を指定します。
- e Exit:
出口へ向かって回転します。
- [0-9] Number:
出口の番号を指定します。
- a Airport:
滑走路へ向かって回転します。
- [0-9] Number:
滑走路の番号を指定します。

延期コマンド

延期 (a/@) コマンドはどの 延期可能 コマンドに対しても付けることができます。 延期コマンドは飛行機が特定のビーコンに着いた時 (将来のバージョンでは他の物体に着いた時も) に行動を起こすような指示を 管制官が出せるようにします。

- a/@ At:
与えられたビーコンに飛行機が着いた時に与えられた延期可能なコマンドを 実行します。
- b/* Beacon:
これは拡張できるようにするための余分です。
- [0-9] Number:
ビーコンの番号

マーク、マーク取り消し、そして無視

飛行機は空域に入ると マーク されます。このことは飛行機はレーダ画面では強調表示されることを意味しています。 飛行機は マーク消去 または 無視される こともあります。 マーク消去 された飛行機は強調なしモードで表示され、ダッシュの行が情報領域のコマンド フィールドに表示されます。飛行機は mark コマンドが発行されるまでこの状態で い続けます。何か他のコマンドが発行されても、コマンドが完了するとコマンド行は ダッシュの行に戻ります。

無視された 飛行機は延期可能なコマンドが処理された際に、自動的に マーク された状態に切り替えられる点を除き、マーク消去された飛行機と 同じように扱われます。この機能はまだ完全には飛行道程が 設定できていない飛行機を、少しの間忘れていたい時に便利です。

コマンド、マーク付け、マーク消去、そして無視のすべては次の更新の始めから効果が 現れます。飛行機がすぐに強調なしモードに移らないからといって 驚かないでください。

使用例

atlab1
a: turn left at beacon #1
a へ: ビーコン #1 で左に旋回せよ
cc
C: circle
C へ: 旋回せよ
gtte4ab2
g: turn towards exit #4 at beacon #2
g へ: ビーコン #2 で出口 #4 に向けて回転せよ
ma+2
m: altitude: climb 2000 feet
mへ: 高度変更: 2000 フィート上昇せよ
stq
S: turn to 315
Sへ: 315°方向へ旋回せよ
xi
x: ignore
xへ: 強調表示を取り止めよ

その他の情報

ジェット機は更新の度に移動し、プロペラ機は 1 度おきの更新毎に移動します。

すべての飛行機は 1 回の移動で最高 90 度曲がれます。

飛行機は 7000 フィートで入ってきて、9000 フィートで出ていきます。

滑走路の上以外の場所で飛行機が高度 0 で飛ぶと墜落します。

滑走路の上で待っている飛行機ができるのは離陸 (高度を上げる) のみです。

新しいゲーム

Game_List ファイルには現在利用可能な競技場が記録されています。競技場を記述した新しい ファイルを「利用可能」にするためには、このファイルに、新しいファイルの 名前を書く必要があります。 プレイヤがこのファイルに書かれていないファイルを指定した場合、彼の得点は 記録されません。

競技場記述ファイルは 2 つの部分に分けられます。1 番目の部分は定義部です。 ここでは、4 つの調節可能なゲーム・パラメータが設定されなければなりません。 これらの変数は以下の文法で設定されます:

変数 = 数;

変数は以下のうちの 1 つです: update, 強制更新の間隔の秒数を指定します。 newplane, 新しい飛行機が入ってくる間隔の (だいたいの) 更新回数を指定します。 width, 競技場の幅を指定します。そして height, 競技場の高さを指定します。

競技場記述ファイルの 2 番目の部分は出口やビーコン、滑走路、線の場所を 記述します。文法は以下の通りです:

beacon:        (x y) ... ;

airport:       (x y 方向) ... ;

exit:  (x y 方向) ... ;

line:  [ (x1 y1) (x2 y2) ] ... ;

ビーコンに対しては、(括弧でくくられた) 単純な x, y 座標組が用いられます。 滑走路と出口には 3 番目の値、方向を示す wedcxzaq のうちの 1 つが必要です。 滑走路に対しては、これは飛行機が離陸または着陸しなければならない方向で、 出口に対しては、これは飛行機が競技場に 入る 時の方向です。これは直観的ではないように見えるかもしれませんが、 出口の方向には何の制限もないので、これで適切なのです。 線は終端を指定するのに 2 つの座標組を必要とするため、少し違います。 これらの終端は角括弧で囲まれなければなりません。

すべての文はセミコロン (;) で終わります。複数項目文は並べて書きます。 それぞれの定義はどの項目の文よりも前に、1 度だけ行なわれなければなりません。 コメントはハッシュ (#) 記号より始まり改行で終了します。 座標は 0 から始まり、 width-1 と height-1 で終わります。出口のすべての座標は 枠上に置く必要があり、すべてのビーコンと滑走路は枠よりも内側に置く 必要があります。 線の終端は競技場内のどこでもかまいませんが、 線が横か縦か ちょうど斜め になる必要があります。

競技場ファイル例

# これは default ゲームです。
update = 5;
newplane = 5;
width = 30;
height = 21;
exit:     ( 12  0 x ) ( 29  0 z ) ( 29  7 a ) ( 29 17 a )
          (  9 20 e ) (  0 13 d ) (  0  7 d ) (  0  0 c ) ;
beacon:   ( 12  7 ) ( 12 17 ) ;
airport:  ( 20 15 w ) ( 20 18 d ) ;
line:     [ (  1  1 ) (  6  6 ) ]
          [ ( 12  1 ) ( 12  6 ) ]
          [ ( 13  7 ) ( 28  7 ) ]
          [ ( 28  1 ) ( 13 16 ) ]
          [ (  1 13 ) ( 11 13 ) ]
          [ ( 12  8 ) ( 12 16 ) ]
          [ ( 11 18 ) ( 10 19 ) ]
          [ ( 13 17 ) ( 28 17 ) ]
          [ (  1  7 ) ( 11  7 ) ] ;

関連ファイル

ファイルは特別なディレクトリに保存されています。このパスを表示させるには 「オプション」を見てください。

/var/games/atc_score得点が保持されます。
/usr/share/games/atc/Game_List利用可能なゲームのリストです。

作者

Ed James, UC Berkeley: [email protected], ucbvax!edjames

数年前に何か見知らぬ PC のために書かれたゲームについて 誰かが記述した全体的な特色を、このゲームは元にしています、たぶん。

バグ

あなたがやめてから画面が描き直されることがときどきあります。

このゲームを開発している間に更なる curses のバグが見つかりました。 もしあなたの curses ライブラリの clrtobot.o のバージョンが 5.1 またはそれ以前であれば、入力ウィンドウでの後退動作による消去に 問題があるでしょう。