garak/card

A PHP library to manage generic card games

v0.5.0 2024-04-02 06:30 UTC

This package is auto-updated.

Last update: 2024-11-03 17:32:27 UTC


README

Latest Stable Version Latest Unstable Version License PHP Version Require Maintainability Test Coverage

https://commons.wikimedia.org/wiki/Category:Playing_cards#/media/File:A_pile_of_playing_cards.jpg

Introduction

This library offers a few VO classes to use inside Card-related applications:

  • Card: represents a Card, for example an ace of spades.
  • Rank: represents the rank value of a Card, for example "A" or "7" ("T" is used for 10, to keep same length).
  • Suit: represents the card suit, for example spades or diamonds.

Some more classes, more elaborate, are available. They are abstract, and thus require a custom implementation to extend them:

  • Hand: represents a set of Card objects, usually the ones assigned to a player
  • HandsTrick: represents a trick of hands (think for example Poker, when players show their hands to declare a winner)
  • CardTrick: represents a trick of cards (think for example the 4 cards of a Bridge turn)

Installation

Just use composer require garak/card.

Usage

Example:

<?php

require 'vendor/autoload.php';

use Garak\Card\Card;
use Garak\Card\Rank;
use Garak\Card\Suit;

$card = new Card(new Rank('A'), new Suit('d'));
echo $card; // will output "Ad"

$card = new Card(new Rank('7'), new Suit('s'));
echo $card->toText(); // will output "7♠"

$card = Card::fromRankSuit('Kh');
echo $card->toUnicode(); // will output "🂾"

You can also get a full deck:

<?php

require 'vendor/autoload.php';

use Garak\Card\Card;

$orderedCards = Card::getDeck();
$shuffledCards = Card::getDeck(true);
$doubleDeckWithJokers = Card::getDeck(true, 2, true);