【ドミニオン】Empires初体験
延期に次ぐ延期でようやく英語版が発売されたドミニオンEmpiresをプレイした。というわけでね pic.twitter.com/TBE0xFcJTT
— AuTo (@AuToPP) July 9, 2016
まだ全てのカード類を触ったわけではないが、何回かプレイしてなんとなく印象に残ってるカード・イベント・ランドマークについて書き残す。
思いつきな感想の上にカードの説明にすらなってないものもあるのであしからず。
カード類の日本語説明はドミニオンの日々よりお借りしました。
続きを読むドミニオン日本選手権2016参加レポート
もう1週間も前の話ですが、昨年に続き今年もドミニオン日本選手権(午前予選)に参加しました。
正直なところ今年は何一ついいところが無く終わってしまいとても悲しいのですが、戒めのためにブログには残します。
1回戦
- サプライ: 地下貯蔵庫 工房 村 改築 密偵 倒壊 案内人 山守 掘出物 語り部
- イベント: 移動遊園地 交易
- 4番手
- 初手: 銀 - 銀
手番が重要そうな場に関わらず4番手、しかも1番手と2番手が2人とも掘り出し物スタートでいきなり死にたくなる。
それでも心を折れずに2順目から交易で銀貨を増やしつつ、改築・掘り出し物・語り部を入れてデッキを作る。
- 山札3枚(4金以上確定)の時に7金出して、移動遊園地・交易で獲得した銀貨2枚をトップに置いて次ターン属州確定
- リシャッフル直前に語り部で掘り出し物をプレイして金・銅を獲得した上で7ドローして、即引いた金貨を改築で属州獲得 & 8金出して属州購入
と、やりたいことを一通りやったものの、自分は最後の属州を7金で買えず、その後の1番手が買って終了して2位。
初手の銀・銀は思考停止しすぎたが、2巡目に語り部購入と屋敷2枚交易ができる期待通りの結果だったので、これ以上順位を上げる手が思いつかない。 最後の手番で7金なく8金をドローするための徳を貯めてなかったのがよくなかった、くらいしか……
2回戦
- サプライ: 礼拝堂 木こり 役人 庭園 魔女 法貨 道具 複製 沼の妖婆 遠隔地
- イベント: 立案 探索
- 1番手
- 初手: 立案(道具に廃棄トークン)- 道具
せっかくの1番手と思ったら、今度はどちらかと言うと回りの様子を見てから動きたいサプライ。
悩んだが考えることを少なくするために立案・トリプル道具で入る。3人魔女に行ったが、自分は頑なに道具を打ち続ける。
途中で呪い2枚を金貨に変えたり、道具を購入して呪いを廃棄したり。
結局2番手が役人と木こりで庭園ルートに1人に行ったために勝利(そりゃそうだ)。
自分は呪いは受けたものの、それなりに属州を購入したり早めに遠隔地を2枚酒場に送ったりしてなんとか2位。
思考単純化のために立案・道具スタートは変えないとすると、礼拝堂をどこかで入れればよかったのか。
礼拝堂を買うターンと礼拝堂を使うターンで2手使うとしても、最大で4点取り戻してかつその後の回転がよくなってもう1枚くらい属州を買えたはず?
あと単純な話、もう少し庭園をカットしていれば勝てたかもしれない。
ついでに(勝敗に直接関係はないが)買った公領のうち1枚は遠隔地でも間に合った。
……特殊勝利点下手くそすぎるのでは
3回戦
今回の戦犯。
サプライ見た瞬間に:
- 巨人が飛び交うから場が遅くなる
- 遅くなる上に偵察隊がいるから教師・門下生が間に合う
- 自分は堀を毎ターン保存すれば巨人アタックを受けない
- 最後は堀に+1アクション、祝祭に+1カードを付けて巨人適当にぶっ放させばなんとなる
と考えて、初手を決定。しかし現実は:
- 1人が保存と相性がいい鍛冶屋ステロになり進行速度が上がる
- 巨人は2人いたが1人は消極的だったので、そこまで荒れず
- そもそも教師が遅い
ということで、途中から追いつくのが絶望的な状態へ……
一応、教師・門下生でやりたいことはやれたものの、単純に間に合わずに4位。
数時間後の自分↓
3回戦はなにもかもダメ。あの時の俺は惨たらしく死んでほしいレベル(実際に無惨な死を遂げたけど)
— AuTo (@AuToPP) July 2, 2016
あの時の自分への殺意は置いておくとして、予選突破するにはどうすればよかったか。
4回戦へ希望を繋ぐという意味では、慣れないことや博打な手を打つよりは鍛冶屋ステロを取るべきだった(これも金貨を廃棄されたら死亡だが……)。
なんにせよ、この時点で大会VP6ptなので2日目進出は絶望的に。
4回戦
呪いの森が不穏な雰囲気を漂わせていたが、全員予選突破は絶望的な卓だったのでアタックは気にせずマッタリとプレイするムードに。
今度こそ手番が大事な場で1番手をとなったので、カササギ・魔除けでカササギを増やしつつカササギがドローするための銀貨を増やす方針へ。
途中に海路でカササギに+1buyを付けて、もし5枚以上カササギを獲得できたら鍛錬で+1coinも付けることを考えていたのだが……
3番手も魔除け・カササギスタートとなった結果、最終的にカササギは1番手の自分に3枚、3番手に7枚で分配された。どうしてこうなった……
当然、3番手は途中でイベントを使って+1buyと+1coin両方のトークンをカササギに置いて、16coin・Nbuyを2回決めてゲームエンド、自分は2位。本当にどうしてこうなった……
魔除けの使い方はだいたい同じ(屋敷を廃棄した後は+1coin or 銀獲得)で、明確な違いといえば3・4Tにカササギをプレイしてカササギを獲得できたか否かだったが、こんな大きな差になるとは思わなかった。
方針は間違っていなかったことはわかったが、それにしたってどうすればいいんだよこれ……
まとめ
ということで 2-2-4-2 の大会VP9ptであっさり予選敗退。
去年は「次は2日合わせて3勝したい」とか言ってたのに、1回も1位を取れないという体たらく。
3戦目は全面的に自分が悪いのでいいとして、1戦目と4戦目のどちらも勝てなかったのは本当に辛い……
2年連続出場して見えてきた反省点としては
- 予選だろうが本線だろうが3戦目で自重できずによくわからんことをする
- 4人戦の荒れ場・特殊勝利点が壊滅的に苦手(特殊勝利点を取らないで負ける)
- 細かい選択の良し悪しがわかっていない(例: 魔除けの選択)
などがあるので、この辺はなんとかしたい。
そして(もしあれば)来年こそは本戦に進みたい……
最近見た10個の007の感想
この2ヶ月で、なぜか007を10作品も見たので、感想のようなものを垂れ流してみる。 バラバラなのは自分で見た順だから。 見た順がバラバラなのは、特に理由はないです。
あとネタバレは特にないはず。
ゴールデンアイ
- 出版社/メーカー: 20世紀フォックス・ホーム・エンターテイメント・ジャパン
- 発売日: 2015/10/07
- メディア: Blu-ray
- この商品を含むブログを見る
で、20年経ってこの前イタリアに行ったとき、フライト中の映画にゴールデンアイがあることに気づいて、かつての自分の悲しさを弔うために見ました。
肝心の映画の方ですが、娯楽映画だなってのが第一印象でした。良くも悪くも。 007全然知らないんで、もうちょっとシリアスだと思ってたんですよ。
これを見た後になんとなく他の作品が気になって、帰国後に色々と見てみることに。
カジノ・ロワイヤル
- 出版社/メーカー: 20世紀フォックス・ホーム・エンターテイメント・ジャパン
- 発売日: 2015/10/07
- メディア: Blu-ray
- この商品を含むブログ (1件) を見る
でもダニエル・グレイグかっこよすぎ。アクションかっこよすぎ。オープニングもエンディングかっこよすぎ。
友人が「カジノ・ロワイヤルの欠点は他のグレイグボンドが見劣りすること」って言ってたのも納得。
慰めの報酬
- 出版社/メーカー: 20世紀フォックス・ホーム・エンターテイメント・ジャパン
- 発売日: 2015/10/07
- メディア: Blu-ray
- この商品を含むブログ (4件) を見る
友人が「カジノ・ロワイヤルの欠点は他のグレイグボンドが見劣りすること」って言ってたのも納得。
トゥモロー・ネバー・ダイ
- 出版社/メーカー: 20世紀フォックス・ホーム・エンターテイメント・ジャパン
- 発売日: 2015/10/07
- メディア: Blu-ray
- この商品を含むブログを見る
あとボンドカーはこれが一番印象深い。 あのデバイスは時代を先取りしてたと思う。
ダイ・アナザー・デイ
- 出版社/メーカー: 20世紀フォックス・ホーム・エンターテイメント・ジャパン
- 発売日: 2015/10/07
- メディア: Blu-ray
- この商品を含むブログを見る
黒幕の正体になかなか気付けなかったので、気付いた時には「……ああ!」ってなりました。 そういう意味では他のブロスナンボンドと比べて凝ってる気がする。
ロシアより愛をこめて
- 出版社/メーカー: 20世紀フォックス・ホーム・エンターテイメント・ジャパン
- 発売日: 2015/10/07
- メディア: Blu-ray
- この商品を含むブログを見る
おもしろいけど、ちょっと地味かなぁと(ダイ・アナザー・デイの後に見たのがよくなった)。
死ぬのは奴らだ
- 出版社/メーカー: 20世紀フォックス・ホーム・エンターテイメント・ジャパン
- 発売日: 2011/04/22
- メディア: Blu-ray
- この商品を含むブログを見る
この作品はボンドガールが人気らしいけど、俺が一番好きなのはあの高笑いです。 あのどうあがいても印象に残るあの高笑い。
あとポール・マッカートニーのオープニングもいいですね。
ユア・アイズ・オンリー
- 出版社/メーカー: 20世紀フォックス・ホーム・エンターテイメント・ジャパン
- 発売日: 2015/10/07
- メディア: Blu-ray
- この商品を含むブログを見る
正直、これはあまり印象に残ってない。 ムーアのボンドが俺の中であまりパッとしなかったのが要因かも(「死ぬのは奴らだ」もボンドより高笑いが印象に残ってる)。
リビング・デイライツ
- 出版社/メーカー: 20世紀フォックス・ホーム・エンターテイメント・ジャパン
- 発売日: 2015/10/07
- メディア: Blu-ray
- この商品を含むブログ (1件) を見る
自分の中では、すごいバランスがいい作品。 アクションもあるし、秘密兵器もあるし、敵キャラも魅力的。 ストーリーもちゃんとあって、BGMはOPだけでなく敵キャラのテーマ(?)もかっこいい。
そしてなによりダルトンの演じるボンドがいい感じに渋い。 グレイグよりは人間味があるけど、ムーアやブロスナンほどチャラくない。 ボンドの中ではダルトンが一番好きですね。
消されたライセンス
- 出版社/メーカー: 20世紀フォックス・ホーム・エンターテイメント・ジャパン
- 発売日: 2015/10/07
- メディア: Blu-ray
- この商品を含むブログを見る
……でも、一般にはあまり評価が高くないらしく、ガッカリ。 確かに他と雰囲気は違うし、やたらとエグイ描写が多いからはオススメしづらいけど、そんな言うほど悪くないと思うんだけどなぁ。
ここまで見た感想
まず言いたいのは、なんでティモシー・ダルトンの007がなんで2作だけなんですかね。 ダルトンボンド作品が少ない理由は、まあ色々あったらしいけど、そんなのどうでもいいから作って欲しかった……
好きなのを3つ選ぶなら
上2つはすごい悩むんだけど、オープングとエンディングのかっこよさでカジノ・ロワイヤルの方がギリギリ上かな。
で、これから残りの作品どれだけ見るつもりかというと、とりあえずダニエル・グレイグのが現在あと2作出てるようなので、それは近いうちに見ます。 でもダルトンやグレイグのシリアス寄りな雰囲気が好きなので、他の作品を見るかはちょっと怪しい。
もしダルトンの作品がまだあったらそれも見る……と思ったけど、たぶんこの記事書く前に見てるでしょうね。 ほんと、なんで2作しかないんだ。
ちなみにどうやって見てるかというと、TSUTAYA のレンタルか、Amazon のプライムビデオです。 プライムビデオは人を駄目にする危険なサービスだと思います。
ドミニオン初心者4人に勉強会を開いた話
最近全然ブログ更新していなかったので、年を越す前に何か書くネタは無いか考えたところ、1ヶ月半前に知り合い相手にドミニオン勉強会を開いたのをまだ記事にしていなかった。
いわゆる「初心者にドミニオンを好きになってもらう方法」の一例ということで一つ。
なぜ勉強会をやったのか
幸運なことに、4月からほぼ週1回ペースでドミニオンをオフラインプレイできる環境にいる。 ただ、その環境というのはわりと力量差が激しく、特に自分と親しい数人が所謂初心者で、いつも3 or 4位になっていた。
経験を積むのがドミニオンで強くなる最もわかりやすい方法なのは百も承知だが、それにしたって知らないといけないことというのはある。 (ここで言う知らないといけないこととは「1Tに村購入はほぼ弱い」「属州残り4枚以下の時に5金出たらアクションより公領を買う」とかのレベルである)
初心者ではある彼らは「ドミニオン勝てないなー勝てるようになりたいなー」と興味自体は示してくれていたが、このままの状態が続くと、やがてドミニオンを嫌いになってしまうのではないか。 それはなんというかこう、嫌だ。 しかしだからと言ってナンタラマニアックスとかを一方的に渡すのも何か違う気がする。 そう考えて、ちょっとでもドミニオンを面白く感じてもらうために、未熟ながらも彼らを相手に実体験ベースで学んでもらう勉強会を提案し、実際に開催することにした。
勉強会でやったこと
勉強会の概要は以下の通り。
- 初心者4人を招待
- 意図的なサプライを6つ用意して4人にプレイしてもらう
- それぞれにコンセプトや教訓めいたものがある
- 一部、変則ルールを設けた
- 試合前に1人にだけ「こうするといいよ」というヒントを教える
- AuToはよほどの悪手を打たないかぎりは見てるだけ
- 試合後にAuToが偉そうなことを言いながら感想戦
用意したサプライはだいたいこんな感じ。 (詳細は長くなるので、この記事では省略。いつか書くかも)
- 村・鍛冶屋・玉座の間のみの変則サプライ
- 鍛冶屋ステロで十分
- 一般的に弱い or 輝く場面が極めて限定的なカード10種
- 金ステロで十分
- よろずや、大使館、商人ギルドなどのステロ強カード10種
- 強いステロカードの強さを実感してもらうのが目的
- 大使砲サプライ
- アタックコンボ場にしたい + 三月類さんの動画に触発された結果
- ステロカード vs 玉座・執事・橋
- 決まると気持ちいいコンボと、玉座玉座でアクションを増やせることの実体験
- 冒険カード & イベントによる獲得メインのコンボサプライ
- 当時、冒険サプライが多かったので対策ということで
前半と後半でステロ場とコンボ場を分けたのは、長丁場の勉強会にメリハリを付けるため。 昼過ぎから休憩を挟んで18-19時くらいまでかかる想定で、実際その通りになった。
勉強会当日に起きたこと
4戦目以外はだいたい当初の意図通りになり、ヒントを教えた人が勝った。
4戦目は大使砲が完成する前に終了。 これはサプライというか意図がよくなかった。 (4人戦と2人戦の違いを甘く見過ぎた……)
5戦目はヒントを教えなかった3人のうち1人が意図を見抜き、ヒントを教えた人よりも先に玉座・執事・橋を完成させる。 予想外ではあったが、コンボを決めた側が勝つ事自体は当初の意図通り。
勉強会後にどうなったか
4人のうち少なくとも2人は明らかに強くなっていた(というか純粋なステロ戦だと偶に負ける)。 1人は、勉強会後に自分でドミニオンを3パック購入するくらいにはハマっていた。 また「別の友人とやるときに勝てるようになった」とも言ってくれた。
定期的にネットで「どうやって初心者をドミニオンに誘い込むか」みたいな話題を見かける。 小規模ではあるが、この勉強会はその目的を達成できたと思う。 この方法が全ての初心者に通用するわけではないし、たぶんコスパも悪い(サプライ準備も当日もめっちゃ疲れた)が、なんだかんだいって自分も楽しかったので良しとする。
尻切れトンボな終わり方ではあるが、うだうだしてると年が変わってしまうので、よいお年を。
Valgrindのエラーメッセージだけを出力したい
最近、プライベートではなぜかCを書くことが多くて、その過程で今更ながらValgrindを使うようになった。
で、使っているうちにValgrindのエラーメッセージだけを表示したくなったので、そのやり方をメモ。 環境は以下のとおり。
一応明記しておくと、Valgrindのバージョンは3.10.0。 シェルはbashなので、それ以外のシェルの場合は適宜読み替えるように。
ネタバレ
--log-fd
オプションとリダイレクトを組み合わせればいい。
Valgrindの使い方
例えば以下のCコードsample.c
を考える。
#include <stdio.h> #include <stdlib.h> int main(void) { puts("hello"); malloc(42); // 特に意味もなく malloc して…… fputs("goodby\n", stderr); return 0; // free せずに終了 }
もちろんこのコードはコンパイルして実行することができる。
$ cc -Wall -g sample.c && ./a.out hello # 標準出力 goodby # 標準エラー出力
しかし、sample.c
は6行目で(無意味に)malloc
した領域を解放せずにプログラムを終了している。
Valgrindを介して実行すると、このようなメモリリークを検出できる。
--leak-check=full
オプションを付けると、メモリリーク箇所の詳細な情報もわかる
$ valgrind --leak-check=full ./a.out ==6865== Memcheck, a memory error detector ==6865== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al. ==6865== Using Valgrind-3.10.0.SVN and LibVEX; rerun with -h for copyright info ==6865== Command: ./a.out ==6865== hello goodby ==6865== ==6865== HEAP SUMMARY: ==6865== in use at exit: 42 bytes in 1 blocks ==6865== total heap usage: 1 allocs, 0 frees, 42 bytes allocated ==6865== ==6865== 42 bytes in 1 blocks are definitely lost in loss record 1 of 1 ==6865== at 0x4C2AB80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==6865== by 0x400614: main (sample.c:6) ==6865== ==6865== LEAK SUMMARY: ==6865== definitely lost: 42 bytes in 1 blocks ==6865== indirectly lost: 0 bytes in 0 blocks ==6865== possibly lost: 0 bytes in 0 blocks ==6865== still reachable: 0 bytes in 0 blocks ==6865== suppressed: 0 bytes in 0 blocks ==6865== ==6865== For counts of detected and suppressed errors, rerun with: -v ==6865== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
definitely lost≒メモリリークしていると思えばいい。
今回はデバッグフラグを付けてコンパイルしているので、malloc
した場所(sample.c:6
)まで出力されている。
-q
オプションをつけるとエラーメッセージのみが出力される。
$ valgrind -q --leak-check=full ./a.out hello goodby ==7135== 42 bytes in 1 blocks are definitely lost in loss record 1 of 1 ==7135== at 0x4C2AB80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==7135== by 0x400614: main (sample.c:6) ==7135==
Valgrind自体は他にも色んな用途があるようだが、ここではとりあえずメモリリーク検出ツールとして扱う。
やりたいこと
make
やスクリプトでまとめてチェックするような場合、「プログラム自体の出力を全て抑制して」「Valgrindの出すエラー報告だけを表示」したくなる。
つまり以下のsimple_leak_check
コマンドが欲しい。
$ simple_leak_check ./a.out # hello も goodby も出力しない ==7135== 42 bytes in 1 blocks are definitely lost in loss record 1 of 1 ==7135== at 0x4C2AB80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==7135== by 0x400614: main (sample.c:6) ==7135==
「Valgrindのエラー報告だけ」という部分は、先述のValgrindの-q
オプションで解決済みなので、問題は前者である。
試した方法
ダメな方法: 単純なリダイレクト
Valgrindのメッセージは標準エラー出力に出力されるので、標準出力を/dev/null
にリダイレクトすればいい……とはいかない。
これだとsample.c
の7行目のような、プログラム中の標準エラー出力への出力が混じってしまう。
$ valgrind -q --leak-check=full ./a.out >/dev/null goodby # <- ./a.out 中の stderr への出力 ==7613== 42 bytes in 1 blocks are definitely lost in loss record 1 of 1 ==7613== at 0x4C2AB80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==7613== by 0x400614: main (sample.c:6) ==7613==
「メモリチェックしたいプログラムが出力するのがおかしい」と言いたくもなるが、この時チェックしていたのは自作のテストフレームワークという、本質的に出力も込みのプログラムだったので、なんとかしたいところ。
一応大丈夫な方法: --log-file
オプションの使用
Valgrindのメッセージをファイルに出す方法がある筈と思って調べたら、--log-file
オプションがあった。
標準出力と標準エラー出力を両方共/dev/null
へリダイレクトし、Valgrindのエラーメッセージは適当なファイルへリダイレクトしてから、後で表示すればよい。
$ valgrind -q --leak-check=full ./a.out \ > --log-file=/tmp/log.txt \ # Valgrind の出力をファイルに一時保存 > >/dev/null 2>/dev/nul # プログラム自体の出力は投げ捨てる $ cat /tmp/log.txt # 終了後に、保存しておいた出力を表示 ==8057== 42 bytes in 1 blocks are definitely lost in loss record 1 of 1 ==8057== at 0x4C2AB80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==8057== by 0x400614: main (sample.c:6) ==8057==
一応できた。
でもこの方法の何がイケてないって、/tmp/log.txt
を作ってるのがイケてない。
別にパフォーマンス云々やディスク云々を気にするわけではないが、なんか腑に落ちない。
もうちょっとスマートにできないか。
腑に落ちた方法: --log-fd
オプションの使用
ヘルプを眺めてたら、--log-file
オプションのすぐ近くに --log-fd
オプションがあることに気づく。
以下、抜粋。
$ valgrind --help (中略) --log-fd=<number> log messages to file descriptor [2=stderr]
--log-file
がファイル名を指定するのに対して、--log-fd
はファイルディスクリプタの番号を直接指定する。
最初は「なんだそりゃ」と思ったが、これとリダイレクトを組み合わせれば、中間ファイルを使わずに目的を達成できる。
$ valgrind --log-fd=3 \ # Valgrind の出力をファイルディスクリプタ3番に > -q --leak-check=full ./a.out 3>&2 \ > 3>&2 \ # 3番を標準エラー出力に向ける > >/dev/null 2>/dev/null # プログラム自体の出力は投げ捨てる ==8729== 42 bytes in 1 blocks are definitely lost in loss record 1 of 1 ==8729== at 0x4C2AB80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==8729== by 0x400614: main (sample.c:6) ==8729==
今度こそできた!
ここではファイルディスクリプタは3を使っているが、3以上ならなんでもいい(はず)。
1つ落とし穴があり、--log-fd
は実行するプログラム(ここでは./a.out
)よりも前に置かないと、何故か無視される。解せぬ。
オマケ: --error-exitcode
オプション
デフォルトではValgrindの終了ステータスはエラーの有無に関係なく0となっている。
これではスクリプトで処理するときに何かと不便だが、--error-exitcode
オプションで、メモリリークを1つ以上検出した際の終了ステータスを指定できる。
というわけで、目標だったsimple_leak_check
コマンドは次のようになる。
alias simple_leak_check= 'valgrind --log-fd=3 -q --leak-check=full\ 3>&2 >/dev/null 2>/dev/null'
まとめ
Valgrindのエラーメッセージのみを出力する方法を述べた。
正直、--log-file
オプションで中間ファイルを生成する方法でもいい気がするが、一生使う機会が無いと思っていた「3以上のファイルディスクリプタを使ったリダイレクト」が役に立つ形で使えたので、つい記事にまでしてしまった。
というか--log-fd
オプションのこれ以外の用途が思いつかないけど、何かあるのかしら。
ちなみに上のsample.c
は、コンパイル時に-O2
オプションを付けるとmalloc
呼出し自体が最適化によって削除される可能性があるので注意(?)*1