blackjack-cli 0.0.7 → 0.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/bin/blackjack +1 -1
- data/lib/Card.rb +3 -2
- data/lib/Cli.rb +10 -0
- data/lib/Deck.rb +48 -48
- data/lib/Game.rb +87 -60
- data/lib/Player.rb +1 -1
- data/lib/players/Computer.rb +4 -2
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1334ff0a35abad7bcf3e3e852161d3b1c04b1f34
|
|
4
|
+
data.tar.gz: d582ec299b6db0172d4460ea0b8968b15c544d40
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b8a2bbfd115255593b6eb75e65c536a3ec96590c3448e1c3c306509519849c5124b52e79938e2dfac11b67d415674fbbccfe02b0a13f08ce5f1bd7b8d132a07b
|
|
7
|
+
data.tar.gz: 817dbd411d1d379c715d5f9d8e58b3ba6302a319d37518d4ea57fa3fb799a16f3eb8194cc0963855628628a9fd0a1c3697a4f964283b9f768c72537562e79cec
|
data/bin/blackjack
CHANGED
data/lib/Card.rb
CHANGED
data/lib/Cli.rb
CHANGED
|
@@ -8,17 +8,25 @@ class Cli
|
|
|
8
8
|
puts "Incorrect input, please try again!"
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
+
def clear_screen
|
|
12
|
+
system 'clear' or system 'cls'
|
|
13
|
+
end
|
|
14
|
+
|
|
11
15
|
def initialize_game
|
|
16
|
+
clear_screen
|
|
12
17
|
puts "Type start to begin or exit to exit program"
|
|
13
18
|
input = gets.strip
|
|
14
19
|
case input
|
|
15
20
|
when "start"
|
|
21
|
+
clear_screen
|
|
16
22
|
puts "Loading Game..."
|
|
17
23
|
sleep(2)
|
|
18
24
|
game = Game.new(@player_1, @player_2, @dealer, @type) if @player_2
|
|
19
25
|
game = Game.new(@player_1, @dealer, @type) if !@player_2
|
|
26
|
+
clear_screen
|
|
20
27
|
puts "Game loaded"
|
|
21
28
|
sleep(1)
|
|
29
|
+
clear_screen
|
|
22
30
|
game.play
|
|
23
31
|
when "exit"
|
|
24
32
|
return
|
|
@@ -29,6 +37,7 @@ class Cli
|
|
|
29
37
|
end
|
|
30
38
|
|
|
31
39
|
def ask_for_player1_name
|
|
40
|
+
clear_screen
|
|
32
41
|
puts "Player 1, What is your name?"
|
|
33
42
|
input = gets.strip
|
|
34
43
|
@player_1 = Human.new(input)
|
|
@@ -36,6 +45,7 @@ class Cli
|
|
|
36
45
|
end
|
|
37
46
|
|
|
38
47
|
def ask_for_player2_name
|
|
48
|
+
clear_screen
|
|
39
49
|
puts "Player 2, What is your name?"
|
|
40
50
|
input = gets.strip
|
|
41
51
|
@player_2 = Human.new(input)
|
data/lib/Deck.rb
CHANGED
|
@@ -11,54 +11,54 @@ class Deck
|
|
|
11
11
|
Card.new('Ace', 'Diamonds'),
|
|
12
12
|
Card.new('Ace', 'Clubs'),
|
|
13
13
|
Card.new('Ace', 'Spades'),
|
|
14
|
-
Card.new('2', 'Hearts'),
|
|
15
|
-
Card.new('2', 'Diamonds'),
|
|
16
|
-
Card.new('2', 'Clubs'),
|
|
17
|
-
Card.new('2', 'Spades'),
|
|
18
|
-
Card.new('3', 'Hearts'),
|
|
19
|
-
Card.new('3', 'Diamonds'),
|
|
20
|
-
Card.new('3', 'Clubs'),
|
|
21
|
-
Card.new('3', 'Spades'),
|
|
22
|
-
Card.new('4', 'Hearts'),
|
|
23
|
-
Card.new('4', 'Diamonds'),
|
|
24
|
-
Card.new('4', 'Clubs'),
|
|
25
|
-
Card.new('4', 'Spades'),
|
|
26
|
-
Card.new('5', 'Hearts'),
|
|
27
|
-
Card.new('5', 'Diamonds'),
|
|
28
|
-
Card.new('5', 'Clubs'),
|
|
29
|
-
Card.new('5', 'Spades'),
|
|
30
|
-
Card.new('6', 'Hearts'),
|
|
31
|
-
Card.new('6', 'Diamonds'),
|
|
32
|
-
Card.new('6', 'Clubs'),
|
|
33
|
-
Card.new('6', 'Spades'),
|
|
34
|
-
Card.new('7', 'Hearts'),
|
|
35
|
-
Card.new('7', 'Diamonds'),
|
|
36
|
-
Card.new('7', 'Clubs'),
|
|
37
|
-
Card.new('7', 'Spades'),
|
|
38
|
-
Card.new('8', 'Hearts'),
|
|
39
|
-
Card.new('8', 'Diamonds'),
|
|
40
|
-
Card.new('8', 'Clubs'),
|
|
41
|
-
Card.new('8', 'Spades'),
|
|
42
|
-
Card.new('9', 'Hearts'),
|
|
43
|
-
Card.new('9', 'Diamonds'),
|
|
44
|
-
Card.new('9', 'Clubs'),
|
|
45
|
-
Card.new('9', 'Spades'),
|
|
46
|
-
Card.new('10', 'Hearts'),
|
|
47
|
-
Card.new('10', 'Diamonds'),
|
|
48
|
-
Card.new('10', 'Clubs'),
|
|
49
|
-
Card.new('10', 'Spades'),
|
|
50
|
-
Card.new('Jack', 'Hearts'),
|
|
51
|
-
Card.new('Jack', 'Diamonds'),
|
|
52
|
-
Card.new('Jack', 'Clubs'),
|
|
53
|
-
Card.new('Jack', 'Spades'),
|
|
54
|
-
Card.new('Queen', 'Hearts'),
|
|
55
|
-
Card.new('Queen', 'Diamonds'),
|
|
56
|
-
Card.new('Queen', 'Clubs'),
|
|
57
|
-
Card.new('Queen', 'Spades'),
|
|
58
|
-
Card.new('King', 'Hearts'),
|
|
59
|
-
Card.new('King', 'Diamonds'),
|
|
60
|
-
Card.new('King', 'Clubs'),
|
|
61
|
-
Card.new('King', 'Spades')
|
|
14
|
+
Card.new('2', 'Hearts', 2),
|
|
15
|
+
Card.new('2', 'Diamonds', 2),
|
|
16
|
+
Card.new('2', 'Clubs', 2),
|
|
17
|
+
Card.new('2', 'Spades', 2),
|
|
18
|
+
Card.new('3', 'Hearts', 3),
|
|
19
|
+
Card.new('3', 'Diamonds', 3),
|
|
20
|
+
Card.new('3', 'Clubs', 3),
|
|
21
|
+
Card.new('3', 'Spades', 3),
|
|
22
|
+
Card.new('4', 'Hearts', 4),
|
|
23
|
+
Card.new('4', 'Diamonds', 4),
|
|
24
|
+
Card.new('4', 'Clubs', 4),
|
|
25
|
+
Card.new('4', 'Spades', 4),
|
|
26
|
+
Card.new('5', 'Hearts', 5),
|
|
27
|
+
Card.new('5', 'Diamonds', 5),
|
|
28
|
+
Card.new('5', 'Clubs', 5),
|
|
29
|
+
Card.new('5', 'Spades', 5),
|
|
30
|
+
Card.new('6', 'Hearts', 6),
|
|
31
|
+
Card.new('6', 'Diamonds', 6),
|
|
32
|
+
Card.new('6', 'Clubs', 6),
|
|
33
|
+
Card.new('6', 'Spades', 6),
|
|
34
|
+
Card.new('7', 'Hearts', 7),
|
|
35
|
+
Card.new('7', 'Diamonds', 7),
|
|
36
|
+
Card.new('7', 'Clubs', 7),
|
|
37
|
+
Card.new('7', 'Spades', 7),
|
|
38
|
+
Card.new('8', 'Hearts', 8),
|
|
39
|
+
Card.new('8', 'Diamonds', 8),
|
|
40
|
+
Card.new('8', 'Clubs', 8),
|
|
41
|
+
Card.new('8', 'Spades', 8),
|
|
42
|
+
Card.new('9', 'Hearts', 9),
|
|
43
|
+
Card.new('9', 'Diamonds', 9),
|
|
44
|
+
Card.new('9', 'Clubs', 9),
|
|
45
|
+
Card.new('9', 'Spades', 9),
|
|
46
|
+
Card.new('10', 'Hearts', 10),
|
|
47
|
+
Card.new('10', 'Diamonds', 10),
|
|
48
|
+
Card.new('10', 'Clubs', 10),
|
|
49
|
+
Card.new('10', 'Spades', 10),
|
|
50
|
+
Card.new('Jack', 'Hearts', 10),
|
|
51
|
+
Card.new('Jack', 'Diamonds', 10),
|
|
52
|
+
Card.new('Jack', 'Clubs', 10),
|
|
53
|
+
Card.new('Jack', 'Spades', 10),
|
|
54
|
+
Card.new('Queen', 'Hearts', 10),
|
|
55
|
+
Card.new('Queen', 'Diamonds', 10),
|
|
56
|
+
Card.new('Queen', 'Clubs', 10),
|
|
57
|
+
Card.new('Queen', 'Spades', 10),
|
|
58
|
+
Card.new('King', 'Hearts', 10),
|
|
59
|
+
Card.new('King', 'Diamonds', 10),
|
|
60
|
+
Card.new('King', 'Clubs', 10),
|
|
61
|
+
Card.new('King', 'Spades', 10)
|
|
62
62
|
]
|
|
63
63
|
end
|
|
64
64
|
end
|
data/lib/Game.rb
CHANGED
|
@@ -24,54 +24,63 @@ class Game
|
|
|
24
24
|
# current_player == @player_1 ? @player_2 : @player_1
|
|
25
25
|
# end
|
|
26
26
|
|
|
27
|
-
def
|
|
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
|
-
Cli.new.error_message
|
|
71
|
-
card_value(card)
|
|
27
|
+
def check_for_ace(card, player)
|
|
28
|
+
if card.name == "Ace" && card.value && player.is_a?(Human)
|
|
29
|
+
view_cards(player)
|
|
30
|
+
puts ""
|
|
31
|
+
puts "Total value of #{player.deck_value}"
|
|
32
|
+
puts ""
|
|
33
|
+
puts "You have an Ace in your hand. Would you like to change it's value? Current value #{card.value} : y/n"
|
|
34
|
+
input = gets.strip
|
|
35
|
+
case input
|
|
36
|
+
when 'y'
|
|
37
|
+
puts "Would you like it's value to be 1 or 11?"
|
|
38
|
+
input = gets.strip
|
|
39
|
+
case input
|
|
40
|
+
when '1'
|
|
41
|
+
card.value = 1
|
|
42
|
+
when '11'
|
|
43
|
+
card.value = 11
|
|
44
|
+
else
|
|
45
|
+
Cli.new.error_message
|
|
46
|
+
check_for_ace(card)
|
|
47
|
+
end
|
|
48
|
+
when 'n'
|
|
49
|
+
card.value
|
|
50
|
+
else
|
|
51
|
+
Cli.new.error_message
|
|
52
|
+
check_for_ace(card, player)
|
|
53
|
+
end
|
|
54
|
+
elsif card.name == "Ace" && player.is_a?(Human)
|
|
55
|
+
clear_screen
|
|
56
|
+
view_cards(player)
|
|
57
|
+
puts "You have an Ace in your hand. Would you like it's value to be 1 or 11?"
|
|
58
|
+
input = gets.strip
|
|
59
|
+
case input
|
|
60
|
+
when '1'
|
|
61
|
+
card.value = 1
|
|
62
|
+
when '11'
|
|
63
|
+
card.value = 11
|
|
64
|
+
else
|
|
65
|
+
Cli.new.error_message
|
|
66
|
+
check_for_ace(card)
|
|
67
|
+
end
|
|
68
|
+
elsif card.name == "Ace" && player.is_a?(Computer)
|
|
69
|
+
card.value = player.get_ace_value
|
|
72
70
|
end
|
|
73
71
|
end
|
|
74
72
|
|
|
73
|
+
def start_of_turn_values(player)
|
|
74
|
+
player.deck_value = 0
|
|
75
|
+
player.deck.each{|card| player.deck_value += card.value}
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def get_card_values(player)
|
|
79
|
+
player.deck_value = 0
|
|
80
|
+
player.deck.each{|card| check_for_ace(card, player)}
|
|
81
|
+
player.deck.each{|card| player.deck_value += card.value}
|
|
82
|
+
end
|
|
83
|
+
|
|
75
84
|
def deal_cards(player)
|
|
76
85
|
player.deck.push(@deck[0])
|
|
77
86
|
@deck.shift
|
|
@@ -81,13 +90,17 @@ class Game
|
|
|
81
90
|
|
|
82
91
|
def hit(player)
|
|
83
92
|
player.deck.push(@deck[0])
|
|
84
|
-
|
|
93
|
+
get_card_values(player)
|
|
85
94
|
@deck.shift
|
|
86
95
|
end
|
|
87
96
|
|
|
97
|
+
def clear_screen
|
|
98
|
+
Cli.new.clear_screen
|
|
99
|
+
end
|
|
100
|
+
|
|
88
101
|
def get_player_card_values(player)
|
|
89
102
|
player.deck_value = 0
|
|
90
|
-
player.deck.each{|card| player.deck_value +=
|
|
103
|
+
player.deck.each{|card| player.deck_value += card.value}
|
|
91
104
|
player.deck_value
|
|
92
105
|
end
|
|
93
106
|
|
|
@@ -154,15 +167,20 @@ class Game
|
|
|
154
167
|
def lost
|
|
155
168
|
if bust(@player_1)
|
|
156
169
|
puts "Player 1 busted!"
|
|
170
|
+
true
|
|
157
171
|
elsif @player2 && bust(@player_2)
|
|
158
172
|
puts "Player 2 busted!"
|
|
173
|
+
true
|
|
159
174
|
elsif bust(@dealer)
|
|
160
175
|
puts "Dealer busted!"
|
|
176
|
+
true
|
|
161
177
|
end
|
|
162
178
|
end
|
|
163
179
|
|
|
164
180
|
def game_over
|
|
165
|
-
@turn_count == 3
|
|
181
|
+
return true if @turn_count == 3 if @player_2
|
|
182
|
+
return true if @turn_count == 2 if !@player_2
|
|
183
|
+
|
|
166
184
|
end
|
|
167
185
|
|
|
168
186
|
def show_hands
|
|
@@ -195,9 +213,10 @@ class Game
|
|
|
195
213
|
end
|
|
196
214
|
|
|
197
215
|
def turn
|
|
198
|
-
|
|
216
|
+
clear_screen
|
|
217
|
+
lost ? @turn_count += 1 : nil
|
|
199
218
|
view_cards(current_player) if current_player.is_a?(Human)
|
|
200
|
-
|
|
219
|
+
start_of_turn_values(current_player)
|
|
201
220
|
puts "A total value of #{current_player.deck_value}" if current_player.is_a?(Human)
|
|
202
221
|
puts "" if current_player.is_a?(Human)
|
|
203
222
|
options
|
|
@@ -206,15 +225,19 @@ class Game
|
|
|
206
225
|
def update_player_values
|
|
207
226
|
puts "Updating #{@player_1.name}'s hand..."
|
|
208
227
|
sleep(1)
|
|
209
|
-
|
|
228
|
+
clear_screen
|
|
229
|
+
get_card_values(@player_1)
|
|
210
230
|
sleep(1)
|
|
231
|
+
clear_screen if @player_1.deck.detect {|x| x if x.name == "Ace"}
|
|
211
232
|
puts "Updating #{@player_2.name}'s hand..." if @player_2
|
|
212
233
|
sleep(1) if @player_2
|
|
213
|
-
|
|
234
|
+
clear_screen if @player_2
|
|
235
|
+
get_card_values(@player_2) if @player_2
|
|
214
236
|
sleep(1) if @player_2
|
|
237
|
+
clear_screen if @player_2 && @player_2.deck.detect {|x| x if x.name == "Ace"}
|
|
215
238
|
puts "Updating Dealer's hand..."
|
|
216
239
|
sleep(1)
|
|
217
|
-
|
|
240
|
+
get_card_values(@dealer)
|
|
218
241
|
sleep(1)
|
|
219
242
|
end
|
|
220
243
|
|
|
@@ -226,15 +249,17 @@ class Game
|
|
|
226
249
|
case input
|
|
227
250
|
when "hit"
|
|
228
251
|
puts "#{current_player.name} draws a card!"
|
|
229
|
-
|
|
252
|
+
sleep(2)
|
|
230
253
|
hit(current_player)
|
|
231
254
|
when "help"
|
|
255
|
+
clear_screen
|
|
232
256
|
help
|
|
233
257
|
options
|
|
234
258
|
when "cards"
|
|
259
|
+
clear_screen
|
|
235
260
|
view_cards(current_player)
|
|
236
261
|
puts "A total value of #{current_player.deck_value}"
|
|
237
|
-
|
|
262
|
+
get_card_values(current_player)
|
|
238
263
|
options
|
|
239
264
|
when "exit"
|
|
240
265
|
exit
|
|
@@ -242,7 +267,7 @@ class Game
|
|
|
242
267
|
Cli.new.initialize_players
|
|
243
268
|
when "stand"
|
|
244
269
|
puts "#{current_player.name} stands!"
|
|
245
|
-
|
|
270
|
+
sleep(2)
|
|
246
271
|
stand(current_player)
|
|
247
272
|
@turn_count += 1
|
|
248
273
|
else
|
|
@@ -255,16 +280,18 @@ class Game
|
|
|
255
280
|
puts "Shuffling Deck..."
|
|
256
281
|
@deck.shuffle!
|
|
257
282
|
sleep(1)
|
|
283
|
+
clear_screen
|
|
258
284
|
puts "Dealing Cards..."
|
|
259
285
|
deal_cards(@player_1)
|
|
260
286
|
deal_cards(@player_2) if @player_2
|
|
261
287
|
deal_cards(@dealer)
|
|
262
288
|
sleep(1)
|
|
289
|
+
clear_screen
|
|
263
290
|
update_player_values
|
|
264
|
-
puts ""
|
|
265
291
|
until game_over
|
|
266
292
|
turn
|
|
267
293
|
end
|
|
294
|
+
clear_screen
|
|
268
295
|
puts "Players, show your hands!"
|
|
269
296
|
puts ""
|
|
270
297
|
sleep(1)
|
|
@@ -290,10 +317,10 @@ class Game
|
|
|
290
317
|
|
|
291
318
|
case input
|
|
292
319
|
when "menu"
|
|
293
|
-
|
|
320
|
+
clear_screen
|
|
294
321
|
Cli.new.initialize_players
|
|
295
322
|
when "y"
|
|
296
|
-
|
|
323
|
+
clear_screen
|
|
297
324
|
if @type == "1 player"
|
|
298
325
|
@player_1 = Human.new(@player_1.name)
|
|
299
326
|
@dealer = Computer.new
|
|
@@ -307,7 +334,7 @@ class Game
|
|
|
307
334
|
when "n"
|
|
308
335
|
return
|
|
309
336
|
else
|
|
310
|
-
|
|
337
|
+
clear_screen
|
|
311
338
|
Cli.new.error_message
|
|
312
339
|
end_game
|
|
313
340
|
end
|
data/lib/Player.rb
CHANGED
data/lib/players/Computer.rb
CHANGED