1

これはコードの一部に過ぎないため、配列などが見えなくても問題ありません。アイデアは、5 枚のカードがあり、どのカードがペアであるかを判断したいということです。誰かが私の言いたいことを理解していますか?

boolean IsOnePair=true;

int [] cont = new int [6];

for (int i=0;i<Game.length;i++)
{
    cont[Game[i].getValue()] ++;
}

for (int i=0;i<cont.length;i++)
{
    if (cont[Game[i].getValue()]==2)
    {
        IsOnePair=false;
        System.out.println(Game+" : "+cont[i]+" times");
    }
}
4

8 に答える 8

4

1 つには、真のポーカー ハンドにしたい場合は、配列の要素は 6 ではなく、おそらく 5 にする必要があります。

ペアがあるかどうかを判断するには、各カードをその右側にある他のすべてのカードと照合するだけです。これは O(n^2) で実行されますが、ハンド サイズが約 5 にとどまる限り、これは許容されます。

これを行うコードは次のとおりです。

for(i=0; i<5; i++)
{
  for(j=i+1; j<5; j++)
  {
    if(hand[i] == hand[j])
      return true;
  }
 }

また、コードが機能しない理由は、カードの番号ではなく、カードの値に等しいインデックスにアクセスしようとしているためです。辞書を使用してこれを行うことができるかもしれませんが、上記のコードはプログラムがはるかに簡単で、問題のサイズが非常に小さいため、許容できます。

于 2009-03-04T01:30:32.063 に答える
1

スリーカードやフォーカードとは異なるペアを探していると思います。その場合、そのための最善の策は、各カードを調べて、エースの数、2 の数、3 の数などを保存することです。このソリューションでは、ペアの数と、スリー/フォーカードまたはフルハウスがあるかどうかがわかります。もちろん、フラッシュまたはストレートを探すときは、別のチェックを行う必要があります。

Card[] hand = new Card[numberOfCards];
int[] frequencies = new int[13]; // there are 13 card values
...
for (int i = 0; i < hand.Count; i++)
{
    frequencies[hand[i].CardNumber] += 1; // assume Ace = 0, King = 12
}
// Now look through the frequencies:
int numberOfPairs = 0;
bool hasTriple = false;
bool hasFour = false;
for (int f = 0; j < frequencies.Count; j++)
{
    switch (frequencies[f])
    {
         case 2:
             numberOfPairs++;
             break;
         case 3:
             hasTriple = true;
             break;
         case 4:
             hasFour = true;
             break;
         default:
             break;
    }
}
// Now you know how many pairs you have, and whether you have a triple or four-of-a-kind
if (numberOfPairs == 1 && hasTriple)
{
    // It's a full house
}

編集: ペア (エースのペアまたはクイーンのペアなど) を構成する数字の記録を保持するためにこれを変更することも簡単です。

于 2009-03-04T01:43:24.093 に答える
0

ペアをチェックしてブール値を返すことはほとんど役に立ちません。ハンドを高いものから低いものへとチェックし(ストレートフラッシュ、4種類、フルハウス、フラッシュ、ストレートなど)、勝者を決定できるようにハンドをランク​​付けする方法を作成する必要があります。私の意見ではそれは些細なことではありません。

于 2009-03-04T04:34:09.690 に答える
0

テキサス ホールデム ポーカー ゲーム エバリュエーターの完全なソース コードは、次の場所にあります。

http://www.advancedmcode.org/poker-predictor.html

これは matlab 用に構築されており、GUI ID は m コード化されていますが、計算エンジンは c++ です。

オッズと確率の計算が可能です。私の 2.4Ghz のラップトップでは、10 人で 10 人のプレイヤーがいる 100000 人のゲームの計算を 0.3 秒で処理できます。

正確なリアルタイム コンピューター:-)

于 2010-02-13T09:40:20.180 に答える
0

型にはまらないが簡潔:

import fj.P;
import fj.data.Stream;
import static fj.P2.untuple;
import static fj.pre.Equal.intEqual;

public Stream<Integer> pairs(Stream<Integer> hand) {
  return hand.apply(hand.map(P.<Integer, Integer>p2()))
             .filter(untuple(intEqual.eq()))
             .map(P1.<Integer>__1());
}

ここでインポートされたライブラリを取得します

于 2009-03-04T05:55:01.007 に答える