今回はテキサスホールデムポーカーの役判定のロジックについてまとめておきたいと思います。ソースコードなどはなく、役判定に対しての考え方の部分を示してあります。
強い役から順番に判定する
ポーカーの役判定は、強い役から判定することが基本です。例えばフォーカードの役判定になったなら、フォーカードという判定があった時点で、役判定のロジックから抜けるという意味です。
テキサスホールデムポーカーにおける役の強さは以下の通りになっています。
- ロイヤルストレートフラッシュ
- ストレートフラッシュ
- フォーカード
- フルハウス
- フラッシュ
- ストレート
- スリーカード
- ツーペア
- ワンペア
- ハイカード
ポーカーの役判定のロジック
ロイヤルストレートフラッシュ
7枚のカードの中から、10、11、12、13、1を取り出せて、かつ5枚のカードのスートがすべて同じであること。
同じ役の場合
ポットをチョップする
ストレートフラッシュ
7枚のカードの中から、5枚以上同じスートのカードを取り出して、そのカードでストレートができていること。
同じ役の場合
ストレートの役の強い順を判定しなくてはいけない。ストレートには1~5、2~6、3~7、4~8、5~9、6~10、7~11、8~12、9~13、10~1の10通りがあるので、どのストレートに当てはまるかを確認して、強弱を確認。全く同じなら、ポットをチョップ。
もし7枚のカードで、ストレートもできていて、かつフラッシュであるというような判定にしたとする。すると2♡、3♡、4♧、5♡、6♡、7♧、8♡のような場合でも、ストレートフラッシュとして判定されてしまう。
フォーカード
7枚中に4枚以上同じ数字があること。
同じ役の場合
どの数字を4枚持っているのかを、保持しておく。
フルハウス
同じ数字が3枚が1組以上、同じ数字が2枚が1組以上あること。もしくは同じ数字が3枚が2組以上あること。
同じ役の場合
3枚のカードの数字を保持しておく。3枚のカードの数字が強い方が、ポットをとる。もし3枚のカードが同じ場合は、2枚のカードの方で優劣を決める。同じ場合はポットをチョップ。
もし同じ数字が3枚が1組以上、同じ数字2枚が1組以上だと、「3332224」のような組み合わせが、フルハウスとして判定できなくなってしまう。
フラッシュ
7枚の手札の中で、同じスートが5枚以上あること。
同じ役の場合
フラッシュの完成形の中で最も強いカードを持っているかどうかを判定する。同じ場合はポットをチョップ。
ストレート
ストレートのパターンは、1~5、2~6、3~7、4~8、5~9、6~10、7~11、8~12、9~13、10~1の10通りを全て検索。例えば1~5のストレート判定については、7枚のうちに、1~5の数字が、それぞれ1枚もしくは1枚以上あれば、ストレート判定可能。同様にこれを10通り行えば、すべてのストレートを判定できる。
同じ役の場合
どのストレートができているかは判別できるように、ストレートの数字を保持しておく。同じ場合は、ポットをチョップ。
スリーカード
7枚中に3枚以上同じ数字があること。
同じ役の場合
3枚のカードの数字を保持しておき、数の大きい方が勝利。もし3枚のカードが同じ場合は、それ以外のキッカーも確認できるようにしておく。
ツーペア
7枚中に同じ数字が2枚以上が2組以上あること。
同じ役の場合
数字の強いペアを持っている方がポットをとる。
たとえば、2組以上ではなく、2組と限定してしまうと、「KK22994」といったような3組のペアができた場合に、ツーペア判定ができなくなってしまう。
ワンペア
7枚中に2枚以上同じ数字があること。
同じ役の場合
数字の強いペアを持っている方がポットをとる。
ハイカード
上記以外であること。
同じ役の場合
どの数字を持っているか確認。強い方がポットをとる。
同じ役の強さだった場合の処理
カードの数値の情報は常に持っておかないといけません。そして同じ役判定になった場合は、カードの数値の情報を用いて、強弱を判定します。つまりシステム的に、各プレイヤーがカードを持っているかが、わかるようにしておくことです。
役判定結果が、参加しているプレイヤーですべて同じだった場合は、ポットがチョップされることになります。
まとめ
役判定についてまとめました。キッカーでの処理の部分については、一応ロジックとしてはこのような形ですが、実際にソースに落とすとどうなるかというのは、私もよくわかっていません。役判定を作って行くなかで、何かわかれば、またプラスしておきます。