console-blackjack 1.0.9 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +1 -3
- data/Gemfile.lock +40 -67
- data/README.md +19 -2
- data/bj.txt +1 -1
- data/console-blackjack-1.1.0.gem +0 -0
- data/console-blackjack.gemspec +4 -3
- data/lib/blackjack/card.rb +21 -6
- data/lib/blackjack/dealer_hand.rb +21 -19
- data/lib/blackjack/hand.rb +2 -10
- data/lib/blackjack/menus.rb +27 -7
- data/lib/blackjack/player_hand.rb +10 -10
- data/lib/blackjack/player_hand_actions.rb +1 -1
- data/lib/blackjack/player_hand_draw.rb +6 -6
- data/lib/blackjack/shoe.rb +25 -36
- data/lib/blackjack/utils.rb +12 -5
- data/lib/blackjack.rb +18 -13
- data/spec/factories/blackjack_factory.rb +1 -0
- data/spec/factories/card_factory.rb +6 -1
- data/spec/factories/dealer_hand_factory.rb +1 -1
- data/spec/factories/player_hand_factory.rb +1 -1
- data/spec/factories/shoe_factory.rb +2 -1
- data/spec/lib/blackjack/card_spec.rb +51 -3
- data/spec/lib/blackjack/dealer_hand_spec.rb +31 -31
- data/spec/lib/blackjack/hand_spec.rb +2 -2
- data/spec/lib/blackjack/player_hand_spec.rb +16 -16
- data/spec/lib/blackjack/shoe_spec.rb +25 -19
- data/spec/lib/blackjack_spec.rb +123 -29
- data/spec/spec_helper.rb +1 -4
- data/ss1.png +0 -0
- data/ss2.png +0 -0
- metadata +11 -9
- data/bj.png +0 -0
- data/console-blackjack-1.0.7.gem +0 -0
- data/console-blackjack-1.0.8.gem +0 -0
data/lib/blackjack/shoe.rb
CHANGED
@@ -12,9 +12,12 @@ SHOES = {
|
|
12
12
|
}.freeze
|
13
13
|
|
14
14
|
class Shoe
|
15
|
-
|
15
|
+
CARDS_PER_DECK = 52
|
16
16
|
|
17
|
-
|
17
|
+
attr_accessor :blackjack, :num_decks, :cards
|
18
|
+
|
19
|
+
def initialize(blackjack, num_decks)
|
20
|
+
@blackjack = blackjack
|
18
21
|
@num_decks = num_decks
|
19
22
|
@cards = []
|
20
23
|
end
|
@@ -22,7 +25,6 @@ class Shoe
|
|
22
25
|
def needs_to_shuffle?
|
23
26
|
return true if cards.size.zero?
|
24
27
|
|
25
|
-
total_cards = num_decks * 52
|
26
28
|
cards_dealt = total_cards - cards.size
|
27
29
|
used = cards_dealt / total_cards.to_f * 100.0
|
28
30
|
|
@@ -38,62 +40,49 @@ class Shoe
|
|
38
40
|
num_decks.times do
|
39
41
|
(0..3).each do |suit_value|
|
40
42
|
(0..12).each do |value|
|
41
|
-
cards << Card.new(value, suit_value)
|
43
|
+
cards << Card.new(blackjack, value, suit_value)
|
42
44
|
end
|
43
45
|
end
|
44
46
|
end
|
45
47
|
shuffle
|
46
48
|
end
|
47
49
|
|
48
|
-
def
|
50
|
+
def new_irregular(values = [])
|
49
51
|
self.cards = []
|
50
|
-
|
52
|
+
while cards.count < total_cards
|
51
53
|
(0..3).each do |suit_value|
|
52
|
-
|
54
|
+
next if cards.count >= total_cards
|
55
|
+
|
56
|
+
values.each do |value|
|
57
|
+
cards << Card.new(blackjack, value, suit_value)
|
58
|
+
end
|
53
59
|
end
|
54
60
|
end
|
55
61
|
shuffle
|
56
62
|
end
|
57
63
|
|
64
|
+
def total_cards
|
65
|
+
num_decks * CARDS_PER_DECK
|
66
|
+
end
|
67
|
+
|
68
|
+
def new_aces
|
69
|
+
new_irregular([0])
|
70
|
+
end
|
71
|
+
|
58
72
|
def new_jacks
|
59
|
-
|
60
|
-
(num_decks * 10).times do
|
61
|
-
(0..3).each do |suit_value|
|
62
|
-
cards << Card.new(10, suit_value)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
shuffle
|
73
|
+
new_irregular([10])
|
66
74
|
end
|
67
75
|
|
68
76
|
def new_aces_jacks
|
69
|
-
|
70
|
-
(num_decks * 10).times do
|
71
|
-
(0..3).each do |suit_value|
|
72
|
-
cards << Card.new(0, suit_value)
|
73
|
-
cards << Card.new(10, suit_value)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
shuffle
|
77
|
+
new_irregular([0, 10])
|
77
78
|
end
|
78
79
|
|
79
80
|
def new_sevens
|
80
|
-
|
81
|
-
(num_decks * 10).times do
|
82
|
-
(0..3).each do |suit_value|
|
83
|
-
cards << Card.new(6, suit_value)
|
84
|
-
end
|
85
|
-
end
|
86
|
-
shuffle
|
81
|
+
new_irregular([6])
|
87
82
|
end
|
88
83
|
|
89
84
|
def new_eights
|
90
|
-
|
91
|
-
(num_decks * 10).times do
|
92
|
-
(0..3).each do |suit_value|
|
93
|
-
cards << Card.new(7, suit_value)
|
94
|
-
end
|
95
|
-
end
|
96
|
-
shuffle
|
85
|
+
new_irregular([7])
|
97
86
|
end
|
98
87
|
|
99
88
|
def next_card
|
data/lib/blackjack/utils.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
module Utils
|
4
4
|
def save_game
|
5
5
|
File.open(SAVE_FILE, 'w') do |file|
|
6
|
-
file.puts "#{num_decks}|#{money}|#{current_bet}"
|
6
|
+
file.puts "#{num_decks}|#{deck_type}|#{face_type}|#{money}|#{current_bet}"
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
@@ -11,9 +11,11 @@ module Utils
|
|
11
11
|
return unless File.readable?(SAVE_FILE)
|
12
12
|
|
13
13
|
a = File.read(SAVE_FILE).split('|')
|
14
|
-
self.num_decks
|
15
|
-
self.
|
16
|
-
self.
|
14
|
+
self.num_decks = a[0].to_i
|
15
|
+
self.deck_type = a[1].to_i
|
16
|
+
self.face_type = a[2].to_i
|
17
|
+
self.money = a[3].to_i
|
18
|
+
self.current_bet = a[4].to_i
|
17
19
|
end
|
18
20
|
|
19
21
|
def clear_draw_hands
|
@@ -23,7 +25,7 @@ module Utils
|
|
23
25
|
|
24
26
|
def clear_draw_hands_new_num_decks
|
25
27
|
clear_draw_hands
|
26
|
-
new_num_decks
|
28
|
+
new_num_decks($stdin)
|
27
29
|
end
|
28
30
|
|
29
31
|
def clear_draw_hands_new_deck_type
|
@@ -31,6 +33,11 @@ module Utils
|
|
31
33
|
new_deck_type
|
32
34
|
end
|
33
35
|
|
36
|
+
def clear_draw_hands_new_face_type
|
37
|
+
clear_draw_hands
|
38
|
+
new_face_type
|
39
|
+
end
|
40
|
+
|
34
41
|
def clear_draw_hands_ask_insurance
|
35
42
|
clear_draw_hands
|
36
43
|
ask_insurance
|
data/lib/blackjack.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'pry'
|
4
|
+
|
3
5
|
require_relative 'blackjack/dealer_hand'
|
4
6
|
require_relative 'blackjack/format'
|
5
7
|
require_relative 'blackjack/menus'
|
@@ -17,17 +19,20 @@ class Blackjack
|
|
17
19
|
include SplitHand
|
18
20
|
include Utils
|
19
21
|
|
20
|
-
attr_accessor :shoe, :money, :player_hands, :dealer_hand, :num_decks,
|
22
|
+
attr_accessor :shoe, :money, :player_hands, :dealer_hand, :num_decks,
|
23
|
+
:deck_type, :face_type, :current_bet, :current_hand
|
21
24
|
|
22
25
|
def initialize
|
23
26
|
@num_decks = 1
|
27
|
+
@face_type = 1
|
28
|
+
@deck_type = 1
|
24
29
|
@money = 10_000
|
25
30
|
@current_bet = 500
|
26
31
|
end
|
27
32
|
|
28
33
|
def run
|
29
34
|
load_game
|
30
|
-
@shoe = Shoe.new(num_decks)
|
35
|
+
@shoe = Shoe.new(self, num_decks)
|
31
36
|
deal_new_hand
|
32
37
|
end
|
33
38
|
|
@@ -51,14 +56,14 @@ class Blackjack
|
|
51
56
|
end
|
52
57
|
|
53
58
|
def deal_new_hand
|
54
|
-
shoe.
|
59
|
+
shoe.send("new_#{SHOES[deck_type]}") if shoe.needs_to_shuffle?
|
55
60
|
player_hand = build_new_hand
|
56
61
|
|
57
62
|
if dealer_hand.upcard_is_ace? && !player_hand.blackjack?
|
58
63
|
draw_hands
|
59
64
|
ask_insurance
|
60
65
|
elsif player_hand.done?
|
61
|
-
dealer_hand.
|
66
|
+
dealer_hand.hide_first_card = false
|
62
67
|
pay_hands
|
63
68
|
draw_hands
|
64
69
|
draw_bet_options
|
@@ -92,7 +97,7 @@ class Blackjack
|
|
92
97
|
end
|
93
98
|
|
94
99
|
def pay_hands
|
95
|
-
dealer_hand_value = dealer_hand.value(
|
100
|
+
dealer_hand_value = dealer_hand.value(:soft)
|
96
101
|
dealer_busted = dealer_hand.busted?
|
97
102
|
|
98
103
|
player_hands.each do |player_hand|
|
@@ -128,23 +133,23 @@ class Blackjack
|
|
128
133
|
out
|
129
134
|
end
|
130
135
|
|
131
|
-
def new_bet
|
136
|
+
def new_bet(input)
|
132
137
|
clear
|
133
138
|
draw_hands
|
134
139
|
|
135
140
|
puts " Current Bet: $#{Format.money(current_bet / 100)}\n"
|
136
141
|
print ' Enter New Bet: $'
|
137
142
|
|
138
|
-
self.current_bet =
|
143
|
+
self.current_bet = input.gets.to_i * 100
|
139
144
|
|
140
145
|
normalize_current_bet
|
141
146
|
deal_new_hand
|
142
147
|
end
|
143
148
|
|
144
|
-
def new_num_decks
|
149
|
+
def new_num_decks(input)
|
145
150
|
puts " Number Of Decks: #{num_decks}"
|
146
151
|
print ' New Number Of Decks (1-8): '
|
147
|
-
self.num_decks =
|
152
|
+
self.num_decks = input.gets.to_i
|
148
153
|
|
149
154
|
normalize_num_decks
|
150
155
|
clear_draw_hands_game_options
|
@@ -160,7 +165,7 @@ class Blackjack
|
|
160
165
|
player_hand.bet /= 2
|
161
166
|
player_hand.played = true
|
162
167
|
player_hand.payed = true
|
163
|
-
player_hand.status =
|
168
|
+
player_hand.status = :lost
|
164
169
|
|
165
170
|
self.money -= player_hand.bet
|
166
171
|
|
@@ -170,7 +175,7 @@ class Blackjack
|
|
170
175
|
|
171
176
|
def no_insurance
|
172
177
|
if dealer_hand.blackjack?
|
173
|
-
dealer_hand.
|
178
|
+
dealer_hand.hide_first_card = false
|
174
179
|
|
175
180
|
pay_hands
|
176
181
|
draw_hands
|
@@ -201,10 +206,10 @@ class Blackjack
|
|
201
206
|
self.current_bet = money if current_bet > money
|
202
207
|
end
|
203
208
|
|
204
|
-
def self.getc
|
209
|
+
def self.getc(input)
|
205
210
|
begin
|
206
211
|
system('stty raw -echo')
|
207
|
-
c =
|
212
|
+
c = input.getc
|
208
213
|
ensure
|
209
214
|
system('stty -raw echo')
|
210
215
|
end
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
FactoryBot.define do
|
4
4
|
factory :card do
|
5
|
+
blackjack { nil }
|
5
6
|
value { 0 }
|
6
7
|
suit { 0 }
|
7
8
|
|
@@ -37,6 +38,10 @@ FactoryBot.define do
|
|
37
38
|
value { 9 }
|
38
39
|
end
|
39
40
|
|
40
|
-
|
41
|
+
trait :jack do
|
42
|
+
value { 10 }
|
43
|
+
end
|
44
|
+
|
45
|
+
initialize_with { new(blackjack, value, suit) }
|
41
46
|
end
|
42
47
|
end
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
FactoryBot.define do
|
4
4
|
factory :shoe do
|
5
|
+
blackjack { nil }
|
5
6
|
num_decks { 1 }
|
6
7
|
cards { [] }
|
7
8
|
|
@@ -9,6 +10,6 @@ FactoryBot.define do
|
|
9
10
|
after(:build, &:new_regular)
|
10
11
|
end
|
11
12
|
|
12
|
-
initialize_with { new(num_decks) }
|
13
|
+
initialize_with { new(blackjack, num_decks) }
|
13
14
|
end
|
14
15
|
end
|
@@ -1,7 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
RSpec.describe Card do
|
4
|
-
let(:
|
4
|
+
let(:blackjack) { build(:blackjack) }
|
5
|
+
let(:card) { build(:card, blackjack:) }
|
5
6
|
|
6
7
|
describe '.new' do
|
7
8
|
it 'creates a card' do
|
@@ -18,8 +19,20 @@ RSpec.describe Card do
|
|
18
19
|
end
|
19
20
|
|
20
21
|
describe '#to_s' do
|
21
|
-
|
22
|
-
|
22
|
+
context 'with regular faces' do
|
23
|
+
it 'returns a string value' do
|
24
|
+
expect(card.to_s).to eq('🂡')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'with alternate faces' do
|
29
|
+
before do
|
30
|
+
blackjack.face_type = 2
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'returns a string value' do
|
34
|
+
expect(card.to_s).to eq('A♠')
|
35
|
+
end
|
23
36
|
end
|
24
37
|
end
|
25
38
|
|
@@ -50,4 +63,39 @@ RSpec.describe Card do
|
|
50
63
|
expect(described_class.faces[4][3]).to eq('🃕')
|
51
64
|
end
|
52
65
|
end
|
66
|
+
|
67
|
+
describe '.value' do
|
68
|
+
let(:card) { build(:card, blackjack:) }
|
69
|
+
let(:count_method) { :soft }
|
70
|
+
let(:total) { 0 }
|
71
|
+
let(:result) { described_class.value(card, count_method, total) }
|
72
|
+
|
73
|
+
it 'returns 11' do
|
74
|
+
expect(result).to eq(11)
|
75
|
+
end
|
76
|
+
|
77
|
+
context 'with a hard count' do
|
78
|
+
let(:count_method) { :hard }
|
79
|
+
|
80
|
+
it 'returns 1' do
|
81
|
+
expect(result).to eq(1)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
context 'with a total of 11' do
|
86
|
+
let(:total) { 11 }
|
87
|
+
|
88
|
+
it 'returns 1' do
|
89
|
+
expect(result).to eq(1)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
context 'with a face card' do
|
94
|
+
let(:card) { build(:card, :jack, blackjack:) }
|
95
|
+
|
96
|
+
it 'returns 10' do
|
97
|
+
expect(result).to eq(10)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
53
101
|
end
|
@@ -3,9 +3,9 @@
|
|
3
3
|
RSpec.describe DealerHand do
|
4
4
|
let(:shoe) { build(:shoe, :new_regular) }
|
5
5
|
let(:blackjack) { build(:blackjack) }
|
6
|
-
let(:dealer_hand) { build(:dealer_hand, blackjack:
|
7
|
-
let(:ace) { build(:card, :ace) }
|
8
|
-
let(:ten) { build(:card, :ten) }
|
6
|
+
let(:dealer_hand) { build(:dealer_hand, blackjack:) }
|
7
|
+
let(:ace) { build(:card, :ace, blackjack:) }
|
8
|
+
let(:ten) { build(:card, :ten, blackjack:) }
|
9
9
|
|
10
10
|
describe '.new' do
|
11
11
|
it 'creates a dealer_hand' do
|
@@ -24,7 +24,7 @@ RSpec.describe DealerHand do
|
|
24
24
|
|
25
25
|
it 'returns true' do
|
26
26
|
dealer_hand.cards << ten << ten << ten
|
27
|
-
dealer_hand.
|
27
|
+
dealer_hand.hide_first_card = false
|
28
28
|
expect(dealer_hand).to be_busted
|
29
29
|
end
|
30
30
|
end
|
@@ -32,31 +32,31 @@ RSpec.describe DealerHand do
|
|
32
32
|
describe '#value' do
|
33
33
|
context 'with a soft count' do
|
34
34
|
it 'returns 10' do
|
35
|
-
dealer_hand.cards <<
|
36
|
-
expect(dealer_hand.value(
|
35
|
+
dealer_hand.cards << ace << ten
|
36
|
+
expect(dealer_hand.value(:soft)).to eq(10)
|
37
37
|
end
|
38
38
|
|
39
39
|
it 'returns 11' do
|
40
|
-
dealer_hand.cards <<
|
41
|
-
expect(dealer_hand.value(
|
40
|
+
dealer_hand.cards << ten << ace
|
41
|
+
expect(dealer_hand.value(:soft)).to eq(11)
|
42
42
|
end
|
43
43
|
|
44
44
|
it 'returns 12' do
|
45
45
|
dealer_hand.cards << ten << ace << ace
|
46
|
-
dealer_hand.
|
47
|
-
expect(dealer_hand.value(
|
46
|
+
dealer_hand.hide_first_card = false
|
47
|
+
expect(dealer_hand.value(:soft)).to eq(12)
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
51
|
context 'with a hard count' do
|
52
52
|
it 'returns 10' do
|
53
|
-
dealer_hand.cards <<
|
54
|
-
expect(dealer_hand.value(
|
53
|
+
dealer_hand.cards << ace << ten
|
54
|
+
expect(dealer_hand.value(:hard)).to eq(10)
|
55
55
|
end
|
56
56
|
|
57
57
|
it 'returns 1' do
|
58
|
-
dealer_hand.cards <<
|
59
|
-
expect(dealer_hand.value(
|
58
|
+
dealer_hand.cards << ten << ace
|
59
|
+
expect(dealer_hand.value(:hard)).to eq(1)
|
60
60
|
end
|
61
61
|
end
|
62
62
|
end
|
@@ -74,21 +74,21 @@ RSpec.describe DealerHand do
|
|
74
74
|
end
|
75
75
|
|
76
76
|
describe '#draw' do
|
77
|
-
it 'returns " 🂪
|
78
|
-
dealer_hand.cards <<
|
79
|
-
expected = ' 🂪
|
77
|
+
it 'returns " 🂠 🂪 ⇒ 10"' do
|
78
|
+
dealer_hand.cards << ace << ten
|
79
|
+
expected = ' 🂠 🂪 ⇒ 10'
|
80
80
|
expect(dealer_hand.draw).to eq(expected)
|
81
81
|
end
|
82
82
|
|
83
|
-
it 'returns " 🂡
|
84
|
-
dealer_hand.cards <<
|
85
|
-
expected = ' 🂡
|
83
|
+
it 'returns " 🂠 🂡 ⇒ 11"' do
|
84
|
+
dealer_hand.cards << ten << ace
|
85
|
+
expected = ' 🂠 🂡 ⇒ 11'
|
86
86
|
expect(dealer_hand.draw).to eq(expected)
|
87
87
|
end
|
88
88
|
|
89
|
-
it 'returns " 🂡 🂪
|
89
|
+
it 'returns " 🂡 🂪 ⇒ 21"' do
|
90
90
|
dealer_hand.cards << ace << ten
|
91
|
-
dealer_hand.
|
91
|
+
dealer_hand.hide_first_card = false
|
92
92
|
expected = ' 🂡 🂪 ⇒ 21'
|
93
93
|
expect(dealer_hand.draw).to eq(expected)
|
94
94
|
end
|
@@ -97,30 +97,30 @@ RSpec.describe DealerHand do
|
|
97
97
|
describe '#both_values' do
|
98
98
|
context 'with a soft count' do
|
99
99
|
it 'returns [10, 10]' do
|
100
|
-
dealer_hand.cards <<
|
100
|
+
dealer_hand.cards << ace << ten
|
101
101
|
expect(dealer_hand.both_values).to eq([10, 10])
|
102
102
|
end
|
103
103
|
|
104
104
|
it 'returns [11, 1]' do
|
105
|
-
dealer_hand.cards <<
|
105
|
+
dealer_hand.cards << ten << ace
|
106
106
|
expect(dealer_hand.both_values).to eq([11, 1])
|
107
107
|
end
|
108
108
|
|
109
109
|
it 'returns [12, 12]' do
|
110
110
|
dealer_hand.cards << ten << ace << ace
|
111
|
-
dealer_hand.
|
111
|
+
dealer_hand.hide_first_card = false
|
112
112
|
expect(dealer_hand.both_values).to eq([12, 12])
|
113
113
|
end
|
114
114
|
end
|
115
115
|
|
116
116
|
context 'with a hard count' do
|
117
117
|
it 'returns [10, 10]' do
|
118
|
-
dealer_hand.cards <<
|
118
|
+
dealer_hand.cards << ace << ten
|
119
119
|
expect(dealer_hand.both_values).to eq([10, 10])
|
120
120
|
end
|
121
121
|
|
122
122
|
it 'returns [11, 1]' do
|
123
|
-
dealer_hand.cards <<
|
123
|
+
dealer_hand.cards << ten << ace
|
124
124
|
expect(dealer_hand.both_values).to eq([11, 1])
|
125
125
|
end
|
126
126
|
end
|
@@ -172,13 +172,13 @@ RSpec.describe DealerHand do
|
|
172
172
|
it 'hides down card when no blackjack' do
|
173
173
|
allow(dealer_hand).to receive(:blackjack?).and_return(false)
|
174
174
|
dealer_hand.play
|
175
|
-
expect(dealer_hand.
|
175
|
+
expect(dealer_hand.hide_first_card).to be_truthy
|
176
176
|
end
|
177
177
|
|
178
178
|
it 'shows down card if blackjack' do
|
179
179
|
allow(dealer_hand).to receive(:blackjack?).and_return(true)
|
180
180
|
dealer_hand.play
|
181
|
-
expect(dealer_hand.
|
181
|
+
expect(dealer_hand.hide_first_card).to be_falsey
|
182
182
|
end
|
183
183
|
|
184
184
|
it 'does not deal any cards' do
|
@@ -197,13 +197,13 @@ RSpec.describe DealerHand do
|
|
197
197
|
it 'shows down card if not blackjack' do
|
198
198
|
allow(dealer_hand).to receive(:blackjack?).and_return(false)
|
199
199
|
dealer_hand.play
|
200
|
-
expect(dealer_hand.
|
200
|
+
expect(dealer_hand.hide_first_card).to be_falsey
|
201
201
|
end
|
202
202
|
|
203
203
|
it 'shows down card if blackjack' do
|
204
204
|
allow(dealer_hand).to receive(:blackjack?).and_return(true)
|
205
205
|
dealer_hand.play
|
206
|
-
expect(dealer_hand.
|
206
|
+
expect(dealer_hand.hide_first_card).to be_falsey
|
207
207
|
end
|
208
208
|
|
209
209
|
it 'deals required cards' do
|
@@ -2,8 +2,8 @@
|
|
2
2
|
|
3
3
|
RSpec.describe Hand do
|
4
4
|
let(:shoe) { build(:shoe, :new_regular) }
|
5
|
-
let(:blackjack) { build(:blackjack, shoe:
|
6
|
-
let(:hand) { build(:hand, blackjack:
|
5
|
+
let(:blackjack) { build(:blackjack, shoe:) }
|
6
|
+
let(:hand) { build(:hand, blackjack:) }
|
7
7
|
|
8
8
|
describe '.new' do
|
9
9
|
it 'creates a hand' do
|
@@ -2,10 +2,10 @@
|
|
2
2
|
|
3
3
|
RSpec.describe PlayerHand do
|
4
4
|
let(:blackjack) { build(:blackjack, shoe: build(:shoe, :new_regular)) }
|
5
|
-
let(:player_hand) { build(:player_hand, blackjack:
|
6
|
-
let(:dealer_hand) { build(:dealer_hand, blackjack:
|
7
|
-
let(:ace) { build(:card, :ace) }
|
8
|
-
let(:ten) { build(:card, :ten) }
|
5
|
+
let(:player_hand) { build(:player_hand, blackjack:) }
|
6
|
+
let(:dealer_hand) { build(:dealer_hand, blackjack:) }
|
7
|
+
let(:ace) { build(:card, :ace, blackjack:) }
|
8
|
+
let(:ten) { build(:card, :ten, blackjack:) }
|
9
9
|
|
10
10
|
describe '.new' do
|
11
11
|
it 'creates a player_hand' do
|
@@ -21,7 +21,7 @@ RSpec.describe PlayerHand do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'has an unknown status' do
|
24
|
-
expect(player_hand.status).to eq(
|
24
|
+
expect(player_hand.status).to eq(:unknown)
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'has not been payed' do
|
@@ -38,21 +38,21 @@ RSpec.describe PlayerHand do
|
|
38
38
|
|
39
39
|
it 'draws a lost hand' do
|
40
40
|
player_hand.cards << ace << ace
|
41
|
-
player_hand.status =
|
41
|
+
player_hand.status = :lost
|
42
42
|
expected = " 🂡 🂡 ⇒ 12 -$5.00 Lose!\n\n"
|
43
43
|
expect(player_hand.draw(1)).to eq(expected)
|
44
44
|
end
|
45
45
|
|
46
46
|
it 'draws a won hand' do
|
47
47
|
player_hand.cards << ace << ace
|
48
|
-
player_hand.status =
|
48
|
+
player_hand.status = :won
|
49
49
|
expected = " 🂡 🂡 ⇒ 12 +$5.00 Won!\n\n"
|
50
50
|
expect(player_hand.draw(1)).to eq(expected)
|
51
51
|
end
|
52
52
|
|
53
53
|
it 'draws a push hand' do
|
54
54
|
player_hand.cards << ace << ace
|
55
|
-
player_hand.status =
|
55
|
+
player_hand.status = :push
|
56
56
|
expected = " 🂡 🂡 ⇒ 12 $5.00 Push\n\n"
|
57
57
|
expect(player_hand.draw(1)).to eq(expected)
|
58
58
|
end
|
@@ -73,19 +73,19 @@ RSpec.describe PlayerHand do
|
|
73
73
|
context 'with a soft count' do
|
74
74
|
it 'returns 21' do
|
75
75
|
player_hand.cards << ten << ace
|
76
|
-
expect(player_hand.value(
|
76
|
+
expect(player_hand.value(:soft)).to eq(21)
|
77
77
|
end
|
78
78
|
|
79
79
|
it 'returns 12' do
|
80
80
|
player_hand.cards << ten << ace << ace
|
81
|
-
expect(player_hand.value(
|
81
|
+
expect(player_hand.value(:soft)).to eq(12)
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
85
|
context 'with a hard count' do
|
86
86
|
it 'returns 11' do
|
87
87
|
player_hand.cards << ten << ace
|
88
|
-
expect(player_hand.value(
|
88
|
+
expect(player_hand.value(:hard)).to eq(11)
|
89
89
|
end
|
90
90
|
end
|
91
91
|
end
|
@@ -328,7 +328,7 @@ RSpec.describe PlayerHand do
|
|
328
328
|
end
|
329
329
|
|
330
330
|
context 'when done' do
|
331
|
-
let(:dealer_hand) { build(:dealer_hand, blackjack:
|
331
|
+
let(:dealer_hand) { build(:dealer_hand, blackjack:) }
|
332
332
|
|
333
333
|
before do
|
334
334
|
allow(player_hand).to receive(:done?).and_return(true)
|
@@ -560,7 +560,7 @@ RSpec.describe PlayerHand do
|
|
560
560
|
context 'when dealer busted' do
|
561
561
|
it 'hand is won' do
|
562
562
|
player_hand.pay(22, true)
|
563
|
-
expect(player_hand.status).to eq(
|
563
|
+
expect(player_hand.status).to eq(:won)
|
564
564
|
end
|
565
565
|
end
|
566
566
|
|
@@ -574,7 +574,7 @@ RSpec.describe PlayerHand do
|
|
574
574
|
it 'hand status is won' do
|
575
575
|
player_hand.cards << ten << ten
|
576
576
|
player_hand.pay(18, false)
|
577
|
-
expect(player_hand.status).to eq(
|
577
|
+
expect(player_hand.status).to eq(:won)
|
578
578
|
end
|
579
579
|
|
580
580
|
it 'blackjack money is increased by player hand bet' do
|
@@ -592,7 +592,7 @@ RSpec.describe PlayerHand do
|
|
592
592
|
it 'hand is lost' do
|
593
593
|
player_hand.cards << ten << build(:card, :seven)
|
594
594
|
player_hand.pay(18, false)
|
595
|
-
expect(player_hand.status).to eq(
|
595
|
+
expect(player_hand.status).to eq(:lost)
|
596
596
|
end
|
597
597
|
|
598
598
|
it 'blackjack money is descreased by player hand bet' do
|
@@ -604,7 +604,7 @@ RSpec.describe PlayerHand do
|
|
604
604
|
it 'hand is push' do
|
605
605
|
player_hand.cards << ten << build(:card, :seven)
|
606
606
|
player_hand.pay(17, false)
|
607
|
-
expect(player_hand.status).to eq(
|
607
|
+
expect(player_hand.status).to eq(:push)
|
608
608
|
end
|
609
609
|
|
610
610
|
it 'blackjack money is unaltered' do
|