0

我发现很难找到卡片排名教程,甚至是一些可以阅读的源代码来为我指明正确的方向。

我基本上是朝着用多个创建多个函数的方向发展,in_array并从头开始编写它们,因为这样做会使三个函数变得容易。例子

    function is_trip($card1, $card2, $card3) 
    {
        if (in_array($card1, $aces) && in_array($card2, $aces) && in_array($card3, $aces)) 
        {
            $score = 9500;
            $rank = 'Three Aces';
        }
        if (in_array($card1, $kings) && in_array($card2, $kings) && in_array($card3, $kings)) 
        {
            $score = 9000;
            $rank = 'Three Kings';
        }
    } And so on ...

所以这很可能适用于三条,但对于同花顺,我会使用一种按数字组织牌的方法,因为它们按花色顺序排列在数组中。

因此,希望同花顺很简单,就$highcard + $lowcard / 2 == $midcard好像那是真的那么你就有同花顺。

至于直道,我被卡住了,很可能不得不在我目前的思维定势下使用数组,但是当它很可能更简单时,编写这似乎是很多代码..

对于同花,使用 并不难,in_array因为我只需要1-13 14-26 27-39 40-52在 an范围内in_array确定同花,但是我需要$highcardvalue $midcardvalue 来发挥作用来确定与其他人的同花。

你可能会想到这一点,What's his question??

好吧,我的问题是.. 我对牌的排名是否正确,我应该使用桶计数方法将排名放入位码并使用查找表吗?或者,如果我的方法完全愚蠢,你有什么建议我应该去哪里。

提前感谢您的帮助。

4

1 回答 1

1

非常粗糙,未经测试,但是像这样的东西呢:-

<?php
$hand = new Hand;
$hand->addCard(new Card(RankInterface::ACE, SuitInterface::SPADE));
$hand->addCard(new Card(RankInterface::QUEEN, SuitInterface::HEART));
$hand->addCard(new Card(RankInterface::KING, SuitInterface::CLUB));
$isFlush = isFlush($hand);

使用类似的东西: -

<?php
namespace Card;

interface SuitInterface {
    const
        SPADE   = 'spade',
        HEART   = 'heart',
        DIAMOND = 'diamond',
        CLUB    = 'club';
}

interface RankInterface {
    const
        JOKER   = 0,
        ACE     = 1,
        TWO     = 2,
        THREE   = 3,
        FOUR    = 4,
        FIVE    = 5,
        SIX     = 6,
        SEVEN   = 7,
        EIGHT   = 8,
        NINE    = 9,
        TEN     = 10,
        JACK    = 11,
        QUEEN   = 12,
        KING    = 13;
}

class Card {
    protected
        $rank,
        $suit;

    public function __construct($rank, $suit) {
        $this->rank = $rank;
        $this->suit = $suit;
    }

    public function getRank() {
        return $this->rank;
    }

    public function getSuit() {
        return $this->suit;
    }

    public function isSameRank(Card $card) {
        return $this->getRank() === $card->getRank();
    }

    public function isSameSuit(Card $card) {
        return $this->getSuit() === $card->getSuit();
    }
}

class Hand
{
    protected
        $storage = array();

    public function addCard(Card $card) {
        $this->storage[] = $card;
        return $this;
    }

    public function asArray() {
        return $this->storage;
    }
}

function isFlush(Hand $hand) {

    $cards = $hand->asArray();

    $first = array_shift($cards);

    foreach($cards as $card) {
        if( ! $first->isSameSuit($card)) {
            return false;
        }
    }

    return true;
}

然后,您只需要为各种有效的手/组合添加一些单独的逻辑。

于 2013-08-23T10:50:02.070 回答