Programmer's Nightmare 改良案2
http://d.hatena.ne.jp/nishiohirokazu/20090328/1238228769 の続き。
心を鬼にして削除をする。
- DEFENDは効果範囲がわかりにくいので削除
- REMOVE_CARDを「直前のカードを取り除く」から「このカードの前1枚のカードを取り除く」に変更。INCREMENTやDECREMENTの対象になるように。
- MULTIPLIERは「2倍2倍で増えて行くのか?」「無限ループ可能?」などと無用の混乱をもたらすので「先頭のビットだけが」などと条件を加えたくなったけど、それをやるとコードの上ではよけい複雑なルールになるんだよな。
- id:TOKOROTEN案を採用した:「このカードにビットがおかれているすべてのプレイヤーが新しいビットを1つ得る。新しいビットはこのカードにおかれる。」が「このカードにビットがおかれているすべてのプレイヤーが新しいビットを1つ得る。新しいビットはこのカードの実行が終了したタイミングでこのカードにおかれる。」
- POINTERも効果範囲がわかりにくいので削除
- REPLACEの「デッキからカードを引き、任意の1枚を置き換える。」という説明は誤り。「任意の1枚を指定し、デッキから引いたカードで置き換える。」の順。漢数字だったのをアラビア数字に変更。
- SWAP_CARDを「任意の2枚を交換」に強化。強すぎる疑惑はあるけどデッキに1枚のカードだし「任意のカードを任意の位置に移動」に弱化するとSEQUENCE_MODと同じものになってしまう。いままで使い道のなかったいらない子が一気にSEQUENCE_MODより強いカードになった。様子見。
- 後だし強すぎるとの意見のあったTIME_DELAYの弱化。「[SKIP]トークンを手に入れる。[SKIP]トークンは任意のビットの直前に置く。プログラムカウンタがそこへ到達した際に、そのビットの処理をスキップしてトークンが削除される。」プログラム的にも任意のタイミングで割り込みができるよりこの方が楽。
とここまで書いて、いっそMULTIPIER, SWAP_CARD, TIME DELAYも削除してしまってはどうだろうと思った。
Programmer's Nightmare 対人戦 5回目?
01: WORM | 02: BUG | 03: COPY | 04: ACQUIRE | 05: SELF_DESTRUCT| 06: BIT_MOVER | 07: FUTURE | 08: POWER_SURGE | 09: REPLACE | 10: ZAP | 11: FLOATER | 12: COPY | 13: SUBROUTINE | 14: DELETE |
SUBROUTINEはルールを複雑にするのでデッキから引いたカードで置き換えることを提案→合意→PROGRAM_ERRORを引いた
kareya(haiku) FUTUREはビットが乗ってるものとして、次の2つのコードを実行するんですよね
西尾泰和 FUTUREカードに次の2枚のカードに書かれている命令が書かれているかのように振る舞う
kareya(haiku) この07:FUTUREの続きに、POWER_SURGEがありますが、このFUTUREのPOWER_SURGE実行はFUTUREの人は、1ポイントのダメージ扱いですかね?3ポイントですかね?
西尾泰和 FUTUREカードに「このカードにビットが乗っている人は1ポイント…」と書かれているように振る舞う、ということでFUTUREの人が1ポイント、FUTUREにビットが乗っていない人は3ポイント、だろうなぁ。たとえ僕がPOWER_SURGEにビットを乗せていたとしてもkareyaがFUTUREを発動したときには僕は3ダメージ。
kareya(haiku) よし。とりあえず14:DELETEに置きます
西尾泰和 じゃあまあWORMで
kareya(haiku) 03:COPYにBITをー。
西尾泰和 06: BIT_MOVERに置く
kareya(haiku) 04:ACQUIREにBIT
西尾泰和 07: FUTUREに置く
kareya(haiku) 08:POWER_SURGEに
西尾泰和 COPYでWORMをコピーしてどこに置くつもりなのかが気になるなぁww 12: COPYに置く
kareya(haiku) 05:SELF_DESTRUCTに置く
西尾泰和 11: FLOATERに置く
kareya(haiku) 13:PROGRAM_ERRORに西尾さんのBITを。
西尾泰和 ああ、そうか。ZAPとREPLACEの奪い合いかと思ったが違ったか。完全に忘れてた。10: ZAPに置く
kareya(haiku) 02:BUGに置く
01: WORM |[N] 02: BUG |(K) 03: COPY |(K) 04: ACQUIRE |(K) 05: SELF_DESTRUCT|(K) 06: BIT_MOVER |[N] 07: FUTURE |[N] 08: POWER_SURGE |(K) 09: REPLACE | 10: ZAP |[N] 11: FLOATER |[N] 12: COPY |[N] 13: PROGRAM_ERROR|[N] 14: DELETE |(K)
西尾 WORMを実行します 07: FUTUREに[N]を追加
kareya(haiku) BUGが発動してライフは9:9
西尾 COPY?(y/n)
kareya(haiku) y
西尾泰和 WORMでどこにおく?
kareya 03:COPY・・・は、無理なのか
西尾泰和 ぬぬぬ
kareya(haiku) 後に置かれてるからその場で実行とかはありえませんよね?
西尾泰和 1つ目のビットが終了して次に今置かれたビットが実行されるのか。03:COPYに置くのは無理じゃない(無理というルールはない)し、 1つ目のビットの実行中に2つ目のビットが置かれたらそれは実行対象になるなぁ
kareya(haiku) もしこれでいいなら、あとは完全手順で勝ちなので。WORMをCOPYに置かれなかったから疑問がついた
西尾泰和 ライフポイントの増減のないループは3回まで制限があるけどこれは増減があるからいくらでも繰り返せる、でSELF_DESTRUCTでとどめを刺されるわけですな。ううむ。負けた。
kareya(haiku) おおー。勝てたー。ばんざーい・・・てこれでいいんですか?
西尾泰和 そこまで読めてなかった僕の負けw COPY + WORMコンボで負けた、と。