-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBlackjackDeck.m
53 lines (51 loc) · 1.72 KB
/
BlackjackDeck.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
classdef BlackjackDeck < Deck
%% PROPERTIES
properties(Access=private,Constant)
% Taken from a blackjack source, usually the range dealers cut
deckCutRange = [60 75];
end
%% CONSTRUCTOR
methods
function obj = BlackjackDeck(numDecks)
arguments
numDecks uint32 {mustBeInteger} = 6
end
obj@Deck();
% Replicate the deck to the number of copies
obj.deck = repmat(obj.deck,1,numDecks);
obj.deck = obj.shuffleDeck();
% Cutting the deck here
cutval = randi(BlackjackDeck.deckCutRange);
bottomCards = obj.deck(end-cutval+1:end);
obj.discardPile = [obj.discardPile, bottomCards];
obj.deck(end-cutval+1:end) = [];
end
end
%% PUBLIC METHODS
methods
function draw = drawCard(obj,numCards)
if nargin == 1
numCards = 1;
end
draw = drawCard@Deck(obj,numCards);
draw = arrayfun(@(card) setfield(card, 'BlackjackValue', obj.blackjackValue(card)), draw);
end
end
%% PRIVATE METHODS
methods (Access = private)
function value = blackjackValue(~, card)
switch card.Value
case {'2', '3', '4', '5', '6', '7', '8', '9', '10'}
value = str2double(card.Value);
case {'Jack', 'Queen', 'King'}
% Face card blackjack value
value = 10;
case 'Ace'
% Ace can be worth 1 or 11
value = [1, 11];
otherwise
error('Invalid card value.');
end
end
end
end