Programmer's Nightmare Rules

ルール原文: http://www.silcom.com/~tomjolly/pnrules.htm
チャット: http://www.lingr.com/room/programmers_nightmare

  • プログラムをコントロールするゲーム(Ver.2では作っていく)
  • 10点からスタートして20点になったら勝ち、0点になったら負け
  • 「コントロールトークン」(Bit)を全部失っても負け
  • Ver.1の方がルールを学びやすいが、より戦略性が問われる(じゃあそれでいいじゃん。以下Ver.1についてのみ記述する)
  • まず次のカードをデッキから取り除くthe Break (3枚), Run (4), Secret (2), Insert (1)。Ver.1では使わない。
  • カードにはいろいろな命令が書かれていて、最初にそれが表向きに机の上に円形に配られる。これがプログラム。
  • その上に各プレイヤーが「Bit」を置くことで、その命令を「所有している」という印にする。
  • 一つのカード(命令)には一つしかBitを置けない
  • 全員がBitを起き終わったらプログラムを「実行」する。
  • 最初に配ったカードから実行を始めて、最後のカードまで行ったらまた最初から、と無限ループする。もちろんプログラムの種類によってはより小さな無限ループが発生する。
  • 膠着状態になったらシャッフルしてやり直す。
  • カードにBitが乗っていない場合、実行されない(OVERSIGHTは例外)
  • カードにBitが乗っている場合、そのBitの所有者がその命令を実行するかどうかを決めることができる(PROGRAM_ERRORは例外)
  • 一つのカードに複数のBitが乗っている場合(Bitを動かすカードなどで発生する)、先に置かれた順に実行する。1人目の行動によって2人目のBitを発動する前に破壊することは可能。1人目の実行中にReplaceなどでカードが変わった場合は2人目は新しいカードを実行する。
 2    3    4    5    6 // Players数
14   18   18   18   21 // 配るCards
 6    5    4    3    3 // PlayerごとのBitsの数
  • 0点になったらその人は負け。その人のすべてのBitが取り除かれる(げげ!プログラムがかなり変わるぞ!)
  • Bitが全部取り除かれた場合も負け。
  • 得点を増加または減少させるカードが含まれていないループは最大3回までしか繰り返してはいけない(3回目のループが終了したらループの原因になっている命令はスキップされる)
  • 得点の増減のあるループは無限にループされる(もちろん繰り返している間に誰かが勝つか負けるかする)

11:34 nishio: 僕が配られたカードを見てそれでやるかどうかを決めるので先手か後手かを選ぶ権利はそちらがもちということでいいかな
11:35 nishio: ダメすぎるカードでプレイするのを避けるために。
11:35 tokorote_: OK

http://d.hatena.ne.jp/nishiohirokazu/20090323/1237768121

01:44 nishio: 思ったんだけどさ、先手→後手→先手→後手だとさ、先手が先にいいものを取って、後手がいいものを取ったらそれを無効化するカードを先手が取って、という流れになっちゃうよね。先手→後手→後手→先手にしたらいいんじゃないか。カタン風。

他にも色々ルールはあるけどとりあえずここらでカードリストを見よう。カードの名前は翻訳しなくていいよね、プログラマだし。

ACQUIRE

2点得る. (3 cards)

BIT MAKER

自分以外の色の新しいBitを任意のカードの上に置く。(通常PROGRAM ERRORの上に置かれることが多い) place a new marker of any color except yours on any card. (this will most commonly be used with "PROGRAM ERROR"). (1 card).

BIT MOVER

任意のカード上の1つのマーカーをその隣のカードに移動する.2枚

11:36 tokorote_: BIT MOVERは、カードX上のビットをカードXの隣に移動で。
11:36 nishio: OK

http://d.hatena.ne.jp/nishiohirokazu/20090323/1237768121

BIT SWAPPER

2つのマーカーを交換する。ただし同じ色か同じカードの上にあるかのどちらかではいけない。(1 card)

BUG

全員1ポイントのダメージを受ける。"Program Error"と違って、このカードを発動するかどうかはカードのオーナーが決められる。2枚

COPY

直前の2命令を順に実行する。Execute the previous 2 instructions in order. This essentially replaces the "copy" action with those 2 commands, as though you had the instructions from those 2 cards written on this card with your Bit on it. These instructions might refer to other cards, which duplicate other cards. See example at the end of these rules. The Program Counter doesn't move while you are performing these 2 copied commands. If you copy a SUBROUTINE, you deal 2 new instructions for the COPY card's subroutine. If the COPY is later moved out of range of the SUBROUTINE card, then the COPY's subroutine is discarded. (2 cards)

DECREMENT

ある「一枚」のカードに書かれた数値を一つ減らす。カードに複数の数字が書かれている場合はどちらを減らすか決められる。2枚。訳注:たとえば「1つのBitを動かす」が「0つの」に書き変わって無力化されたりする。

DEFEND

1点のダメージを受けるかわりに、続く2枚のカードによって引き起こされるダメージを無効化する。パスをされたカードは2枚に含まない。SUBROUTINEが実行された場合はSUBROUTINEとその最初のカードが無効化の対象になる。

DELETE

任意の1枚のカードについている任意の色の1枚のBitを取り除く。1枚

ERASE

直前のカードをプログラムから取り除く。もちろんプログラムが逆順実行かどうかで対象が変わる。 (2 cards)

FLOATER

一つ前か後ろの位置にこのカードを移動し、直後のアクションをコピーする。Move this card forward or backward 1 space in the sequence, then copy the next action. That is, it swaps places with a card adjacent to it. The Program Counter moves with it. (2 cards)

12:06 tokorote_: ええと質問FLOATERで実行された場合って、自分のビットが置いてなくても実行される?
12:07 tokorote_: Move this card forward or backward 1 space in the sequence, then copy the next action.
12:07 nishio_: FLOATERの挙動がよくわかっていないけどCOPYと一緒なら「FLOATERに書いてあるかのように実行」だろうなぁ
12:07 nishio_: だからビットの有無には関係ない
12:08 tokorote_: NEXTっていうのはプログラムカウンタに対するNEXTなのか、それとも交換したカードを指すのか。
12:08 nishio_: うーん、自信はないけどもプログラムカウンタはFLOATERについて動くんだよね?
12:09 nishio_: FLOATER X Yという順になっていたときに
12:09 nishio_: X FLOATER Yに並び替えた後で実行されるのはXかYかという疑問だよね?
12:09 tokorote_: then next action.だから、SWAPが終わった時点で次の命令を実行されるってことじゃないかな。
12:10 tokorote_: そう。
12:10 nishio_: thenだから交換し終わって、そのあとで、次のアクションをコピー、だよなぁ
12:10 nishio_: つまりYだと思う
12:10 tokorote_: それで。

http://d.hatena.ne.jp/nishiohirokazu/20090323/1237785061

FUTURE

直後の2アクションを実行する。その2アクションがFUTUREカードに書かれていてあなたのマーカーがついているように振る舞う。Perform next 2 actions in the sequence. This essentially replaces the "future" action with those 2 commands, as though the instructions from those 2 cards were written on this one card, with your marker on it. These instructions might refer to other cards, which duplicate other cards. See example at the end of these rules. The Program Counter does not move from the Future card while it is duplicating the next 2 cards. FUTURE acts very much like COPY where the SUBROUTINE is concerned. (2 cards)

nishio: 僕の一人プレイではFUTUREがGOTOとOVERWRITEをコピーしたときはGOTOでプログラムカウンタを移動した上でOVERWRITEも実行した
nishio: 「 instructions from those 2 cards were written on this one card」を「プログラムカウンタを書き換えた上でOVERWRITEする1つの分割不可能な命令が生成される」と解釈した
tokorote_: 二つのカードが一つのカードに書かれていたものとして扱う。 ってことだよね。
tokorote_: たぶんあってると思う。

http://d.hatena.ne.jp/nishiohirokazu/20090323/1237785061

GOTO

プログラムカウンタを6進める。一度使用されると、その後プログラムが書き換えられても、GOTOのジャンプ先は変更されない。ジャンプ先の命令が削除または置換された場合、GOTOは無効化される。
This sends the Program Counter 6 cards forward in the program, and then, once used, "locks" it to that instruction, that is, if that instruction moves around in the program, then the GOTO still jumps to it. If the instruction is removed or replaced, then the GOTO goes nowhere. The program continues to run in the same direction in which it was running (clockwise or counterclockwise). If GO TO is duplicated and used at the start of a FUTURE or COPY command, then the statement to which it is linked is the second command executed. If a GOTO is inside a SUBROUTINE, it jumps 6 cards forward in the main body of the program, after the SUBROUTINE card. (3 cards)

INCREMENT

任意のカードの任意の数字を+1する。ただしこれをのぞく。 (2 cards)(訳注:INCREMENTが2枚プログラムにある場合、もう片方のINCREMENTを増やすのはあり?なしと読めるが。)

MULTIPLIER

ビットを持っているプレイヤは1個のあたらしいビットをこのカードに置く。Each player who has any number of Bits here gets 1 new Bit. Put it on this card. This may seem useless at first, unless you happen to have a Bit Mover, too. (1 card)

OVERSIGHT

これはBitがなくても発動する唯一のカード(Bitがあっても何もしない) だれのBitも乗っていない場合、全員「一ポイント」を失う。This is the only card that activates if no Bits are there, and does nothing if Bits are there. If it's empty when the Program Counter gets there, everyone loses a point. Any player with a Bit on it does not get a choice as to whether or not it is activated, it is automatic.(2 cards)

OVERWRITE

任意の1つのビットをあなたの色に変える。OVERWRITEは1度しか使えず、使った後はデッキからランダムにカードをとって置き換える。ビットはそのまま残る。Change a color Bit on any 1 program instruction to your color Bit. This card (OVERWRITE) is used only once, then replaced with another random card from the deck. The color Bit on the replacement card remains the same as before. (2 cards)

POINTER

直前の2枚のカードによって発生させられたダメージを任意のプレイヤーにリダイレクトする。2枚のうちに SUBROUTINEがあるばあい、SUBの中のカードによるダメージも含まれる。Redirect any damage done by the previous 2 cards to a player of your choice. If one of these cards is a SUBROUTINE, this includes the cards inside the SUB. (1 card)

POWER SURGE
このカードにBitの乗っていないすべてのプレイヤーは3ポイントのダメージを受ける。乗っているプレイヤーは1ポイントのダメージ。All players with no Bits on this card lose 3 points. Players with a Bit here lose only 1 point. (2 cards)
PROGRAM ERROR
実行前のBit置きの際に、他のプレイヤーのBitをここに置くことができる。プログラムカウンタがこのカードに到着したら選択の余地なく1ポイントのダメージを受ける。このbitは最初に与えられたbitからではなく、新しい同じ色のBitをとって使用する。

When claimed (Version 1) or played (Version 2), you get to take an opponent's Bit and put it here. When the Program Counter reaches this instruction, the player there does not have an option as to whether or not it executes, it does automatically, and he or she loses 1 point. If there is any Bit on this card, it activates. In Version 1 this bit does not come from the group of bits that the player has available to play, but from any extra available of the same color, and this must be done before your last bit is played. (3 cards)

12:15 nishio_: PROGRAM_ERRORの挙動についてなんだけど
12:16 nishio_: 僕がPROGRAM_ERRORを取ると宣言すると与えられている6個のビットとは別に対戦相手のビットが置かれて僕のビットは消費されないという認識で正しいかな?
12:17 nishio_: PROGRAM ERROR; When claimed (Version 1) or played (Version 2), you get to take an opponent's Bit and put it here.
12:18 nishio_: In Version 1 this bit does not come from the group of bits that the player has available to play, but from any extra available of the same color, and this must be done before your last bit is played.
12:18 nishio_: という記述なんだけど。
12:19 nishio_: そうであれば、PROGRAM ERRORをclaimしてそこにところてんビットを置く。
12:19 nishio_: そして僕はもう一つビットを置けるんだよな。
12:19 tokorote_: PROGRAM ERRORの上にビットが乗ってると、実行するかしないかは選べない、無条件実行。
12:19 tokorote_: 実行されると相手のビットが置かれる。
12:20 tokorote_: 複数のビットが乗っかっていたら、全員分が実行されて、それから追加のビットを置くってことかな。PLAYカードを実行することなのか、ビットを置くことなのか分からないけど。
12:21 nishio_: version1なのでplayedのタイミングではなくて、claimedのタイミングに相手のビットを置く処理が発動して、
12:22 nishio_: claimedってのは最初のビットを置いて行くフェーズで「ここにビットを置く」と言うことだと認識している。
12:22 nishio_: Each player has a number of colored markers (Bits) with which they may "claim" a program instruction (a card).
12:25 tokorote_: Claimedは「ビットが置かれている」 だと思ったんだけど違うのかな。
12:27 nishio_: ところてん解釈ではここで僕がclaimすると僕のビットが置かれて、実行時にプログラムカウンタがここに来ると何が起きる?
12:28 tokorote_: 西尾さんの得点から1点さっぴかれて、僕のビットが追加で置かれる。
12:28 tokorote_: んで、二週目は二人とも実行されてっていう感じな気がする。
12:29 nishio_: 二周目は二人とも実行されて二人のビットが置かれる?
12:29 nishio_: うーん。プレイ中にビットが置かれるんだったらほかのBIT_MAKERとかでも行われていることだからここだけ特別な言い方をしない気がする。
12:31 tokorote_: 確かにえらいことになるよなぁ。
12:31 nishio_: 僕の解釈ではビット置きのフェーズで「ここに置く」って言うと自分の色じゃなくて相手の色が置かれて実行時にプログラムカウンタが来るたびにその色の人に1ポイントのダメージ、という理解。
12:31 tokorote_: まぁ、そっちのほうが暴走はしないよなぁ。
12:32 tokorote_: じゃあそれで。
12:32 nishio_: 「僕のビットは消費されないからさらに置ける」が真か偽かも気になる

12:34 tokorote_: PROGRAM_ERROR N T
12:35 nishio_: PROGRAM_ERRORには僕のも置かれるのか?
12:36 nishio_: とりあえず実行を開始する前に整理したいポイントが
12:38 nishio_: 1: PROGRAM_ERRORをclaimすると、対戦相手のビットが置かれ、自分のビットは消費しない (僕の解釈)
12:38 nishio_: 2: ROGRAM_ERRORをclaimすると、対戦相手のビットが置かれ、自分のビットは置かれないが消費される
12:38 nishio_: 3: ROGRAM_ERRORをclaimすると、対戦相手のビットが置かれ、自分のビットも置かれる
12:39 nishio_: 4: PROGRAM_ERRORをclaimすると、自分のビットが置かれ、実行のたびに相手のビットが置かれる
12:40 nishio_: のどれが正しいのか、ってことだ
12:40 nishio_: 今のところてんの解釈は(3)なのだけどもそれだと二人とも-1になるだけなので全然置くメリットがない
12:42 nishio_: プレイヤー全員が-1になる命令は普通にBUGという形で3枚入っているのでわざわざPROGRAM_ERRORを導入する理由がよくわからない
12:46 tokorote_: いや、三人以上では変わってくるんじゃないんですか?
12:47 tokorote_: 特定の二人だけにダメージが入る
12:47 nishio_: でも自分に選択の余地なしでダメージが入るんでしょ?
12:47 tokorote_: 自分はMOVEしたらいい。
12:47 nishio_: なるほど

http://d.hatena.ne.jp/nishiohirokazu/20090323/1237785061

REPLACE

プログラム中の任意のカードを置換する。INCREMENTとDECREMENTの効果は消滅する。Replace any card in the sequence. The Bit color on it remains the same. Increment or decrement tokens on the removed card are discarded. (1 card)

REVERSE PROGRAM

プログラムの実行順序を反転する。複数のプレイヤーがBitを載せている場合、2人目が1人目の反転させた実行順序をさらに反転させることも可能であることに注意。The program reverses, going back the opposite direction from whence it came. Note that if 2 players have tokens on this card, its possible for the second player to cancel out the REVERSE of the first player. (2 cards)

SELF DESTRUCT

誰か1人に4ポイントのダメージを与え、上に乗っているすべてのBitごとゲームから取り除かれる。複数のBitが乗っている場合も、最初のBitしか効力を発しない。Causes 4 points of damage to 1 player, then you discard this card along with any Bits on it. If there are 2 or more Bits here, only the first Bit on the card gets to blow up. (1 card)

SEQUENCE MOD

1枚の命令カードをプログラムの任意の位置に移動する。このカードを含む。もしこのカードを動かした場合、プログラムカウンタも一緒に動く。Move 1 program instruction to any other location in the program. That, of course, includes this one. If you move this one, the Program Counter goes with it. (1 card)

SUBROUTINE

プログラムカウンタが最初にこのカードに到達した際に、2枚のカードを引いてメインループの脇に並べる。2枚のカードの上にはビットは置かれないが、SUBROUTINEカードはこの2枚のカードの機能を実行する。最初にSUBROUTINEを実行した時には、両方のカードの機能を順番に実行しなければならない。しかしそれ以降はプログラムカウンタがSUBROUTINEに来たときには、2枚のカードを実行するかどうかを決定できる。

もしサブルーチンの中にFLOATERのようなプログラムにそって動き回るカードがある場合、SUBROUTINEの外に動くことは禁止。SEQUENCE MODのようなプログラム全体の任意のカードに対して効果を発動するようなカードは、メインのプログラムにでもサブルーチンの中にでも効果を発動してかまわない。COPY, FUTURE, SWAP INSTRUCTIONS, POINTERなどの「前後何枚」に効果を発動するカードは、サブルーチンの外に効果を発動しない。サブルーチンの中のカードにしか効果を及ぼさない。GOTOは例外。UPGRADEによってサブルーチンの中のカードの所有権が更新された場合、新しい所有者を表すビットが置かれる。そしてSUBROUTINEが実行されたときには必ずそのカードを実行しなければならない。

にしお カードが並べられるのはプログラムカウンタが最初に来たとき。activateがそれを指すのか、それとも「実行しますか(y/n)」にyと答えたときを指すのか。
Tnzk 他のカードにも何度かactivateという単語は出てきてますね。OverSightがThis is the only card that activates if no Bits are thereなのでactivate = 発動と考えると、yで答えたときだけのような。
にしお だよね。僕もそう思う 。

http://www.lingr.com/room/programmers_nightmare/archives/2009/03/25#msg-63539269

Tnzk GOTOの場合、Subroutine命令の場所から6命令先になるの?
Tnzk あ、プログラムカウンタはそもそもサブルーチン命令から移動しないのか
にしお プログラムカウンタは移動していないからSUBROUTINEから6つ先、という主張は納得できる。

http://www.lingr.com/room/programmers_nightmare/archives/2009/03/25#msg-63539979

SWAP INSTRUCTIONS

直前または直後の2枚のカードを入れ替える。もし数字が「3」にINCREMENTされた場合、3枚のカードを任意の順番に並び替えられる。Swap the previous 2 cards with each other, OR swap the next 2 cards in the sequence with each other. If this is changed to a "3", then you can switch around 3 cards before or behind you, in any manner you wish. (1 card)

TIME DELAY

"SKIP"トークンを得る。その後このカードが削除されたりBitが取り除かれたりしようが関係なく、任意のタイミングで他人のターン1つをスキップさせることができる。スキップさせた後、トークンは廃棄する。この数字はINCREMENTできる。Get a "SKIP" token. This token may be saved for later use, assuming that the Program Counter activates this card, even if TIME DELAY is subsequently eliminated or if your Bit is subsequently removed from the card. This is, in essence, telling a player that he "loses his turn" for 1 card. You discard the SKIP token after use. It is possible to accumulate more than 1. (1 card)

UPGRADE

プログラム上のある位置を選び、カードを一枚ひき、そこに置く。デッキにカードが残っていない場合は除く。そしてBitの色をあなたの右にいる人の色に変える。そしてあなたのビットを新しく追加されたカードに移動する。COPYまたはFUTUREによってUPGRADEが発動される2枚のうちの1枚目のカードである場合、COPYの上のBitの色は2つ目のカードを実行する前にかわり、新しいオーナーは強制的に2枚目のカードを実行させられる。Choose a location in the program, draw a new card (if there are any left in the deck) and place it there. Then, change the color Bit on UPGRADE to the color of the player on your right. Then move your Bit to the newly placed card. If you COPY (or use FUTURE on) an UPGRADE, and it's the first of the 2 instructions, then the Bit on the COPY (or FUTURE) changes before the 2nd instruction is performed, and the new owner of COPY is forced to perform that instruction, since the COPY has already been activated. (1 card)

WORM

このカードをのぞく任意のカードに新しいあなたの色のBitを乗せる。add a Bit of yours to any card, except this one. The first owner of that card, if any, performs the action on that card first when it is next activated. (1 card)

ZAP

他人に1ポイントのダメージを与えられる。 (3 cards)

SUBROUTINEのルールがややこしい。めんどくさくなったのでプレイして実際にそういう自体が起きるまで読むのをやめた。UPGRADEとかSUBROUTINEとかランダム性が導入されて読めなくなるので嫌だなぁ、という感想。
とりあえず単語カードかなにかでこれのカードを作って誰かプログラムの得意な人とプレイしたい。