hatena

<body>
*1224360218*[最中限]最中限オンライン2.0 妄想設計
- Google App Engineはやめる
-- ソケット使えないから
- 人間が操作するクライアントはFlash
-- AIRとかPyGameも検討したけど、インストールレスにしたい
- プロトコルはXMLベース
-- クライアントがFlashだったらそれが楽
-- C++とかでAI書く人もlibxmlくらい使えばいいんじゃないかと
--- 自分で使って作ってみて「これはやりづらい」と思ったらより自前パースが容易なプロトコルを用意してもOK。その際はサーバが違うポート番号で待ち受ければいい。
- ターン開始時に、クライアントに通知(AI/Human区別なし)
- 制限時間が設定されている場合、それまでに返答がなければ勝手にランダムに出す。
- ルール違反(持っていないカードをだすなど)も基本的にランダムに出したことにする。
-- AIのバグで人間が途中まで進めたゲームを中断されると不快だから。
-- あ、でも純粋にAI同士の戦いの場合はその場で負けにしてもいいか。
- チャット情報は人間には送らないと行けないが、AIには不要
-- もしくは「送っては行けない」?結託防止のために。
-- まぁとりあえず実害のあるAIが出てくるまでは規制を厳しくしない方が面白そうだ。
- 急かせるメッセージ
-- 他のクライアントがカードをだしました、というメッセージは人間クライアントでは伏せたカードをだすために必要
-- 制限時間のない勝負で「AIが人間様を待たせないように、人間が出したらすぐに自分も出す」という設定もありかと。特にモンテカルロ系は時間をかければかけたほど強いから人間が悩んでいる間はAIも考えたい。
- プロトコルを記述する標準的な方法はあるのだろうか。
- とりあえず状態遷移図を書く。

-----
- <= AIを指定してゲーム開始要求 or
- <= 人間の対戦者まち
- <= 「人間の対戦者まち」の所に参加する
- => 参加者が来た通知
- <= ゲーム開始要求
- => タイムアウト or
- => A: ターン開始通知(with もろもろのステータス情報)
- <= カードを出す
- => (14回Aを繰り返す)
- => ゲーム終了通知

-----


参考文献
- <a href='http://journal.mycom.co.jp/articles/2008/07/18/protocolbuffer/'> 【ハウツー】XMLはもう不要!? Google製シリアライズツール「Protocol Buffer」 (1) 構造化データをバイト列に変換するための新技術 | エンタープライズ | マイコミジャーナル</a>
-- 面白いけど、RubyやActionScriptで使えないんじゃなぁ。

*1224403658*[最中限]どうすれば強くなるか
<a href='http://saichugen-online.appspot.com/'>最中限オンライン(Saichugen Online)</a>でどうすれば勝てるようになるのかについて書こうと思ったのだけど、まず勘違いをしてほしくないのは「こうすれば勝てる」という戦略はまだ明確にはわかっていないということ。出来てから日が浅いゲームだからね。だからここで話すことは「今現在は僕はこうやったら勝てると思ってプレイしている&ランダムプレイヤー相手ならそこそこ勝てている」ということにすぎない。

1: まず、今までこのゲームのルールを教えた人のうちで6人くらいが「これカードカウンティングが効くよね」と指摘している。つまり、13が後何枚残っているのか、1はどれくらい残っているのか、というのを数えて覚えておけば有利なんじゃないか、という指摘。覚えないよりは覚えた方が有利だろうとは思うけども、現状僕もAIも全く覚えていないのでとりあえずカードカウンティングは必須ではない。

2: 情報科学若手の会では「両端のカードが切り札的なものだから最後に残した方がいい」というような認識をしていた。だけど今ランキング2位のtmatsuoさんに「大きいカードは終盤で使いにくいから、むしろ前半で積極的に使ったほうがいいのでは」と指摘されて確かにその通りだと思った。今では手札にたとえ3枚13があっても第5ラウンドまで持ち越すことはない。

3: ラウンドでの得点が同点の場合、それが中央値だから同点の人がその点数を得る。このルールをいまいち有効活用されていない気がする。

例えばこういうシチュエーション
<img src="http://gyazo.com/c152d5c2384ed2f9d13109a5cd9e4d84.png">
この3ターン目は自分以外に7点ずつ取られる展開を避けたかったので7を出してかぶせに行っている。もちろん13や1みたいな「自分が取る確率が低いカード」を出して誰かに点を取らせるのもアリ。このときは真ん中あたりのカードが余っていたんだ。

ラウンドスコアを重ねる戦術を2回使って「よし勝った」と思ったら最後の最後にAIが「ゲームスコアを重ねる」手を出して全員引き分けになった例: http://saichugen-online.appspot.com/game/1842/

4: あとは、思惑と反対のことが起きたときにどれくらい被害が大きいか、を考えるということかな。たとえば第1ラウンドの2ターン目までで誰かが合計14点を取ったとしよう。あんまり点を取りたくないわけだけど、ここで「点を取りたくないから端のカード」って言って13を出すのと、4くらいを出すのと、どっちが「運悪く通ってしまった場合の被害」が大きいか。
たとえば誰かが1ターン目で13を取っていて、自分なるべく点を取りたくなくて、手札が3,5,7,9,11の場合に何から出すか。意見が分かれるところかもしれない。僕なら11を出す。一番通る確率が低いのは3, 11だけど、通ってしまった場合にはさらにカードをだして14点を越えなきゃいけないことを考えると、3が通ってしまったら11を通さないと行けなくて成功率が低いが、11が通ってしまった場合は7を通すのでもOKだから、最初は11を出したほうが安全。僕ならそうする。ただもちろん「5点までなら取っても大丈夫、でもなるべく取りたくない」というシチュエーションなら3を先に出す。通ったら11を出す。通らなかったら5を出す。

5: 書き忘れていたので追記。3ターン目重要。4,5ラウンド重要。逆に言うと1,2ターン目と1,2,3ラウンドは比較的重要度が低いので、ここでいらないカードを捨てたりしている。今は序盤で「カードの分布が均等になるように」出している。具体的には同じ数字で重なっているカードを早めに始末している。

-----

とりあえず現状で自分はどうしているかという話をつらつらと書いてみた。

まぁ、僕の対人戦が弱いのはこういうのの裏をかかれるからなのかな~と書いていて思った。

*1224415186*スパムトラックバックの削除
>||
1: トラックバックが来ましたメールが来る
2: リンクを押してそのエントリーを表示する
3: 編集ボタンを押す。その場で編集になる
4: 詳細編集リンクを押す
5: 問題のスパムトラックバックのチェックをONにする
6: 削除ボタンを押す
||<

んー。手間だ。

>||
1: トラックバックが来ましたメールが来る
2: 「削除するにはこちら」リンクをクリックする
3: 本当に削除しますか?のOKを押す
||<

くらいに短縮できそうな気がするけどだめなのかなぁ。ちなみにメールのリンクをクリックした時点で即削除にしないのはGETで削除できるともしかしたら危険かなぁという日和見なので一発削除もサポート出来るかもしれない。

*1224415591*不眠対策
不眠対策に1万歩歩いてきたらちょっと眠いんだけど、まだ8時だよなぁ。寝るべきか寝ざるべきか。って寝るか。寝られないまま会社に行くよりは朝3時頃に目を覚ます方がまだマシ。寝ないで会社に行くと本当に辛いからなぁ。

*1224434402*お茶
丸い。

f:id:nishiohirokazu:20081020014017j:image

想像以上に大きく広がった。

f:id:nishiohirokazu:20081020014046j:image

「きれいだろ、、、お茶なんだぜ、それ」(達也)
</body>
<comments>
<comment>
<username>Voluntas</username>
<body>> プロトコルを記述する標準的な方法<br>asn.1<br><br>http://pyasn1.sourceforge.net/</body>
<timestamp>1224360564</timestamp>
</comment>
<comment>
<username>soundkitchen</username>
<body>そういう時こそ、「無限の羊@beinteractive 」とかどうでしょう?</body>
<timestamp>1224418292</timestamp>
</comment>
<comment>
<username>SHNSK</username>
<body>まぁ,対人戦と対ランダムでは全然戦略が違うからねぇ.</body>
<timestamp>1224685954</timestamp>
</comment>
</comments>

はてなダイアリー 2008-10-19