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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bde97189c9a026e1875fb9f999139c0a5b1d1211
4
- data.tar.gz: 156387374b9e8de4f30556912f2d353acd0e16f2
3
+ metadata.gz: 1334ff0a35abad7bcf3e3e852161d3b1c04b1f34
4
+ data.tar.gz: d582ec299b6db0172d4460ea0b8968b15c544d40
5
5
  SHA512:
6
- metadata.gz: 14db6ae6d84ce4447cfed830dba949bcd0e34b716a5cbbcf0a6ec527a7280dbe44b566f2af3227a4b3a61dfbf643ad7fdf200119221f3f58eb80277f13de2aaa
7
- data.tar.gz: a9481598b6437e9614bac60b114a89c69f89fde8dd8dfb12dff6eb3da58d4aa6faf0ef3001f9dd31c1ec20b25cbdc4e56f7be426548823b82df89e40f1b0e105
6
+ metadata.gz: b8a2bbfd115255593b6eb75e65c536a3ec96590c3448e1c3c306509519849c5124b52e79938e2dfac11b67d415674fbbccfe02b0a13f08ce5f1bd7b8d132a07b
7
+ data.tar.gz: 817dbd411d1d379c715d5f9d8e58b3ba6302a319d37518d4ea57fa3fb799a16f3eb8194cc0963855628628a9fd0a1c3697a4f964283b9f768c72537562e79cec
@@ -1,4 +1,4 @@
1
1
  #!usr/bin/env ruby
2
2
  require_relative '../config/environment.rb'
3
-
3
+ system 'clear' or system 'cls'
4
4
  Cli.new.run
@@ -1,9 +1,10 @@
1
1
  class Card
2
- attr_accessor :name, :type
2
+ attr_accessor :name, :type, :value
3
3
 
4
- def initialize(name, type)
4
+ def initialize(name, type, value=nil)
5
5
  @name = name
6
6
  @type = type
7
+ @value = value
7
8
  end
8
9
 
9
10
  end
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)
@@ -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
@@ -24,54 +24,63 @@ class Game
24
24
  # current_player == @player_1 ? @player_2 : @player_1
25
25
  # end
26
26
 
27
- def card_value(card, player=current_player)
28
- case card.name
29
- when "1"
30
- return 1
31
- when "2"
32
- return 2
33
- when "3"
34
- return 3
35
- when "4"
36
- return 4
37
- when "5"
38
- return 5
39
- when "6"
40
- return 6
41
- when "7"
42
- return 7
43
- when "8"
44
- return 8
45
- when "9"
46
- return 9
47
- when "10"
48
- return 10
49
- when "Jack"
50
- return 10
51
- when "Queen"
52
- return 10
53
- when "King"
54
- return 10
55
- when "Ace"
56
- view_cards(player) if player.is_a?(Human)
57
- puts "Would you like the Ace of #{card.type} to equal 1 or 11? Type 1 or 11" if player.is_a?(Human)
58
- input = gets.strip if player.is_a?(Human)
59
- input = player.get_ace_value if player.is_a?(Computer)
60
- case input
61
- when "1"
62
- return 1
63
- when "11"
64
- return 11
65
- else
66
- Cli.new.error_message
67
- card_value(card)
68
- end
69
- else
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
- get_player_card_values(player)
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 += card_value(card, player)}
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 ? true : false
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
- lost ? turn_count += 1 : nil
216
+ clear_screen
217
+ lost ? @turn_count += 1 : nil
199
218
  view_cards(current_player) if current_player.is_a?(Human)
200
- get_player_card_values(current_player)
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
- get_player_card_values(@player_1)
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
- get_player_card_values(@player_2) if @player_2
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
- get_player_card_values(@dealer)
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
- puts ""
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
- puts ""
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
- puts ""
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
- puts ""
320
+ clear_screen
294
321
  Cli.new.initialize_players
295
322
  when "y"
296
- puts ""
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
- puts ""
337
+ clear_screen
311
338
  Cli.new.error_message
312
339
  end_game
313
340
  end
@@ -1,5 +1,5 @@
1
1
  class Player
2
- attr_accessor :deck, :name, :deck_value, :status
2
+ attr_accessor :deck, :name, :deck_value, :status, :has_ace
3
3
 
4
4
  def initialize(name="Dealer")
5
5
  @deck = []
@@ -8,10 +8,12 @@ class Computer < Player
8
8
  end
9
9
 
10
10
  def get_ace_value
11
+ @deck_value = 0
12
+ @deck.each{|card| @deck_value += card.value if card.value}
11
13
  if @deck_value < 11
12
- return "11"
14
+ return 11
13
15
  else
14
- return "1"
16
+ return 1
15
17
  end
16
18
  end
17
19
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blackjack-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Enoch Griffith