スリーカードポーカーのゲームを作ってからGUI化に取り掛かりましたがすっかり止まっています。
ボタン処理が難しいんだもん。
作りながら覚えればいいのですが、ゲームもやるのも好きなのでそっちばかりやってしまいなかなか進みません。
GUI化はいったんおいておきまして今回はシミュレータの改良です。
ゲームと合わせてシミュレータも作ったのですが勝負が全ツッパなので高い確率で資金が底をついてしまいます。
$1000持ちでスタートしていますが数百回で資金がなくなります。
masashi@PC-ubuntu:~/Three-card-poker$ python3 simulater.py You are first given $1,000. Three card poker simulator start. The simulator trials 1,000 times. You'll bet ante $10 and pair plus $10 all the time. You could play the game 289 times. === Probabliry of winning or losing === Player 161 wins. (55.7%) Dealer 128 wins. (44.3%) Draw 0 times. (0.0%) === Percentage of Players all hands === High card! 76.471% One Pair! 16.609% Flash! 4.152% Straight! 2.768% === Percentage of Players win(161 times) hands === High card! 63.975% One Pair! 24.224% Flash! 6.832% Straight! 4.969% You finally got $10
10回に1回位は勝ち越せてたかな。
チップがかかっている以上無駄な消費を減らすためにオリ、いわゆるフォールドの処理を追加しようと思います。
スリーカードポーカーにも定石があり、Q、6、4以下のハイカードは降りるべきとされています。
なんでそうすべきかの説明文を読めていないので根拠がわかりませんがいろんなサイトで出てくるので一旦これに乗っかります。
降りる手札を判別する
ハイカードの中から特定の数以下の手札を判別します。
本当は手札評価はビット演算でスマートにやるべきなんでしょうがパターンもそんなに無いので組み合わせでぱぱっとやります。
Q、6、4以下の手札を出す関数です。
条件分を何パターンか試しましたが、andで全条件を判定してしまうのがうまくいきました。
pokerappは自作クラスです。
トランプのデッキ作成からカード配布、役判定まで作成済みなので今回の処理も簡単に作れました。
関数を使いまわせて便利ですね。
def Foldcheck(): deck = pokerapp.Deck() deck.shuffle() player = pokerapp.Handout(deck) if pokerapp.Handcheck(player).get_role()[0][0] == 'High card!': fhand = pokerapp.Judge(player)[1] if fhand[2] <= 12 and fhand[1] <= 6 and fhand[0] <= 4: print(fhand, 'fold')
実践
ちょっと回してみます。
>>> for _ in range(101): Foldcheck() ... [3, 5, 12] fold [2, 3, 11] fold [2, 6, 11] fold [2, 3, 5] fold [4, 5, 11] fold [2, 3, 10] fold [2, 3, 7] fold [4, 6, 10] fold [2, 3, 5] fold [2, 3, 7] fold [2, 3, 9] fold [4, 6, 11] fold [2, 3, 8] fold [2, 3, 10] fold
100回回して全部Q、6、4以下の降りる手札になってますね。
勝負手は出力されないのでこれでよし。
降りる手判別の機能が出来たのでシミュレータに組み込みます。
ここは次回で。
本シリーズ
スリーカードポーカーゲームを作りたい やっとゲームになった編 - paloma blog
スリーカードポーカーゲームを作りたい シミュレータ作る編 - paloma blog
スリーカードポーカーで勝つことはできるのか - paloma blog
スリーカードポーカーで勝つことはできるのか 実践編 - paloma blog