日本だんでぃ協会
Japan Dandy Association
中の人プロフィール おこんてんつ トップ →プログラミング (12) 音楽 (7) ポーカー (1) 雑記 (1) リンク Tweets by webclap_dandy | ■ポーカーの役判定プログラムを作ってみよう!2017/04/09 01:13 作成 2017/04/11 22:13 更新 最近ポーカーにハマってまして。 ポーカーと言っても、日本で一般的な 「5枚ずつカードを配って、いらないカードを交換して・・・」 というポーカーではなく、 いわゆる「テキサスホールデム」というやつなんですが、 詳しいルールはここでは省きますけど、 計7枚のカードから最も強い役ができる5枚を使うというユニークなルールがあります。 このサイトで何かプログラミング講座っぽいことを書きたいな~と思っていたので、 せっかくですし、「テキサスホールデムの役判定プログラム」を作ってみたいと思います。 要件としては ・トランプのカード複数枚のデータを渡したら、それが何の役なのかを返してくれる関数を作る。 ・使用する言語はjavascript ・最大で渡されるカードは7枚 ・複数の役が成立していたら、最も強い役を返す ・役が何かだけで、Aハイフラッシュとか、10ハイストレートとかまで細かくは判定しない ・同じカードが複数枚あるとか、1~13以外のカード(ハートの14)とかみたいな例外はフォローしない こんなところでしょうか。 あ、ちなみに、僕は普段はC#かPHPでプログラミングをしているので、 javascriptの命名規則とかお作法が変だったらご指摘いただけると嬉しいです>< ~~~~~~~~~~ さて、考えていってみましょう。 まず最初に考えなければいけないのは、 「1枚のカードをどういう形式のデータで表現するか」 なんですけど、 僕が普段使い慣れてるC#だと とかやって、classでカードを管理すると思うんですが、javascriptだとclassって無いのかな?最近実装されたのかな?されつつあるのかな? この辺の情報がよく分からなかったので、素人っぽいのですが配列でやってしまいましょう。 ということで、カードは以下の感じで管理したいと思います。 これで「スペードのA」を表現する感じになります。ポーカーのプレイヤーは複数枚のカードを持っているので、 それは以下の感じで表現しましょう。 こんな感じの配列になります。ちなみにこれはAKスートですね!オールインハンドですね!今日これで致命傷を負って負けたよ! んで、上記のカードの配列が何の役なのかを判定するプログラムを作るわけですが、 まずは一番判定が簡単そうな「フラッシュ」の役判定を作ってみましょう。 上記の形式で渡された複数枚のカードが、 フラッシュが成立していたら「Yes」、成立していなかったら「No」と応えてくれる関数を作ります。 何故簡単かと言うと、 「同じマークが5枚以上あれば成立」 という条件判定がコード的にシンプルに書けそうだな~と感じたからです。 コード的には以下の感じになります。 こんな感じですね。この関数の使用例は以下の感じです。 こんな感じで、カードのデータを渡してあげると「true」か「false」が返ってくるわけですね。 このサンプルコードだと、スペードのフラッシュが成立しているので 「true」が返ってきます。 この要領で、ポーカーの全ての役の判定ができる関数が出来上がれば、 「ポーカーの役判定プログラム」が完成することになります。 今回はここまで! 次回は他の役の判定プログラムを作りたいと思います。 前の記事 cronで毎分以下の間隔に設定する時の注意点 次の記事 ポーカーの役判定 数字の重なり編 関連記事 ポーカーの役判定 最終回 ポーカーの役判定 ストレート編 ポーカーの役判定 ツーペア、フルハウス編 ポーカーの役判定 数字の重なり編 ポーカーの役判定プログラムを作ってみよう! 2025 日本だんでぃ協会 All Rights Reserved. |