ポーカーゲーム作成講座

Pythonistaのポーカーゲームにジョーカーの処理を追加する~ポーカー作成講座4~

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

本講座ではPythonistaでポーカーゲームを作る方法を紹介しています。

前回「Pythonistaのポーカーゲームにカード交換機能を追加する~Pythonista+sceneポーカー作成講座3~」ではカードを交換する機能を追加しました。

これでようやくゲームっぽくなりましたね。

そして第4回となる今回はPythonistaでジョーカーを追加する処理について紹介します。

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

・Pythonistaポーカーにジョーカーを追加する方法
・Pythonistaポーカーにジョーカーの実装例と実行例

ジョーカーはどんなカードにでもなれる最強のカードです。
ゲームとしては強力なカードですが、判定はなかなか複雑になります。

Pythonistaポーカーにジョーカーを追加する方法

ジョーカーが加わることによるルール

ジョーカーはどんなカードにでもなれるカードです。

例えばKが2枚がある時にジョーカーが加われば3カードに、ハートが4枚ある時にジョーカーが加わればフラッシュになります。

ジョーカーが加わった時の役に昇格は以下の通り。

ジョーカーが加わった時の役
ぶたフラッシュ、ストレート、ストレートフラッシュ、ロイヤルストレートフラッシュ、ジョーカーのいずれか
1ペア3カード
2ペアフルハウス
3カード4カード
4カード5カード(ローカルルール)
上記以外役に5枚使うので昇格なし

5カードという役はローカルルールなので具体的な強さはルールによってまちまちですが、出る確率はロイヤルストレートフラッシュより低いです。

ジョーカー+4カードなので確率的にまず出ないと思いますが、一応判定は追加しておきましょう。
2ペア以上の役が成立しない場合の役は「ジョーカー」とします。

ジョーカーの判定を考える

以上のようにゲームとしては非常に強力なカードですが、プログラムで判定を作ろうと思うとかなり複雑な処理が必要です。

ジョーカーについては以下のパターンについて考える必要があります。

・ジョーカーのパラメータ
・ペアがある場合
・3カード、4カードについて
・フラッシュについて
・ストレートについて

◆ジョーカーのパラメータ
ジョーカーは最後に計算したいのでnumberは99とします。

◆ペアがある場合
ペアがある場合の処理は以下の2つの処理を行います。

・ペアカウントを一つ減らして
・マッチナンバーに3を代入

上記を行うことで、1ペアは3カード、2ペアはフルハウス(3カード+1ペア)にできます。

◆3カード、4カードについて
マッチナンバーを+1するだけでOKです。

◆フラッシュについて
フラッシュフラグを廃止してフラッシュカウントに変更します。

フラッシュフラグの仕様は以下の通り。

・前後の数字を比較してマークが一致したらフラッシュカウントを+1
・フラッシュカウントが4の場合、フラッシュ成立
・ジョーカーがある場合はフラッシュカウントを+1

ジョーカーがある場合は他のマークと同様+1にするだけなのでそこまで複雑ではありませんね。

◆ストレートについて
ストレートフラグを廃止してストレートカウントを追加します。また、10~Aのストレートの成立した場合にロイヤルフラグというフラグを新たに立てます。

ストレートフラグの仕様は以下の通り。

・前後の数字が連続した数字の場合+1
・ストレートカウントが4の場合はストレート成立

ストレートカウントが3+ジョーカーの場合必ずストレートが成立しますが、ストレートカウント2でも成立する場合があります。

2,3,4,5→連続は3か所なのでストレートカウント3。ストレートが成立。
A,2,4,5→連続は2か所なのでストレートカウント2。このパターンもストレートが成立。
A,2,5,6→連続は2か所なのでストレートカウント2。このパターンはジョーカーが加わってもストレートが成立しない。

さらに10~Aのストレートもあるので判定がかなりカオスです。

◆ストレートカウントが3の場合の処理

・ストレートカウントが3なら+1
・10~Aが並んでいる場合はロイヤルフラグもTrueにする

3の場合はストレートカウントを+1すればOKです。
ロイヤルフラグが成立するかもチェックしましょう。

◆ストレートカウントが2の場合

・[3]と[0]の差が4以下の場合はストレートカウントを4にする
・差が5以上でなくても10~Aが並んでいる場合はカウントを4にする。ロイヤルフラグもTrueにする
・10がない場合も考慮

ストレートカウントが2の状態でストレートを成立させるためには、手札の最大値と最小値の差が4以下である必要があります。
これだけだとペアがある場合にもストレートが成立してしまう可能性があるので、ペアの判定を先に行いましょう。

差が5以上でも10~Aの場合があります。
この場合もカウントを4にして、さらにロイヤルフラグを立てます。

Pythonistaポーカーにジョーカーの実装例と実行例

make_card_list()の修正

カードリストを更新する処理「self.card_list = card_list」の直前に以下の処理を追加します。

check_poker_hand()の修正

フラッシュフラグ・ストレートフラグをそれぞれフラッシュカウント・ストレートカウントに変更します。
また、ロイヤルフラグを追加します。

◆修正前

◆修正後

一致しない場合にフラグを落としていましたが、一致した場合にカウントアップするように処理を修正します。

◆修正前

◆修正後

最終手札チェックの前にジョーカーチェックを追加します。

最終手札チェックはフラグ判定の修正と5カード・ジョーカーの役の追加です。

◆修正コードと実行例
修正後コード全文は以下の通りです。

※長いので非表示にしています。MySceneは修正がないので今回は割愛。
MySceneのコード第3回「Pythonistaのポーカーゲームにカード交換機能を追加する~Pythonista+sceneポーカー作成講座3~」をお読みください。

+マークをクリックするとソースコードを表示できます。

ソースコードの表示・非表示切り替え

>>ソースコードをGitHubで見る

◆実行例

以上ポーカーにジョーカーを追加する方法でした。
講座はいよいよ次回で最後です。

次回>>第5回:Pythonistaのポーカーゲームにベット機能を追加する

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

こちらの記事も読まれています

  • この記事を書いた人
miyabikno

miyabikno

住んでいるところ:神奈川県。 SIer中小企業(C,VBA):8年(うち5年QA)。Web系ベンチャー(PHP,Javascript,Python):2年。フリーランス:2年。現在はブログをメインに活動しています。

-ポーカーゲーム作成講座
-

Copyright© みやびのどっとぴーわい , 2020 All Rights Reserved Powered by AFFINGER5.