1

問題:インターネットプログラミングクラス用のビデオポーカーゲームを作成しています。

以下のロジックに何かが欠けていることを除いて、他のすべてが機能しています。私が持っているのが3種類の場合、フルハウスの場合はtrueに戻ります。

私はこの種の作品の3つの論理を知っています。しかし、3 of a Kindに関係していない2枚のカードを比較すると、何かがおかしいところです。

コードは次のとおりです。

//Calculate if Full House exist
function checkHouse()
{
    $kindFlag = false;
    $pairFlag = false;
    $tempCardValue = 0;
    $temp = array();
    $counter = 0;

    //check for 3 of a kind, save card positions so they aren't tested for a pair
    for($i=0; $i<3; $i++)
    {
        for($j=($i+1); $j<4; $j++)
        {
            for($k=($j+1); $k<5; $k++)
            {
                if($this->Hand[$i]->GetSortValue() == $this->Hand[$j]->GetSortValue() && $this->Hand[$i]->GetSortValue() == $this->Hand[$k]->GetSortValue())
                {
                    $kindFlag =  true;
                    $tempCardValue = $this->Hand[$i]->GetSortValue();
                    break 3;
                }
            }
        }
    }

    //Checks 2 remaining cards to see if they match
    for($i=0; $i<5; $i++)
    {
        if($this->Hand[$i]->GetSortValue() != $tempCardValue)
        {
            $temp[$counter] = $this->Hand[$i]->GetSortValue();
            $counter++;
        }
    }
    if($temp[0] == $temp[1])
    {
        $pairFlag = true;
    }

    //Computes Full House or not
    if($pairFlag && $kindFlag)
        return true;
    else
        return false;
}
4

4 に答える 4

4

単なる提案ですが、カードの実装は非常に複雑に思えます。ペアやフルハウスのチェックは簡単にできるはずですが、そうではありません。

Cardというクラスから始めます(これはメモリからのものであるため、構文エラーなどが発生する可能性があります)。

class Card {
  var $index;
  var $suit; // 0 to 3 you can define which is what
  var $value; // 0 to 12, aces are 12 or 0 or you can actually put their value this is just quick and dirty
  function Card($index) {
      $this->index = index;
      $this->suit = index % 13;
      $this->value = index % 4;
  }
}

次に、Handというクラスを追加すると、結果が表になります。

class Hand {

    $values = array(); // value of cards
    $suits = array();
    $cards = array();

    function Hand($cards) {
        $this->cards = $cards;
    }
    function checkResult() {
         foreach ($this->cards as $card) {
              $values[$card->value]++;
              $suits[$card->suit]++;
         }

    }
   function getPairs() {
       $pairs = array();
       foreach ($values as $key=>$value) {
           if ($value == 2) 
               $pairs[] = $value;

       }
      return $pairs;
   }

   function getThreeOfAKind() {
      $result = false;
      foreach ($values as $key=>$value) {
         if ($value == 3)
           return $key;
       }
      return false;
   }

}

その後、あなたは呼び出すことができます

$hand = new Hand($arrayOfCards);
$hand->checkResult();
echo "This hand has this many pairs: " + count($hand->getPairs());
echo "Full house? " + (count($hand->getPairs()) + $hand->getThreeOfAKind !== false);

残りのカードチェックをHandクラスに実装するのは簡単です。

function checkFlush() {
   foreach ($this->suits as $suit=>$num) {
    if ($num == 5) 
      return $suit;

   }
  return false;
}

など...私はそれほど多くのコードを書くつもりはありませんでした、ごめんなさい、笑

于 2012-11-03T18:28:10.187 に答える
2

完全な代替として:

13intの配列があります。これは、エースからキングまでの数を表します。

手を1回だけスピンし、そのカードの値のカウントを増やします。

次に、フルハウスの場合、アレイには3と2が含まれている必要があります。この手法により、他の手の検出と手の比較も簡素化されます。

于 2012-11-03T18:25:00.063 に答える
0

ループはi=3からi=5に見えるべきですか?

// replace ...
// for($i=0; $i<5; $i++)
// with ...
for($i=3; $i<5; $i++)
于 2012-11-03T18:18:46.000 に答える
0

家の全額をJavaで確認したい場合は、次のコードを使用してください。

public boolean fullhouse()
    {
        int l_iAce=0,l_iDeuce=0,l_iThree=0,l_iFour=0,l_iFive=0,l_iSix=0,l_iSeven=0,l_iEight=0,l_iNine=0,l_iTen=0,l_iJack=0,l_iQueen=0,l_iKing=0;
        int []l_iSuit=new int[5];
        int []l_iRank=new int[5];
        for(int i=0;i< 5;i++)
        {
            for(int j=0;j<56;j++)
            {
                if(number[i] == j )
                {
                    l_iSuit[i]=suit[j];
                    l_iRank[i]=rank[j];
                }
            }
        }

        for(int i=0;i< 5;i++)
        {

            switch(l_iRank[i])
            {
                case 1:
                    l_iAce++;
                break;

                case 2:
                    l_iDeuce++;
                break;

                case 3:
                    l_iThree++;
                break;

                case 4:
                    l_iFour++;
                break;

                case 5:
                    l_iFive++;
                break;

                case 6:
                    l_iSix++;
                break;

                case 7:
                    l_iSeven++;
                break;

                case 8:
                    l_iEight++;
                break;

                case 9:
                    l_iNine++;
                break;

                case 10:
                    l_iTen++;
                break;

                case 11:
                    l_iJack++;
                break;

                case 12:
                    l_iQueen++;
                break;

                case 13:
                    l_iKing++;
                break;
            }
        }

        if(l_iAce == 3)
        {
            if(l_iDeuce == 2 || l_iThree == 2 || l_iFour == 2 || l_iFive == 2|| l_iSix == 2|| l_iSeven == 2|| l_iEight == 2|| l_iNine == 2|| l_iTen == 2|| l_iJack == 2|| l_iQueen == 2|| l_iKing== 2)
            {
                return true;
            }
        }
        else if(l_iDeuce == 3)
        {
            if(l_iAce == 2 || l_iThree == 2 || l_iFour == 2 || l_iFive == 2|| l_iSix == 2|| l_iSeven == 2|| l_iEight == 2|| l_iNine == 2|| l_iTen == 2|| l_iJack == 2|| l_iQueen == 2|| l_iKing== 2)
            {
                return true;
            }
        }
        else if(l_iThree == 3)
        {
            if(l_iAce == 2 || l_iDeuce == 2 || l_iFour == 2 || l_iFive == 2|| l_iSix == 2|| l_iSeven == 2|| l_iEight == 2|| l_iNine == 2|| l_iTen == 2|| l_iJack == 2|| l_iQueen == 2|| l_iKing== 2)
            {
                return true;
            }
        }
        else if(l_iFour == 3)
        {
            if(l_iAce == 2 || l_iDeuce == 2 || l_iThree == 2 || l_iFive == 2|| l_iSix == 2|| l_iSeven == 2|| l_iEight == 2|| l_iNine == 2|| l_iTen == 2|| l_iJack == 2|| l_iQueen == 2|| l_iKing== 2)
            {
                return true;
            }
        }
        else if(l_iFive == 3)
        {
            if(l_iAce == 2 || l_iDeuce == 2 || l_iThree == 2 || l_iFour == 2|| l_iSix == 2|| l_iSeven == 2|| l_iEight == 2|| l_iNine == 2|| l_iTen == 2|| l_iJack == 2|| l_iQueen == 2|| l_iKing== 2)
            {
                return true;
            }
        }
        else if(l_iSix == 3)
        {
            if(l_iAce == 2 || l_iDeuce == 2 || l_iThree == 2 || l_iFour == 2|| l_iFive == 2|| l_iSeven == 2|| l_iEight == 2|| l_iNine == 2|| l_iTen == 2|| l_iJack == 2|| l_iQueen == 2|| l_iKing== 2)
            {
                return true;
            }
        }
        else if(l_iSeven == 3)
        {
            if(l_iAce == 2 || l_iDeuce == 2 || l_iThree == 2 || l_iFour == 2|| l_iFive == 2|| l_iSix == 2|| l_iEight == 2|| l_iNine == 2|| l_iTen == 2|| l_iJack == 2|| l_iQueen == 2|| l_iKing== 2)
            {
                return true;
            }
        }
        else if(l_iEight == 3)
        {
            if(l_iAce == 2 || l_iDeuce == 2 || l_iThree == 2 || l_iFour == 2|| l_iFive == 2|| l_iSix == 2|| l_iSeven == 2|| l_iNine == 2|| l_iTen == 2|| l_iJack == 2|| l_iQueen == 2|| l_iKing== 2)
            {
                return true;
            }
        }
        else if(l_iNine == 3)
        {
            if(l_iAce == 2 || l_iDeuce == 2 || l_iThree == 2 || l_iFour == 2|| l_iFive == 2|| l_iSix == 2|| l_iSeven == 2|| l_iEight == 2|| l_iTen == 2|| l_iJack == 2|| l_iQueen == 2|| l_iKing== 2)
            {
                return true;
            }
        }
        else if(l_iTen == 3)
        {
            if(l_iAce == 2 || l_iDeuce == 2 || l_iThree == 2 || l_iFour == 2|| l_iFive == 2|| l_iSix == 2|| l_iSeven == 2|| l_iEight == 2|| l_iNine == 2|| l_iJack == 2|| l_iQueen == 2|| l_iKing== 2)
            {
                return true;
            }
        }
        else if(l_iJack == 3)
        {
            if(l_iAce == 2 || l_iDeuce == 2 || l_iThree == 2 || l_iFour == 2|| l_iFive == 2|| l_iSix == 2|| l_iSeven == 2|| l_iEight == 2|| l_iNine == 2|| l_iTen == 2|| l_iQueen == 2|| l_iKing== 2)
            {
                return true;
            }
        }
        else if(l_iQueen == 3)
        {
            if(l_iAce == 2 || l_iDeuce == 2 || l_iThree == 2 || l_iFour == 2|| l_iFive == 2|| l_iSix == 2|| l_iSeven == 2|| l_iEight == 2|| l_iNine == 2|| l_iTen == 2|| l_iJack == 2|| l_iKing== 2)
            {
                return true;
            }
        }
        else if(l_iKing == 3)
        {
            if(l_iAce == 2 || l_iDeuce == 2 || l_iThree == 2 || l_iFour == 2|| l_iFive == 2|| l_iSix == 2|| l_iSeven == 2|| l_iEight == 2|| l_iNine == 2|| l_iTen == 2|| l_iJack == 2|| l_iQueen== 2)
            {
                return true;
            }
        }

        return false;   
}
于 2013-03-05T09:20:25.877 に答える