こんにちは、みやびのです。

本講座はPythonistaを活用してポーカーゲームを作成する方法について解説するものです。(全5回を予定)

第1回となる今回は、Pythonでポーカーの基本となる処理を作成します。

本記事の内容は以下の通り。

・Pythonでポーカーを作成する場合の基本処理
・Pythonでポーカー作成の実装例と実行例

本記事を読めばPythonでポーカーを作る時にどんな処理を作成すればよいか理解できます。

Pythonでポーカーを作成する場合の基本処理

まずはポーカーの基本処理をPythonで作成する方法を紹介します。

トランプゲームの基本処理

トランプの基本処理は以下の3つです。

・山札の作成
・シャッフル
・カードを引く処理

山札を作成する処理は以下の通り。

トランプカードのデータは比較しやすいように以下の辞書型で作成します。

シャッフル処理の方法は以下の通り。
random.shuffle()を使うことで簡単に配列のシャッフルができます。

カードを引く処理は以下の通り。
pop(0)とした場合先頭の値を取り出します。

具体的な手順については「【Python】random.shuffle()の活用例」をお読みください。

ポーカーの役

ポーカーの役を知るために最低限必要な情報は、

・フラッシュが成立しているかどうか?
・ストレートが成立しているかどうか?
・同じ数字は枚数あるか?
・ペアの数はいくつあるか?
・数字が「10,J,Q,K,A」か?

の5つです。

上記情報がわかればポーカーの役を全て表現することができます。

ポーカーの役と条件は以下の通り。

条件
ロイヤルストレートフラッシュ 「ストレート」かつ「フラッシュ」かつ「数字が10,J,Q,K,A」
ストレートフラッシュ 「ストレート」かつ「フラッシュ」
4カード 同じ数字が4枚
フルハウス 「3カード」かつ残り2枚が「1ペア」
フラッシュ 全て同じマーク
ストレート 連続した数字。「数字が10,J,Q,K,A」の場合もストレートが成立
3カード 同じ数字が3枚
2ペア 同じ数字のペアが2つ
1ペア 同じ数字のペアが1つ
ぶた どの役も成立しない

役の比較チェックループ

まずはループで1枚ずつ比較して4つの条件をチェックします。
・フラッシュが成立しているかどうか?
・ストレートが成立しているかどうか?
・同じ数字は枚数あるか?
・ペアの数はいくつあるか?

昇順に並べかえると「同じ数字」と「連続した数字」が並ぶので隣同士の比較だけで全チェックができるのでループは4回ですみます。

◆フラッシュが成立しているかどうか?
・フラッシュフラグをTrueにしておく
・直前のカードと現在のカードを比較してマークが違う場合はFalseにする
・同じ場合はそのまま
・最終的にTrueのままならフラッシュ成立

◆ストレートが成立しているかどうか?
・ストレートフラグをTrueにしておく
・直前のカードと現在のカードを比較して連続した数字の場合は継続。違う場合はフラグを落とす
・直前のカードがAかつ現在のカードが10の場合は継続(10,J,Q,K,Aの可能性があるため)
・最終的にTrueのままならストレート成立

◆同じ数字は枚数あるか?
・直前のカードと現在のカードを比較して同じ数字の場合はマッチカウントをカウントアップ
・違う数字の場合はマッチカウントを0に戻す

◆違う数字及び最終ループでやること
・マッチカウントが1の場合はペアカウントをカウントアップ
・マッチカウントが2の場合は3カード(ペアカウントはアップしない)
・カウントが3の場合は4カード(ペアカウントはアップしない)

後はフラグとカウントを見て条件をチェックしていきます。
上記条件をまとめたコードは以下の通り。

Pythonでポーカー作成の実装例と実行例

これまでの処理を全てまとめたコードは以下の通り。

※判定に冗長な部分があるのでリファクター予定

◆実行例

以上、Pythonでポーカーを作成する方法でした。
次回は今回作成したポーカーをPythonistaで画面表示する方法について紹介します。

次回>>第2回 Pythonistaでポーカーゲームを画面表示する

講座TOP>>Pythonista+sceneポーカー作成講座