問題タブ [poker]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
3699 参照

java - ポーカー ゲーム: Java でデッキを作成する

ポーカー ゲームを作成するプロジェクトに取り組んでいます。説明は非常に明確ですが、オブジェクト指向プログラミングには非常に苦労しています。

このプロジェクトでは、カード、デッキ、ハンド、ポーカー ハンドの 4 つのオブジェクトを作成する必要があります。カード オブジェクトの作成は既に完了しており、現在はデッキ オブジェクトに取り組んでいます。今悩んでいる部分です。問題をグーグルで検索してみました。しかし、私はプログラミングの初心者なので、彼らのメソッドを実際に理解することはできません。たとえば、ArrayList の使い方がわかりません。私は非常に基本的な配列メソッドしか知りません。

次のコードは、Deck オブジェクトに対してこれまでに行ったことです。

そして、この部分の説明は次のとおりです。

Deck クラスは、52 枚のトランプのデッキを表します。Card オブジェクトの配列を使用して、デッキ内の実際のカードを管理します。

以下はクラスとインスタンス フィールドで、その後に Deck クラスのメソッドが続きます。次の順序で各項目を完了します。

クラス定数

次の public static クラス定数を宣言して初期化します。 CARDS_IN_DECK - デッキ内のカードの数を表す整数値。これを 52 に設定します。 SHUFFLE_SWAPS - デッキのシャッフル中にカードの位置を切り替える回数を表す整数値。数値が高いほど、デッキはよりランダムに完全にシャッフルされます。これを少なくとも 500 に設定します。 インスタンス フィールド

次のインスタンス フィールドを宣言します。 デッキ内の CARDS_IN_DECK カードを管理するために使用される Card オブジェクトの配列。配列内の各要素は、単一の Card オブジェクトです。Cards の配列から次に配られるカードのインデックスを保持する整数。ちなみに、この変数は 0 から始まり、カードが配られるたびに 1 ずつ増加します (以下の方法を参照)。テスト用に提供されたランダム シードを保持する整数変数。メソッド

以下は、完了する必要があるメソッドのリストです。

public Deck(int seed)- これは Deck クラスのコンストラクターです。まず、クラス定数「CARDS_IN_DECK」を使用して、Card オブジェクトの配列を初期化し、52 枚のカードを保持する必要があります。配列が初期化された後、一度に 1 要素ずつ配列を調べて、実際に Card オブジェクトを作成する必要があります。すべてのカードを作成する必要があり (4 つのスートごとに 2 ~ 14 の値)、重複があってはなりません。シード パラメータは、シードのインスタンス フィールドに格納する必要があります。ヒント: このコンストラクターでは、Card.CLUBS、Card.LOWEST_VALUE などを使用します。

public void shuffle()- このメソッドは、プレイする新しいハンドのデッキのリセットを処理します。このメソッドは、Random クラスを使用して乱数を生成することにより、デッキのシャッフルを処理する必要があります。0 ~ 51 の間で 2 つの整数をランダムに生成する必要があります。次に、それらの 2 つの位置でカードを交換する必要があります。たとえば、乱数が 20 と 11 で、クラブの 2 が配列の要素 20 にあり、ハートの 3 が配列の要素 11 にある場合、これら 2 枚のカードが交換された後、要素 20 は要素 20 の 3 を保持します。ハート、および要素 11 はクラブの 2 を保持します。クラス定数「SHUFFLE_SWAPS」が示す回数だけ、2 つの数字を生成し、対応する場所でカードを交換するこのプロセスを繰り返さなければなりません。ランダム シードが -1 でない場合、作成する Random オブジェクトは提供されたランダム シードを使用する必要があります。これにより、同じランダムシードでプログラムを実行するたびに、デッキが同じようにシャッフルされます。例えば、

Random rand = new Random(seed); ランダム シードが -1 の場合は、シードのない Random オブジェクトを作成します。これにより、プレイするたびに異なるゲームが作成されます。例えば、

Random rand = new Random(); 最後に、デッキから配られる次のカードを選択するために使用されるインデックスを 0 にリセットする必要があります。

public Card nextCard()- このメソッドは、次に配られるカードがある配列内の位置を知っているインスタンス フィールドに基づいて、デッキの次のカードを返します。カードを返す前に、この番号を更新して、次にメソッドが呼び出されたときにデッキの次のカードが返されるようにしてください (1 ずつ増やします)。

public String toString()- このメソッドは、単体テストに役立つデッキの文字列表現を返します。ヒント: Card オブジェクトの配列内の各 Card に対して Card クラスの toString() メソッドを呼び出します。


私はpublic Deck (int seed)正しい方法を得たと思います。それを見てもらえますか?カード オブジェクトは ( int value, char スーツ) のパラメーターを持っているので、デッキの場合は ( int, char ) を返しています。この方法の後、そこからどうすればよいのかよくわかりません。誰かがこれについて私にいくつかの指針を教えてもらえますか?

0 投票する
1 に答える
216 参照

iphone - iPhone SDK - ポーカー オッズ計算

ポーカー ハンド アナライザーを作成するために xcode で遊んでいます。specialK ハンド エバリュエーターを使用しました。プロジェクトにエバリュエーターを含めた後、2 つのスレッド (それぞれ 125k サイクル) を切り離して、各プレイヤーの勝率を確認するためにモンテカルロ シミュレーションを実行しようとしました... 私の問題は、125k x 2 サイクルで約 40 時間がかかることですiphone 4で実行するのに数秒。誰か提案はありますか?

0 投票する
5 に答える
6574 参照

java - Javaでのポーカーハンドの比較

私はポーカーゲームに取り組んでいます。これまでのところ、私はポーカーハンドの比較にこだわっています。私はそれをどのように行うかについてある程度の考えを持っていますが、私のコードの何が悪いのかわかりません。誰かが何が悪いのか指摘してもらえますか?

それでは、私のコードが何をしているのかを簡単に説明しましょう。

プログラムの他の部分では、手札のカードを調べて、カード値の頻度を配列にリストします。

つまり、私の手にc3、h4、d4、s4、2dがあるとしましょう。プログラムの他の部分を呼び出して、手にあるカードを読み取り、集計配列を返します。上記の私の手の集計配列は[0,0,1,1,3,0,0,0,0,0,0,0,0,0]になります。つまり、この配列が言っていることは、私の手が1つ2つ、1つ3つ、3つ4つあります。

これが、Three of a Kindを見つけようとする私の方法です。フルハウス(3種類とペア)の場合はfalseを返す必要があります。

したがって、上記で実行しようとしているのは、最初に配列を実行し、3がある場合は配列を実行し、3がある場合は配列を再度実行して、2があるかどうかを確認します。 a 2、それなら私はそれが3種類であることを知っています。2がある場合、それはフルハウスであり、falseを返す必要があります。私の論理は正しいと思いますが、私のコードに何か問題があります。

そして、私が問題を抱えている秒針は、私の手が正確に1つのペアを持っているかどうかを判断する方法です。ペアが1つしかない場合にのみtrueを返します。2つのペアなどがある場合はfalseを返します。

これについては、配列内の値を降順または昇順で並べ替えることを考えています。降順を選択した場合、最初に配列を読み取り、2があるかどうかを確認します。次に、次の配列をスキャンして、最初の2の後の次の値も2であるかどうかを確認します。別の2がある場合は、 falseを返します。

誰かが私のコードを見て、何が悪いのか指摘してもらえますか?どうもありがとうございます。

0 投票する
12 に答える
77191 参照

java - ポーカーハンド評価の最も単純なアルゴリズム

でポーカーハンド(5枚)の評価を考えていJavaます。今は、パフォーマンスや効率よりも単純さと明快さを求めています。おそらく「素朴な」アルゴリズムを書くことはできますが、それには多くのコードが必要です。

ハッシュとビット演算を使用するいくつかのポーカー評価ライブラリも見ましたが、かなり複雑に見えます。

ポーカーハンド評価の「最もクリーンでシンプルな」アルゴリズムは何ですか?

0 投票する
2 に答える
5768 参照

java - Java でデッキをシャッフルする

本当に助けが必要な、やらなければならない別のエクササイズがあります。私の isFlush メソッドが機能しているかどうかさえわかりません。なぜかというと、私のデッキがシャッフルされておらず、ハンドが処理されておらず、完全に行き詰っています。誰かが私を助けたり、正しい方向に向けたりできますか? 演習は次のとおりです。

演習 12.5 この演習の目標は、ランダムなポーカー ハンドを生成して分類するプログラムを作成し、さまざまなポーカー ハンドの確率を推定できるようにすることです。ポーカーをプレイしなくても心配はいりません。私はあなたが知る必要があるすべてを教えます。

を。ウォーミングアップとして、shuffleDeck と subdeck を使用して、それぞれ 5 枚のカードを持つ 4 つのランダムなポーカー ハンドを生成して出力するプログラムを作成します。いいことありましたか?可能性のあるポーカー ハンドは、値の昇順で次のとおりです。 ペア: 同じランクの 2 枚のカード 2 ペア: 同じランクの 2 枚のカードのペア スリー オブ ア カインド: 同じランクの 3 枚のカード ストレート: ランクが同じ 5 枚のカードシーケンス フラッシュ: 同じスーツの 5 枚のカード フルハウス: 1 つのランクの 3 枚のカード、別の 4 枚のカードの 2 枚: 同じランクの 4 枚のカード ストレート フラッシュ: 5 枚のカードが連続して同じスーツ

b. Deck をパラメーターとして取り、ハンドにフラッシュが含まれているかどうかを示すブール値を返す isFlush というメソッドを作成します。

c. ハンドを取り、そのハンドにスリーカードが含まれているかどうかを示すブール値を返す isThreeKind というメソッドを作成します。

d. 数千のハンドを生成し、それらにフラッシュまたはスリーカードが含まれているかどうかをチェックするループを作成します。それらのハンドの 1 つを取得する確率を推定します。

e. 他のポーカー ハンドをテストするメソッドを記述します。いくつかは他よりも簡単です。複数のテストに使用できる汎用ヘルパー メソッドを作成すると便利な場合があります。

f. 一部のポーカー ゲームでは、プレイヤーはそれぞれ 7 枚のカードを受け取り、7 枚のカードのうち上位 5 枚でハンドを形成します。セブンカード ハンドを生成し、確率を再計算するようにプログラムを変更します。

そして、ここに私のコードがあります:

困っている部分を太字にしました。「配列が必要ですが、exercise125poker.Deck が見つかりました」というエラーが表示されます。このエラーを修正する方法がわからないため、このエラーの回避策が必要です。誰でも助けることができますか?

0 投票する
2 に答える
7316 参照

c# - ポーカーハンド評価の高速化

「RayW ハンド エバリュエーター」アプローチを使用して、カードの組み合わせスコア (7 枚中 5 枚のベスト カード) を取得しようとしています。ただし、この方法にはいくつかのパフォーマンスの問題があります。情報源によると、このアプローチを使用すると、1 秒あたり 3 億以上のハンドを評価できるはずです。私の結果は 1.5 秒で 10 ミルで、何倍も遅くなります。

「RayW ハンド エバリュエーター」の背後にある考え方は次のとおりです。

Two Plus Two エバリュエーターは、約 3200 万のエントリ (正確には 32,487,834) を含む大きなルックアップ テーブルで構成されています。特定の 7 カード ポーカー ハンドをルックアップするには、このテーブルのパスをたどり、カードごとに 1 回のルックアップを実行します。最後のカードに到達すると、得られた値がハンドの公式等価値です。

コードは次のようになります。

}

そして、それが私がこのアプローチをテストする方法です:

このメソッドは元々 C++ で実装されていたと思いますが、それでも C# ポートはより高速に動作するはずです。1 秒間に少なくとも 1 億ハンドに近づく方法はありますか?

私がこれまでに試したこと:

  • 静的メソッドと非静的メソッドを使用してみました-違いはありません。
  • 配列の代わりに辞書検索を使用してみました

    /li>

10 ミルのハンドの経過時間は、ほぼ 6 倍遅くなります。

  • ある人によると、「安全でない」コードを削除することで、パフォーマンスが 200 ミル向上しました。同じことをやってみましたが、結果はほぼ同じです。

    /li>

引用は次のとおりです。

「安全でない」コード部分を削除し、c# バージョンでいくつかの小さな調整を行った後、現在も約 310 ミオです。

このハンド ランキング システムのパフォーマンスを向上させる他の方法はありますか?

0 投票する
1 に答える
439 参照

java - Java画像処理

私はポーカーハンドシミュレーターをやろうとしています。私はNetbeansを使用しており、そのGUIエディターを使用して、ポーカーテーブルのJPGを追加したJFrameを作成しました。これを行った後、プレーヤーがポーカーテーブルJPGの上に持っている手に応じて動的にJPGを追加することは可能ですか?JPGを別のものの上に追加することは可能ですか?もしそうなら、NetBeansでこれをどのように達成できますか?

私が計画しているのは、テーブルにいるすべてのプレーヤーを、スタックと名前とともに表示し、アクションを表示することです。これはすべて、カードを表向きにして行われます。シミュレーターはいくつかのオッズを計算し、PDFでいくつかの手の詳細を出力します。

これは宿題のプロジェクトです。

0 投票する
3 に答える
296 参照

java - ポーカーハンドディーラーの無限ループ

私はこの方法でデッキを処理しようと試みてきましたが、52枚のカードを処理すると、無限ループになります。

これは、設定されていないカードを取得するまで乱数を生成する必要があるためですが、すべてのカードが設定されると、条件が真になることはなく、無限ループになります。

私は自分の問題を知っていますが、それを修正する方法がわかりません。私は何時間も試してきました。52枚のカードに達したら免除をスローしたいのですが、無限ループに入るとifステートメントに到達することはありません。

================================================== ===========================

コード全体

import java.util.Random;

パブリッククラスDeckOfCards{

================================================== ================

}

0 投票する
2 に答える
1669 参照

theory - モンテカルロ/網羅的な列挙なしでテキサス ホールデム ポーカーの勝率を取得する

申し訳ありませんが、私はこのプロジェクトを始めたばかりで、アイデアやコードがありません。プログラミングよりも理論的な質問をしています。

すべての Google 検索で同じ応答が得られるようで、この質問に対する答えを見つけるのは非常に困難です。

モンテカルロ/網羅的列挙法を使用せずにテキサスホールデムポーカーの勝率を計算する方法はありますか? すべてのカードが表向きで、デッキ内のすべてのカードがわかっていると仮定します。

他のフォーラムでのすべての応答は、「ポーカーストーブを使用する」またはそれに似たものであるように思われます。コードを書くための理論を探しています。

ありがとう。

0 投票する
0 に答える
396 参照

language-agnostic - ポーカートラッキングソフトウェアはライブハンドをどのように評価しますか

彼らがこの種のソフトウェアをどのように作っているのか興味があります。

彼らはいますか?

  • 画面をキャプチャし、OCRライブラリを使用して手を追跡します
  • 手のメモリ位置を決定し、そこから直接読み取ります

他に何かありますか?

編集/私は本当にライブトラッキングを意味し、手の履歴を使用しません