pythonでテキサスホールデムのシミュレーションコードを作成しました。
コードは以下のgithubに置いています。
https://github.com/T-A0K1/texas_holdem_python
おいおい更新していきますが、まずは作ったところまでをメモがわりに記載しておきます。
~目次~
1. 概要
大きく以下の要素で作成しています。
- 52枚の山札を作成
- 7枚のカードの役を返す
- 2つ以上のハンドでの勝負の結果を返す。
2. カード表記について
カードは2〜3桁の数字で表現し、末尾の1桁がマーク、残りが数字です。 また、エース(1)は14としています。 [例] 141:エースでマークが1 132:K(キング)でマークが2 33:3でマークが3 フラッシュの5枚:141, 21, 31, 51, 71 フルハウス:141, 142, 144, 32, 33
3. 役について
judge_hand()等では、役を以下の数字で表現して居ます。 8: straight flush 7: 4card 6: full house 5: flush 4: straight 3: 3card(three of a kind) 2: 2 pair 1: a pair 0: high card
4. サンプル実行例
サンプル1
githubにもあげたサンプルを回すと以下のような結果が返ってきます。
player0's hand: [91, 44]
player1's hand: [42, 23]
field card: [134, 144, 24, 114, 142]
player0's role: [5, 14, 13, 11, 4, 2]
player1's role: [2, 14, 2, 13]
win player: [0]
プレイヤー0はハンドの数字が9,4でマークが1,4。
プレイヤー1はハンドの数字が4,2でマークが2,3。
場のカードがK, 1, 2, 11, 1でマークが4,4,4,4,2です。
プレイヤー0はフラッシュ(5)で、構成数字が、14, 13, 11, 4, 2。
プレイヤー1は2ペア(2)で、14と2のペアでキッカーがKになります。
この結果、勝者はプレイヤー0(win player: [0])となります。
サンプル2
これは、ジャッジハンドを10000回回した結果になります。
Counter({1: 4414, 2: 2335, 0: 1732, 3: 527, 4: 454, 5: 291, 6: 234, 7: 7, 8: 6})
1(ワンペア)は44%, 2(2ペア)は23.3%、また、フルハウス(6)は2.34%となっています。
試行回数が少ないので少しずれて居ますが、1000000回ぐらい回すと、だいたいwikiに記載の確率と同じになります。
役 | 組み合わせ | 確率 |
---|---|---|
ストレートフラッシュ | 4324+37260 | 0.031% |
フォー・オブ・ア・カインド | 224848 | 0.17% |
フルハウス | 3473184 | 2.6% |
フラッシュ | 4047644 | 3.0% |
ストレート | 6180020 | 4.6% |
スリー・オブ・ア・カインド | 6461620 | 4.8% |
ツーペア | 31433400 | 23.5% |
ワンペア | 58627800 | 43.8% |
ハイカード | 23294460 | 17.4% |
合計 | 133784560 | 100% |
5. 今後
色々なシミュレーションやAIの開発が目標です。