問題タブ [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.
algorithm - ポーカーハンドレンジAとポーカーハンドレンジBを評価する
私はこの問題を抱えています:ポーカーハンドのポートフォリオを持っているプレーヤーが、別のポーカーハンドのポートフォリオを持っている別のプレーヤーを打ち負かす頻度を知りたいです。
ポートフォリオの各ハンドには重み(つまり尤度)が与えられます。ポートフォリオの各ハンドは、それ自体の「強さ」も知っています。これは事実上、すべてのカードが配られたことを意味します。したがって、これ以上カードを配る必要はないと想定してください。
この問題が厄介な理由は、カードの重複の問題が原因です。たとえば、各プレイヤーのポートフォリオからランダムな持ち株を選ぶ場合、これらの持ち株がカードを共有していないことを確認する必要があります。明らかに、両方のプレイに同じカードを配ることはできません。
これをすばやく実行して、1秒あたりのRangeAとRangeBのさまざまな比較を実行できるようにします。解決策はありますが、応答を汚したくないので、まだ話しません。
-例として- "Ah3c
8c Td Jh"の5枚のカードボードがある場合:
HandRangeA = {{"As Ac"、2.5%}、{"As Ad"、2.5%}、{"Ac Kc"、 5%} ....}
HandRangeB = {{"As Ac"、7.5%}、{"As Ad"、7.5%}、{"Ac Kc"、5%} ....}
(各HandRangeにはすべてが含まれます「ボードカード」を使用しない可能性のある保持)
目標::確率を計算するHandRangeAがHandRangeBを上回る
algorithm - 手にある通りと同じ種類を見つけるためのアルゴリズム
これは実際には麻雀ベースの質問ですが、Rommeベースまたはポーカーベースの背景でも簡単に理解できます。
麻雀では、14枚の牌(牌はポーカーのカードのようなもの)が4セットと1組に配置されています。通り( "123")は、常に正確に3つのタイルを使用しますが、それ以上でもそれ以下でもありません。同じ種類のセット(「111」)も、正確に3つのタイルで構成されています。これにより、合計3 * 4 + 2=14タイルになります。
ここでは関係のないKanや13Orphansのようなさまざまな例外があります。色と値の範囲(1〜9)もアルゴリズムにとって重要ではありません。
私は、上記のように手を配置できるかどうかを判断しようとしています。特定の理由で、14だけでなく、任意の数のタイルを処理できる必要があります。(次のステップは、ハンドを完了するために交換する必要のあるタイルの数を見つけることです。)
例:
11122233344455-簡単、4セットとペア。
12345555678999--123、456、789、555、99-123、123、789、888、99-有効なハンドではありませ
11223378888999ん
11223344556789
私の現在の、まだ実装されていないアイデアは次のとおりです。タイルごとに、a)通りb)セットc)ペアを作成してみてください。何も機能しない場合(またはペアが1つを超える場合)、前の反復に戻って次のオプションを試すか、これが最高レベルの場合は失敗します。それ以外の場合は、残りのタイルのリストから使用済みのタイルを削除して、次の反復を続行します。
このアプローチは機能し、適度に高速であると思います(パフォーマンスは「素晴らしいボーナス」です)が、これについてのあなたの意見に興味があります。別の解決策を考えられますか?これまたは類似のものはすでに存在しますか?
(宿題ではなく、麻雀を習っています。)
javascript - 接線の円 (または楕円) でポイントを獲得し、ポーカー チップのバランスを取る
無料のポーカー ゲーム (HTML/Javascript クライアント、Python サーバー) ゲームのチップをいくつか表示しようとしています。テーブルの真ん中辺りに席があります。各座席について、cosinus、sinus、radius (テーブルの中心からの距離)、および値/カウント チップ配列を知っています。
各チップをシート ポイントの接線上に整列してバランスをとって表示しようとしています。
画像内:(画像を作成できないので:http://i.stack.imgur.com/a4Obw.png)
今のところ、私はこのコードを書きました:
しかし、バランスが悪いし、見栄えもよくありません。
add : テーブルが楕円形である可能性があるため、cosinus と sinus は 1 より大きく -1 より小さい可能性があります
prolog - Prologでのカード表現
私はPrologを学ぼうとしています。これがこの言語での私の最初のステップです。練習問題として、ポーカーの手を認識できるプログラム(ストレートフラッシュ、フォーオブカインド、フルハウスなど)を書きたいと思います。
私はPrologで良いカード表現を探しています。あるカードが他のカードよりも大きいかどうか、カードが適しているかどうかなどを確認する可能性が必要です。
私はコードから始めました:
これにより、miはランクAがたとえばJよりも大きいかどうかを確認できます。
しかし、1枚のカードをどのように表現するかはわかりません。この表現には、カードのランクとスーツが含まれている必要があります。エースのランクは14であるため、エースにも問題がありますが、ストレートで1になることもあります。
したがって、私の質問は、次のようなルールを作成する場合にカードをどのように表現するかです。
また
言語を知っていれば、これは一種の簡単な質問だと思いますが、CやPythonなどの言語から思考を「切り替える」のはそれほど簡単ではありません。:-)
apache-flex - オンラインポーカーのためのフレックス?
私はオンラインポーカーのインターフェースを設計するタスクを割り当てられましたが、それは問題ありません。しかし、クライアントは私もゲームを開発できるかどうか疑問に思っていました。ゲームを開発できる経験豊富なFlex/AS3プログラマーを2人知っていますが、Flexがオンラインポーカーゲームに適しているかどうか疑問に思っていました。私が必要とするのは:
- セキュリティ<-非常に重要
- パフォーマンス-ほとんどのシステムでスムーズに実行する必要があります
- ゲームをダウンロードしてプレイできる(つまり、ブラウザから実行する必要はありません)
Flexが適切でない場合、他にどのテクノロジーをお勧めしますか?
c# - 辞書を使用して値とキーを検索しようとする(ポーカーゲーム)
私はc#を使用して基本的なポーカーゲームを作成しようとしています。
これまでのところ、私はこれらの3つのラインを使用してランダムにカードを配っています。
今、私が達成しようとしているのは、まだ配られていない人だけのカードを配ることです。これを行うために、2つの「辞書」コレクションを作成しました。1つは「deck」と呼ばれ、もう1つは「dealt」と呼ばれます。もともとすべてのカードをデッキに追加することを考えていましたが、テーブルで配られると、デッキから削除され、カードの一意のキーを使用して配られるように追加されます。
これを行うための最良の方法は何だと思いますか?私は基本的に重複したカードを望んでいません。たとえば、エースハーツとエースハーツの組み合わせが同じデッキにあることです。どうすればこれを防ぐことができますか?
java - Javaのポーカーハンズ
2つのポーカーハンドを比較する簡単な方法はありますか?私はこれについてかなり素朴に行っているので、誰かがこれを行った経験があるなら、それは役に立つかもしれません。
xml - 破損した Full-Tilt Poker プレーヤー ノート XML ファイルを修正する方法
FullTilt Pokerの最近のソフトウェア アップデートにより、友人のプレーヤー ノート XML ファイルが破損しました。
FullTilt は、プレーヤー ノート用に 2 つの XML ファイルを作成します。すべてのプレーヤーのメモを含むマスター ファイルと、現在のログイン セッション中に作成されたメモの記録を保持するタイムスタンプ付きのファイルです。
両方のファイルが破損しました。
タイムスタンプ付きのファイルに開始<NOTES>タグが欠けていたので修正しましたが、master.xmlは別の話です。
FireFox では次のように表示されます。

Chrome では次のように表示されます。

- ファイルはどの Web ブラウザでも開きません。
- Ubuntu または Google Docs の Gedit で開くことができません
- Windows XPのNotepad ++で開きます
Notepad++ でファイルを開いた後、誰かがフォントを WingDings に変更したと思うでしょう。ランダムな文字、ハート、矢印などの巨大な混乱が表示されます。
数年前に誰かが fulltilt フォーラムに投稿したアドバイスに従って、ファイルの内容を Web フォームにコピーして貼り付け (キャリッジ リターンを修正するため)、メモ帳に戻すことを勧めていましたが、うまくいきませんでした。実際、クリップボードから貼り付けられるのは最初の 50 文字程度だけです。それらの 1 つが「壊れている」と思われます
これを修正する方法について誰かアドバイスはありますか?私はそれができることを知っています.正しい方法を見つけなければなりません.
python - テキサス ホールデム ハンドの勝者を決定するアルゴリズム
よし、上級プロジェクト用にテキサスホールデム AI を作っている。GUI と賭け/取引手順を作成しましたが、誰がハンドに勝ったかを判断する必要がある部分に到達しました。これにアプローチする最善の方法がわかりません。私はところでpythonを使用しています。ATM i には 2 つのリストがあり、1 つは 7 枚のプレイヤー カード用、もう 1 つは 7 枚のコンピューター カード用です。現在、すべてのカードは {'Number': XX, 'Suit': x} という構造体としてリストに格納されています。number は 2 ~ 14、suit は 1 ~ 4 です。私がこれにアプローチしようとしていた方法は、最高のものから始めて、各ハンド タイプの関数を作成することです。例えば。self.CheckRoyal(playerCards) を作成し、リストを手動で調べて、ロイヤル フラッシュが達成されたかどうかを評価します。これを行うには、数値的により良い方法が必要です。
algorithm - ポーカー ゲームの商用グレードのランダム化
アルゴリズムの問題に取り組む方法についてアドバイスが必要です (つまり、プログラミングそのものではありません)。以下は、私のニーズと、それらをどのように満たそうとしたかです。改善のためのコメントは大歓迎です。
まず、私の目標を説明することから始めましょう。10億回くらいポーカーをしたいです。多分私は次の PokerStars.net を作ろうとしているのかもしれません。
random() を呼び出す典型的なプログラムよりも、より良いランダム化されたカードのデッキを作成できるプログラムを作成したいと思います。これらは、高品質の乱数から作成された製品品質のデッキである必要があります。商用グレードのポーカー サーバーはすべてのカードに 64 ビット ベクトルを使用しているため、毎日行われる何百万ものポーカー ゲームのランダム性が確保されていると聞いています。
何を書くにしてもシンプルにしたい。そのために、プログラムは、指定された目標を達成するために1 つの入力のみを必要とする必要があります。プログラムが開始されるたびに、現在の時間を記録し、それを開始点として使用することにしました。このアプローチは商用環境では実行できないことはわかっていますが、数十億のゲームに耐えられる限り、単純な代替手段よりも優れています.
この問題を解決するために疑似コードを書き始めましたが、厄介な問題に遭遇しました。私には明らかですが、あなたにはそうではないかもしれませんので、お知らせください。
以下の疑似コード:
私の問題は最後のステップにあります。2 つの数値が同じである (可能性は低い) ことや、ランダム性が失われる (可能性が高い) ことを心配せずに、各 64 ビット値を対応するカードに適切にマップする方法を思いつきません。
私の最初のアイデアは、0x000000000000000 - 0xFFFFFFFFFFFFFFFF を 4 つの偶数セクション (スーツを表すため) に分割することでした。しかし、セクションごとに正確に 13 枚のカードが見つかるという保証はありません。
私が立ち往生している場所がわかったところで、この課題をどのように克服しますか?
-- 編集 --
/dev/random からのバイトの読み取りは、実際にはうまく機能します。しかし、それでも変換を行う方法がわかりませんか? (52枚のカードに十分なバイトを読み取ったと仮定します)。
私の本当の望みは、システム時間のような単純で予測可能なものを、ランダム化されたカードのデッキに変換することです。システム時間で random() をシードすることは、これを行うための悪い方法です。したがって、時間のハッシュと、random() から得られる値のハッシュです。
地獄、私が望むなら、震えと笑いのために、/dev/random からバイトをハッシュすることができます。ハッシュは物事のランダム性を向上させますよね? 最新のパスワード マネジャーが何千回もハッシュ化されたパスワードを保存するのはそのためではありませんか?
-- 編集 2 --
だから私はあなたの答えを読んで、あなたの多くがほのめかしている結論に混乱していることに気づきました. 最初の編集でほのめかしましたが、本当にループに陥っています。それを指摘して次に進みたいと思います。
ファンキーな数学と巧妙な魔法を実行して、特定のパスワードにマップされる一般的なハッシュのルックアップ テーブルとして本質的に機能するレインボー テーブルが存在します。より長く、より良いパスワードがこれらのレインボー テーブルに表示される可能性は低いと理解しています。しかし、多くのユーザーパスワードが一般的であるにもかかわらず、ハッシュ化されたパスワードは何千回もハッシュ化された後でも安全なままであるという事実は変わりません.
つまり、多くの決定論的な操作が元のパスワードのランダム性を高めた (またはそう思われる?) 場合です。私が正しいと言っているのではなく、それが私の感覚だと言っているだけです。
指摘したい 2 番目のことは、これを逆方向に行っていることです。
私が言いたいのは、ソートされた、予測可能な、ランダムではないカードのデッキを取り、それにフィッシャー・イェーツ・シャッフルを使用することを皆さんが提案しているということです. Fisher-Yates は優れたアルゴリズムであると確信していますが、何らかの理由で使用できなかったとしましょう。
たとえば、416 バイト (1 枚のカードに 8 バイトのカードが 52 枚) 前後のランダムなバイト ストリームを取得すると、BAM はすでにランダムなカードのデッキを生成できますか? バイトはランダムなので、これを行うのはそれほど難しくありません。
ほとんどの人は、52 枚のカード (ランダムかどうかに関係なく) のデッキから始めて、それらを何度も交換します (ランダムなインデックスを選んで交換します)。それができれば、52 個の乱数を取り、それらを 1 回実行してランダム化されたデッキを作成できます。
簡単に説明すると、 ランダム化されたバイトのストリームを受け入れ、各 8 バイトのチャンクを調べるアルゴリズムです。各チャンクをカードにマップします。
元。0x123 は、スペードのエース Ex にマップされます。0x456 は King of Diamonds Ex にマップされます。0x789 は 3 つのクラブにマップされます .... など。
マッピングに適したモデルを選択している限り、これで問題ありません。シャッフルは必要ありません。プログラムは 2 つのステップに削減されます。
ステップ 1: 適切なソースから十分な量のランダム バイトを取得する ステップ 2: このバイト ストリームを 52 のチャンクに分割し、デッキ内の各カードに 1 つずつ割り当てます ステップ 2a: 52 のチャンクを実行し、それらをカードの値に変換します。地図。
それは理にかなっていますか?