-
Notifications
You must be signed in to change notification settings - Fork 3
/
dealer.service.js
117 lines (100 loc) · 3.09 KB
/
dealer.service.js
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
DealerService.$inject =['$timeout','GameService'];
function DealerService($timeout, GameService){
var service = {
newDealer: newDealer,
Dealer: Dealer
};
function newDealer(deck){
var dealer = new Dealer(deck);
return dealer;
}
function Dealer(deck){
var dealer = this;
dealer.deck = deck;
/**
* Creates initial values for dealer object
*/
dealer.init = function(){
dealer.cards = [];
dealer.handValue = 0;
dealer.isDone = false;
dealer.busted = false;
dealer.maxValue = GameService.maxValue();
dealer.minValue = 17;
};
/**
* When a new game is started, dealer gets two cards
*/
dealer.deal = function(){
dealer.init();
dealer.hit(true, false, dealer.getHandValue);
dealer.hit(false, false, dealer.getHandValue);
};
/**
* After player has completed game, tell dealer to finish
* by dealing out until hand is busted or between 17-21
* @param callback
*/
dealer.finish = function (callback) {
var loop = {
next: function(){
dealer.getHandValue();
if(dealer.handValue < dealer.minValue) {
//Animate Card In
dealer.hit(false, true, function () {
loop.next();
});
}
else{
loop.done();
}
},
done: function(){
if(dealer.handValue > dealer.maxValue){
dealer.busted = true;
}
dealer.isDone = true;
callback();
}
};
//Reveal first card, then play:
$timeout(function(){
dealer.cards.forEach(function(card){
card.hideValue = false;
});
loop.next();
},500);
};
/**
* Deals a card to the dealer's hand
* @param hideCard
* @param animate
* @param callback
*/
dealer.hit = function(hideCard, animate, callback){
var card = dealer.deck.deal();
card.hideValue = hideCard;
dealer.cards.push(card);
if(animate){
card.hideValue = true;
$timeout(function(){
card.hideValue = false;
callback();
},1000);
}
else {
callback();
}
};
/**
* Uses game service to calculate hand value
*/
dealer.getHandValue = function(){
dealer.handValue = GameService.handValue(dealer.cards);
};
dealer.init();
}
return service;
////////////////
}
export default DealerService;