console-blackjack 1.0.7 → 1.1.0
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 +3 -2
- data/Gemfile.lock +38 -67
- data/README.md +3 -2
- data/bj.txt +1 -1
- data/{bj.png → console-blackjack-1.0.7.gem} +0 -0
- data/console-blackjack-1.0.8.gem +0 -0
- data/console-blackjack-1.0.9.gem +0 -0
- data/console-blackjack.gemspec +4 -3
- data/lib/blackjack/card.rb +16 -4
- data/lib/blackjack/dealer_hand.rb +1 -1
- data/lib/blackjack/hand.rb +1 -1
- data/lib/blackjack/menus.rb +35 -18
- data/lib/blackjack/player_hand.rb +18 -21
- data/lib/blackjack/shoe.rb +25 -36
- data/lib/blackjack/utils.rb +11 -4
- data/lib/blackjack.rb +11 -6
- data/spec/factories/blackjack_factory.rb +1 -0
- data/spec/factories/card_factory.rb +2 -1
- data/spec/factories/shoe_factory.rb +2 -1
- data/spec/lib/blackjack/card_spec.rb +16 -4
- data/spec/lib/blackjack/dealer_hand_spec.rb +8 -15
- data/spec/lib/blackjack/player_hand_spec.rb +79 -24
- data/spec/lib/blackjack/shoe_spec.rb +24 -17
- data/spec/lib/blackjack_spec.rb +162 -54
- data/spec/spec_helper.rb +4 -5
- data/ss1.png +0 -0
- data/ss2.png +0 -0
- metadata +10 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a97facbefaaf3b5fad5b2051e997180a69ec440671f113d42185af30f2083dfa
|
4
|
+
data.tar.gz: c5d018999a9fa12d3c61a0c871deefc3196cfd79bb560dd0caacd4987b6b9a39
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f7e7b7079ae568d62bf9bf0ede19b1815a64c0b346c81a14830b02bc5133d116bfcc3f74f5a5408933a2ac5c584d96eceb7544fb163d54166a01b312a5e35497
|
7
|
+
data.tar.gz: 1f261b2eea702d06f3936c30e678e1c74594379a423e58583ac74b6de98ef8855519dcc3390aeddfa71beb841eac8a5996161193c2beadadcb3726904d1b5496
|
data/Gemfile
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
ruby '3.0.3'
|
4
|
+
|
3
5
|
source 'https://rubygems.org'
|
4
6
|
|
5
|
-
gem 'coveralls', require: false
|
6
7
|
gem 'factory_bot'
|
7
8
|
gem 'pry'
|
8
9
|
gem 'rake'
|
9
|
-
gem 'rest-client', '>= 1.8.0'
|
10
10
|
gem 'rspec'
|
11
11
|
gem 'rubocop', require: false
|
12
|
+
gem 'rubocop-rake'
|
12
13
|
gem 'rubocop-rspec'
|
13
14
|
gem 'simplecov', require: false
|
data/Gemfile.lock
CHANGED
@@ -1,115 +1,86 @@
|
|
1
1
|
GEM
|
2
2
|
remote: https://rubygems.org/
|
3
3
|
specs:
|
4
|
-
activesupport (
|
4
|
+
activesupport (7.0.2.3)
|
5
5
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
6
6
|
i18n (>= 1.6, < 2)
|
7
7
|
minitest (>= 5.1)
|
8
8
|
tzinfo (~> 2.0)
|
9
|
-
zeitwerk (~> 2.3)
|
10
9
|
ast (2.4.2)
|
11
10
|
coderay (1.1.3)
|
12
|
-
concurrent-ruby (1.1.
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
simplecov (>= 0.7)
|
17
|
-
term-ansicolor
|
18
|
-
thor
|
19
|
-
diff-lcs (1.4.4)
|
20
|
-
docile (1.3.5)
|
21
|
-
domain_name (0.5.20190701)
|
22
|
-
unf (>= 0.0.5, < 1.0.0)
|
23
|
-
factory_bot (6.1.0)
|
11
|
+
concurrent-ruby (1.1.10)
|
12
|
+
diff-lcs (1.5.0)
|
13
|
+
docile (1.4.0)
|
14
|
+
factory_bot (6.2.1)
|
24
15
|
activesupport (>= 5.0.0)
|
25
|
-
|
26
|
-
http-cookie (1.0.3)
|
27
|
-
domain_name (~> 0.5)
|
28
|
-
i18n (1.8.10)
|
16
|
+
i18n (1.10.0)
|
29
17
|
concurrent-ruby (~> 1.0)
|
30
18
|
method_source (1.0.0)
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
minitest (5.14.4)
|
35
|
-
multi_json (1.15.0)
|
36
|
-
netrc (0.11.0)
|
37
|
-
parallel (1.20.1)
|
38
|
-
parser (3.0.1.1)
|
19
|
+
minitest (5.15.0)
|
20
|
+
parallel (1.22.1)
|
21
|
+
parser (3.1.1.0)
|
39
22
|
ast (~> 2.4.1)
|
40
23
|
pry (0.14.1)
|
41
24
|
coderay (~> 1.1)
|
42
25
|
method_source (~> 1.0)
|
43
|
-
rainbow (3.
|
44
|
-
rake (13.0.
|
45
|
-
regexp_parser (2.
|
46
|
-
rest-client (2.1.0)
|
47
|
-
http-accept (>= 1.7.0, < 2.0)
|
48
|
-
http-cookie (>= 1.0.2, < 2.0)
|
49
|
-
mime-types (>= 1.16, < 4.0)
|
50
|
-
netrc (~> 0.8)
|
26
|
+
rainbow (3.1.1)
|
27
|
+
rake (13.0.6)
|
28
|
+
regexp_parser (2.2.1)
|
51
29
|
rexml (3.2.5)
|
52
|
-
rspec (3.
|
53
|
-
rspec-core (~> 3.
|
54
|
-
rspec-expectations (~> 3.
|
55
|
-
rspec-mocks (~> 3.
|
56
|
-
rspec-core (3.
|
57
|
-
rspec-support (~> 3.
|
58
|
-
rspec-expectations (3.
|
30
|
+
rspec (3.11.0)
|
31
|
+
rspec-core (~> 3.11.0)
|
32
|
+
rspec-expectations (~> 3.11.0)
|
33
|
+
rspec-mocks (~> 3.11.0)
|
34
|
+
rspec-core (3.11.0)
|
35
|
+
rspec-support (~> 3.11.0)
|
36
|
+
rspec-expectations (3.11.0)
|
59
37
|
diff-lcs (>= 1.2.0, < 2.0)
|
60
|
-
rspec-support (~> 3.
|
61
|
-
rspec-mocks (3.
|
38
|
+
rspec-support (~> 3.11.0)
|
39
|
+
rspec-mocks (3.11.0)
|
62
40
|
diff-lcs (>= 1.2.0, < 2.0)
|
63
|
-
rspec-support (~> 3.
|
64
|
-
rspec-support (3.
|
65
|
-
rubocop (1.
|
41
|
+
rspec-support (~> 3.11.0)
|
42
|
+
rspec-support (3.11.0)
|
43
|
+
rubocop (1.26.1)
|
66
44
|
parallel (~> 1.10)
|
67
|
-
parser (>= 3.
|
45
|
+
parser (>= 3.1.0.0)
|
68
46
|
rainbow (>= 2.2.2, < 4.0)
|
69
47
|
regexp_parser (>= 1.8, < 3.0)
|
70
48
|
rexml
|
71
|
-
rubocop-ast (>= 1.
|
49
|
+
rubocop-ast (>= 1.16.0, < 2.0)
|
72
50
|
ruby-progressbar (~> 1.7)
|
73
51
|
unicode-display_width (>= 1.4.0, < 3.0)
|
74
|
-
rubocop-ast (1.
|
75
|
-
parser (>= 3.
|
76
|
-
rubocop-
|
52
|
+
rubocop-ast (1.16.0)
|
53
|
+
parser (>= 3.1.1.0)
|
54
|
+
rubocop-rake (0.6.0)
|
77
55
|
rubocop (~> 1.0)
|
78
|
-
|
56
|
+
rubocop-rspec (2.9.0)
|
57
|
+
rubocop (~> 1.19)
|
79
58
|
ruby-progressbar (1.11.0)
|
80
59
|
simplecov (0.21.2)
|
81
60
|
docile (~> 1.1)
|
82
61
|
simplecov-html (~> 0.11)
|
83
62
|
simplecov_json_formatter (~> 0.1)
|
84
63
|
simplecov-html (0.12.3)
|
85
|
-
simplecov_json_formatter (0.1.
|
86
|
-
sync (0.5.0)
|
87
|
-
term-ansicolor (1.7.1)
|
88
|
-
tins (~> 1.0)
|
89
|
-
thor (1.1.0)
|
90
|
-
tins (1.28.0)
|
91
|
-
sync
|
64
|
+
simplecov_json_formatter (0.1.4)
|
92
65
|
tzinfo (2.0.4)
|
93
66
|
concurrent-ruby (~> 1.0)
|
94
|
-
|
95
|
-
unf_ext
|
96
|
-
unf_ext (0.0.7.7)
|
97
|
-
unicode-display_width (2.0.0)
|
98
|
-
zeitwerk (2.4.2)
|
67
|
+
unicode-display_width (2.1.0)
|
99
68
|
|
100
69
|
PLATFORMS
|
101
70
|
ruby
|
102
71
|
|
103
72
|
DEPENDENCIES
|
104
|
-
coveralls
|
105
73
|
factory_bot
|
106
74
|
pry
|
107
75
|
rake
|
108
|
-
rest-client (>= 1.8.0)
|
109
76
|
rspec
|
110
77
|
rubocop
|
78
|
+
rubocop-rake
|
111
79
|
rubocop-rspec
|
112
80
|
simplecov
|
113
81
|
|
82
|
+
RUBY VERSION
|
83
|
+
ruby 3.0.3p157
|
84
|
+
|
114
85
|
BUNDLED WITH
|
115
|
-
2.
|
86
|
+
2.2.32
|
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# console-blackjack-ruby
|
2
2
|
|
3
|
-

|
4
|
+
|
5
|
+

|
4
6
|
|
5
7
|
## Getting Started
|
6
8
|
|
@@ -15,7 +17,6 @@ Run:
|
|
15
17
|
## Status
|
16
18
|
|
17
19
|
[](https://github.com/gdonald/console-blackjack-ruby/actions)
|
18
|
-
[](https://coveralls.io/github/gdonald/console-blackjack-ruby?branch=master)
|
19
20
|
[](https://rubygems.org/gems/console-blackjack)
|
20
21
|
|
21
22
|
## License
|
data/bj.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1|
|
1
|
+
1|1|1|9000|500
|
Binary file
|
Binary file
|
Binary file
|
data/console-blackjack.gemspec
CHANGED
@@ -3,9 +3,9 @@
|
|
3
3
|
require 'rake'
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
|
+
spec.required_ruby_version = '>= 3.0'
|
6
7
|
spec.name = 'console-blackjack'
|
7
|
-
spec.version = '1.0
|
8
|
-
spec.date = '2021-05-02'
|
8
|
+
spec.version = '1.1.0'
|
9
9
|
spec.summary = 'Console Blackjack'
|
10
10
|
spec.description = 'Blackjack for your console, full version.'
|
11
11
|
spec.author = 'Greg Donald'
|
@@ -18,7 +18,8 @@ Gem::Specification.new do |spec|
|
|
18
18
|
'spec/**/*.rb'].to_a
|
19
19
|
spec.homepage = 'https://github.com/gdonald/console-blackjack-ruby'
|
20
20
|
spec.metadata = {
|
21
|
-
'source_code_uri' => 'https://github.com/gdonald/console-blackjack-ruby'
|
21
|
+
'source_code_uri' => 'https://github.com/gdonald/console-blackjack-ruby',
|
22
|
+
'rubygems_mfa_required' => 'true'
|
22
23
|
}
|
23
24
|
spec.license = 'MIT'
|
24
25
|
spec.post_install_message = "\nType `console-blackjack` to run!\n\n"
|
data/lib/blackjack/card.rb
CHANGED
@@ -1,16 +1,18 @@
|
|
1
|
-
# coding: utf-8
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
class Card
|
5
|
-
attr_reader :value, :suit
|
4
|
+
attr_reader :blackjack, :value, :suit
|
6
5
|
|
7
|
-
def initialize(value, suit)
|
6
|
+
def initialize(blackjack, value, suit)
|
7
|
+
@blackjack = blackjack
|
8
8
|
@value = value
|
9
9
|
@suit = suit
|
10
10
|
end
|
11
11
|
|
12
12
|
def to_s
|
13
|
-
Card.faces[value][suit]
|
13
|
+
return Card.faces[value][suit] if blackjack.face_type == 1
|
14
|
+
|
15
|
+
Card.faces2[value][suit]
|
14
16
|
end
|
15
17
|
|
16
18
|
def ace?
|
@@ -33,4 +35,14 @@ class Card
|
|
33
35
|
%w[🂩 🂹 🃉 🃙], %w[🂪 🂺 🃊 🃚], %w[🂫 🂻 🃋 🃛], %w[🂭 🂽 🃍 🃝],
|
34
36
|
%w[🂮 🂾 🃎 🃞], %w[🂠]]
|
35
37
|
end
|
38
|
+
|
39
|
+
def self.faces2
|
40
|
+
[%w[A♠ A♥ A♣ A♦], %w[2♠ 2♥ 2♣ 2♦],
|
41
|
+
%w[3♠ 3♥ 3♣ 3♦], %w[4♠ 4♥ 4♣ 4♦],
|
42
|
+
%w[5♠ 5♥ 5♣ 5♦], %w[6♠ 6♥ 6♣ 6♦],
|
43
|
+
%w[7♠ 7♥ 7♣ 7♦], %w[8♠ 8♥ 8♣ 8♦],
|
44
|
+
%w[9♠ 9♥ 9♣ 9♦], %w[T♠ T♥ T♣ T♦],
|
45
|
+
%w[J♠ J♥ J♣ J♦], %w[Q♠ Q♥ Q♣ Q♦],
|
46
|
+
%w[K♠ K♥ K♣ K♦], %w[??]]
|
47
|
+
end
|
36
48
|
end
|
@@ -37,7 +37,7 @@ class DealerHand < Hand
|
|
37
37
|
def draw
|
38
38
|
out = String.new(' ')
|
39
39
|
cards.each_with_index do |card, index|
|
40
|
-
out << (index == 1 && hide_down_card ? Card.
|
40
|
+
out << (index == 1 && hide_down_card ? Card.new(blackjack, 13, 0) : card).to_s
|
41
41
|
out << ' '
|
42
42
|
end
|
43
43
|
out << ' ⇒ ' << value(SOFT).to_s
|
data/lib/blackjack/hand.rb
CHANGED
data/lib/blackjack/menus.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
module Menus
|
4
4
|
def draw_game_options
|
5
|
-
puts ' (N) Number of Decks (T) Deck Type (B) Back'
|
5
|
+
puts ' (N) Number of Decks (T) Deck Type (F) Face Type (B) Back'
|
6
6
|
loop do
|
7
7
|
c = Blackjack.getc
|
8
8
|
case c
|
@@ -11,12 +11,15 @@ module Menus
|
|
11
11
|
when 't'
|
12
12
|
clear_draw_hands_new_deck_type
|
13
13
|
clear_draw_hands_bet_options
|
14
|
+
when 'f'
|
15
|
+
clear_draw_hands_new_face_type
|
16
|
+
clear_draw_hands_bet_options
|
14
17
|
when 'b'
|
15
18
|
clear_draw_hands_bet_options
|
16
19
|
else
|
17
20
|
clear_draw_hands_game_options
|
18
21
|
end
|
19
|
-
break if %w[n t b].include?(c)
|
22
|
+
break if %w[n t b f].include?(c)
|
20
23
|
end
|
21
24
|
end
|
22
25
|
|
@@ -26,7 +29,9 @@ module Menus
|
|
26
29
|
c = Blackjack.getc.to_i
|
27
30
|
case c
|
28
31
|
when (1..6)
|
32
|
+
self.deck_type = c
|
29
33
|
shoe.send("new_#{SHOES[c]}")
|
34
|
+
save_game
|
30
35
|
else
|
31
36
|
clear_draw_hands_new_deck_type
|
32
37
|
end
|
@@ -34,6 +39,21 @@ module Menus
|
|
34
39
|
end
|
35
40
|
end
|
36
41
|
|
42
|
+
def new_face_type
|
43
|
+
puts ' (1) 🂡 (2) A♠'
|
44
|
+
loop do
|
45
|
+
c = Blackjack.getc.to_i
|
46
|
+
case c
|
47
|
+
when (1..2)
|
48
|
+
self.face_type = c
|
49
|
+
save_game
|
50
|
+
else
|
51
|
+
clear_draw_hands_new_face_type
|
52
|
+
end
|
53
|
+
break if (1..2).include?(c)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
37
57
|
def ask_insurance
|
38
58
|
puts ' Insurance? (Y) Yes (N) No'
|
39
59
|
loop do
|
@@ -52,22 +72,19 @@ module Menus
|
|
52
72
|
|
53
73
|
def draw_bet_options
|
54
74
|
puts ' (D) Deal Hand (B) Change Bet (O) Options (Q) Quit'
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
clear_draw_hands_bet_options
|
69
|
-
end
|
70
|
-
break if %w[d b o].include?(c)
|
75
|
+
c = Blackjack.getc
|
76
|
+
case c
|
77
|
+
when 'd'
|
78
|
+
deal_new_hand
|
79
|
+
when 'b'
|
80
|
+
new_bet
|
81
|
+
when 'o'
|
82
|
+
clear_draw_hands_game_options
|
83
|
+
when 'q'
|
84
|
+
clear
|
85
|
+
exit
|
86
|
+
else
|
87
|
+
clear_draw_hands_bet_options
|
71
88
|
end
|
72
89
|
end
|
73
90
|
end
|
@@ -92,21 +92,18 @@ class PlayerHand < Hand
|
|
92
92
|
|
93
93
|
def action?
|
94
94
|
draw_actions
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
clear_draw_hands_action
|
108
|
-
end
|
109
|
-
break if %w[h s p d].include?(c)
|
95
|
+
c = Blackjack.getc
|
96
|
+
case c
|
97
|
+
when 'h'
|
98
|
+
hit
|
99
|
+
when 's'
|
100
|
+
stand
|
101
|
+
when 'p'
|
102
|
+
blackjack.split_current_hand
|
103
|
+
when 'd'
|
104
|
+
dbl
|
105
|
+
else
|
106
|
+
clear_draw_hands_action
|
110
107
|
end
|
111
108
|
end
|
112
109
|
|
@@ -117,11 +114,11 @@ class PlayerHand < Hand
|
|
117
114
|
end
|
118
115
|
|
119
116
|
def draw_actions
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
puts
|
117
|
+
actions = []
|
118
|
+
actions << '(H) Hit' if can_hit?
|
119
|
+
actions << '(S) Stand' if can_stand?
|
120
|
+
actions << '(P) Split' if can_split?
|
121
|
+
actions << '(D) Double' if can_dbl?
|
122
|
+
puts " #{actions.join(' ')}"
|
126
123
|
end
|
127
124
|
end
|
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
|
@@ -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,7 +56,7 @@ 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?
|
@@ -135,7 +140,7 @@ class Blackjack
|
|
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 = $stdin.gets.to_i * 100
|
139
144
|
|
140
145
|
normalize_current_bet
|
141
146
|
deal_new_hand
|
@@ -144,7 +149,7 @@ class Blackjack
|
|
144
149
|
def new_num_decks
|
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 = $stdin.gets.to_i
|
148
153
|
|
149
154
|
normalize_num_decks
|
150
155
|
clear_draw_hands_game_options
|
@@ -204,7 +209,7 @@ class Blackjack
|
|
204
209
|
def self.getc
|
205
210
|
begin
|
206
211
|
system('stty raw -echo')
|
207
|
-
c =
|
212
|
+
c = $stdin.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,6 @@ FactoryBot.define do
|
|
37
38
|
value { 9 }
|
38
39
|
end
|
39
40
|
|
40
|
-
initialize_with { new(value, suit) }
|
41
|
+
initialize_with { new(blackjack, value, suit) }
|
41
42
|
end
|
42
43
|
end
|