Scrutinizer GitHub App not installed

We could not synchronize checks via GitHub's checks API since Scrutinizer's GitHub App is not installed for this repository.

Install GitHub App

Passed
Push — master ( 27e319...99d485 )
by Dan
04:07
created

Card   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 68
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 32
dl 0
loc 68
rs 10
c 0
b 0
f 0
wmc 11

6 Methods

Rating   Name   Duplication   Size   Complexity  
A getSuitName() 0 4 1
A __construct() 0 4 1
A getValue() 0 10 5
A isAce() 0 2 1
A getRankName() 0 6 2
A getCardID() 0 2 1
1
<?php declare(strict_types=1);
2
3
namespace Blackjack;
4
5
/**
6
 * Classic playing card for blackjack.
7
 */
8
class Card {
9
10
	// Special card ranks
11
	private const RANK_ACE = 1;
12
	private const RANK_JACK = 11;
13
	private const RANK_QUEEN = 12;
14
	private const RANK_KING = 13;
15
16
	// Mapping between ranks and display/suit name
17
	private const RANK_NAMES = [
18
		self::RANK_ACE => 'A',
19
		self::RANK_JACK => 'J',
20
		self::RANK_QUEEN => 'Q',
21
		self::RANK_KING => 'K',
22
	];
23
	private const SUITS = ['hearts', 'clubs', 'diamonds', 'spades'];
24
25
	private int $cardID; // unique ID in all the decks (0-indexed)
26
	private int $rank; // non-unique rank of the card (1-indexed)
27
28
	/**
29
	 * Create a specific card in the deck.
30
	 */
31
	public function __construct(int $cardID) {
32
		$this->cardID = $cardID;
33
		// 52 cards per deck, 13 cards per suit
34
		$this->rank = ($this->cardID % 52) % 13 + 1;
35
	}
36
37
	public function getCardID() : int {
38
		return $this->cardID;
39
	}
40
41
	/**
42
	 * Return the card's blackjack value.
43
	 */
44
	public function getValue() : int {
45
		if ($this->rank == self::RANK_JACK ||
46
		    $this->rank == self::RANK_QUEEN ||
47
		    $this->rank == self::RANK_KING) {
48
			return 10;
49
		} elseif ($this->isAce()) {
50
			return 11;
51
		} else {
52
			// For normal pip (non-face) cards, value and rank are the same.
53
			return $this->rank;
54
		}
55
	}
56
57
	public function isAce() : bool {
58
		return $this->rank == self::RANK_ACE;
59
	}
60
61
	public function getSuitName() : string {
62
		$deckID = $this->cardID % 52; //which card is this in the deck?
63
		$suitID = floor($deckID / 13);
64
		return self::SUITS[$suitID];
65
	}
66
67
	/**
68
	 * Returns the rank name of this card (of the 13 ranks).
69
	 */
70
	public function getRankName() : string {
71
		if (isset(self::RANK_NAMES[$this->rank])) {
72
			return self::RANK_NAMES[$this->rank];
73
		} else {
74
			// For normal pip (non-face) cards, name and rank are the same.
75
			return (string)$this->rank;
76
		}
77
	}
78
}
79