pagrom/poker

dev-master 2018-10-31 12:39 UTC

This package is not auto-updated.

Last update: 2024-09-26 18:20:28 UTC


README

一个基于PHP的德州扑克库,可以进行手牌计算、判断获胜手牌和准备手牌数据。

安装

composer require pagrom/poker

使用方法

use Pagrom\Poker\Card;
use Pagrom\Poker\Combination\WinnerDeterminant;
use Pagrom\Poker\Player;
use Pagrom\Poker\PokerHelper;
use Pagrom\Poker\Table;

$pokerHelper = new PokerHelper();

$table = new Table();

$table->addPlayer(new Player('Dean'));
$table->addPlayer(new Player('Sam'));

$table->dealCards();

$pokerHelper->determineCombinations($table);

$winnerDeterminant = new WinnerDeterminant($table);
$winners = $winnerDeterminant->getWinners();

配置

见src/config/config.php 使用自定义配置

$pokerHelper = new PokerHelper($customConfig);

占位符将被其值替换

  • :priority - 牌的优先级
  • :priority_* - 按降序排列的牌的优先级
  • :suit - 牌的花色
  • :card_* - 牌的名称,按优先级降序排列
  • :kicker - 第一踢牌
  • :second_kicker - 第二踢牌

手动发牌

$dean = $table->getPlayer('Dean');
$sam = $table->getPlayer('Sam');

$table->dealCard($dean, $pokerHelper->getPriorityByName('Q'), $pokerHelper->getSuitByName('Spade'));
$table->dealCard($dean, $pokerHelper->getPriorityByName('A'), $pokerHelper->getSuitByName('Spade'));

$table->dealCard($sam, $pokerHelper->getPriorityByName('4'), $pokerHelper->getSuitByName('Spade'));
$table->dealCard($sam, $pokerHelper->getPriorityByName('7'), $pokerHelper->getSuitByName('Club'));

$table->dealCard($table, $pokerHelper->getPriorityByName('5'), $pokerHelper->getSuitByName('Heart'));
$table->dealCard($table, $pokerHelper->getPriorityByName('2'), $pokerHelper->getSuitByName('Spade'));
$table->dealCard($table, $pokerHelper->getPriorityByName('2'), $pokerHelper->getSuitByName('Diamond'));
$table->dealCard($table, $pokerHelper->getPriorityByName('3'), $pokerHelper->getSuitByName('Heart'));
$table->dealCard($table, $pokerHelper->getPriorityByName('4'), $pokerHelper->getSuitByName('Club'));

使用自定义玩家实例

自定义玩家类应实现PlayerInterface接口。特质HasCardsTrait和HasCombinationTrait可以帮助。

use Pagrom\Poker\Interfaces\PlayerInterface;
use Pagrom\Poker\Traits\HasCardsTrait;
use Pagrom\Poker\Traits\HasCombinationTrait;

class CustomPlayer implements PlayerInterface
{
    use HasCardsTrait, HasCombinationTrait;
    
    /**
     * @var string $name
     */
    private $name;
    
    /**
     * @return string
     */
    public function getName(): string
    {
        return $this->name;
    }
}

$table->addPlayer($customPlayer);

自定义发牌的随机器

$randomizerCallback = function(array $cardsKeys): int {
    return $cardsKeys[array_rand($cardsKeys)];
};

$table = new Table($randomizerCallback);

获取手牌数据

$handData = $pokerHelper->getCombinationData($winner->getCombination(), $winnerDeterminant)