bowling_score_keeper 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7583fe6e44a0420476d6f05f90bdb829eb70075f
4
- data.tar.gz: 63f4e174b481d26c7d091518f8be3573a1cb8926
3
+ metadata.gz: 89bb212b1994a2e242e3bf78bcf211796a321f59
4
+ data.tar.gz: 460e5feef2e61fd1b5810e4c6715bd076080a872
5
5
  SHA512:
6
- metadata.gz: c62db684d3a4a51011423bd1e737e360dbd650ed6bf83db915a4b0603703b1f90962738eded8f37246d46663e2c305ec9f6626b066e66400a2bebf8fd95088cf
7
- data.tar.gz: fffc3203ab8a5fbd226b1a902cab34a881acbd40dda8cbba45562ac037bef6fe932012c3b6f78e09e1dbcd2a116dbfa885321630c0a0076dfe5c87d597ef056d
6
+ metadata.gz: 8a0c17810eb8faf470cb7372f6e54dc490463a05c27027126248c63ce69e00fb40ee8d81f3fd122a73c00da826e30b4478f0dc367c18f86dcfe0ba7de93b0c8c
7
+ data.tar.gz: 032621c1828114b089540884edcfd5d6dda6e94f73f55a94d61c7ca6aad132f25383ad140babd13b1cf8d6d46386c260f9a2d6a01b5153044fcaf6c9b974ad5c
data/README.md CHANGED
@@ -8,9 +8,9 @@ Basic implementation of a bowling game score keeper.
8
8
 
9
9
  ## Usage
10
10
 
11
- game = BowlingScoreKeeper.new
12
- game.roll(10)
13
- game.score # 10
11
+ Start the gem from the command line with:
12
+ $ bowling_score_keeper
13
+
14
14
 
15
15
  ## Development
16
16
 
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bowling_score_keeper'
4
+
5
+ game = BowlingScoreKeeper.new
6
+ game.call
@@ -18,8 +18,8 @@ Gem::Specification.new do |spec|
18
18
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
19
19
  f.match(%r{^(test|spec|features)/})
20
20
  end
21
- spec.bindir = "exe"
22
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
+ spec.bindir = "bin"
22
+ spec.executables = ["bowling_score_keeper"]
23
23
  spec.require_paths = ["lib"]
24
24
 
25
25
  spec.add_development_dependency "bundler", "~> 1.15"
@@ -2,33 +2,41 @@ require 'bowling_score_keeper/version'
2
2
  require 'pry'
3
3
 
4
4
  class BowlingScoreKeeper
5
+ attr_accessor :name
5
6
  MAX_ROLL_POINTS = 10
6
7
 
7
8
  def initialize
8
9
  @rolls = []
9
10
  end
10
11
 
12
+ def call
13
+ set_name
14
+
15
+ track_score
16
+ end
17
+
11
18
  def roll(pins)
12
- @rolls << pins
19
+ puts "You knocked #{pins} pins."
20
+ @rolls << pins.to_i
13
21
  end
14
22
 
15
23
  def score
16
- if @rolls.size <= 3
17
- return @rolls.inject(0) { |s, e| s + e }
18
- end
24
+ return score_for_too_few_rolls if too_few_rolls
19
25
 
20
26
  score = 0
21
-
22
27
  first_in_frame = 0
23
- for frame in 0...10
28
+
29
+ 10.times do
24
30
  if(strike?(first_in_frame))
25
- score += MAX_ROLL_POINTS + @rolls[first_in_frame + 1] + @rolls[first_in_frame + 2]
31
+ score += MAX_ROLL_POINTS +
32
+ @rolls[first_in_frame + 1] +
33
+ @rolls[first_in_frame + 2]
26
34
  first_in_frame += 1
27
35
  elsif(spare?(first_in_frame))
28
36
  score += MAX_ROLL_POINTS + @rolls[first_in_frame + 2]
29
37
  first_in_frame += 2
30
38
  else
31
- score += @rolls[first_in_frame] + @rolls[first_in_frame + 1]
39
+ score += @rolls[first_in_frame] + @rolls[first_in_frame + 1]
32
40
  first_in_frame += 2
33
41
  end
34
42
  end
@@ -38,11 +46,50 @@ class BowlingScoreKeeper
38
46
 
39
47
  private
40
48
 
49
+ def set_name
50
+ @name = ''
51
+ while @name.empty?
52
+ puts 'What is your name'
53
+ @name = gets.chomp
54
+ end
55
+ end
56
+
57
+ def track_score
58
+ @value = ''
59
+ while @value.empty?
60
+ puts 'Enter knocked pins:'
61
+ puts 'Type score to see your score, or exit to end the game.'
62
+ @value = gets.chomp
63
+
64
+ case @value
65
+ when 'score'
66
+ puts "Your score is #{score}"
67
+ when 'exit'
68
+ print "Congratulation #{@name},"
69
+ puts "You finished the game with a score of: #{score}"
70
+ exit
71
+ else
72
+ roll(@value)
73
+ end
74
+
75
+ @value = ''
76
+ end
77
+ end
78
+
41
79
  def spare?(first_in_frame)
42
- (@rolls[first_in_frame] + @rolls[first_in_frame + 1]) == MAX_ROLL_POINTS
80
+ (@rolls[first_in_frame] + @rolls[first_in_frame + 1]) ==
81
+ MAX_ROLL_POINTS
43
82
  end
44
83
 
45
84
  def strike?(first_in_frame)
46
85
  @rolls[first_in_frame] == MAX_ROLL_POINTS
47
86
  end
87
+
88
+ def too_few_rolls
89
+ @rolls.size <= 3
90
+ end
91
+
92
+ def score_for_too_few_rolls
93
+ @rolls.inject(0) { |s, e| s + e }
94
+ end
48
95
  end
@@ -1 +1 @@
1
- VERSION = "0.1.0"
1
+ VERSION = "0.2.0"
data/todo.txt CHANGED
@@ -1,6 +1,3 @@
1
- Create version tag
2
- Release as a gem
3
- Add usage details
4
1
  Multiple players mode
5
2
  Fancy output (ASCII graphic)
6
3
  Make it a CLI tool
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bowling_score_keeper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mugur (Bud) Chirica
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-15 00:00:00.000000000 Z
11
+ date: 2017-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -83,7 +83,8 @@ dependencies:
83
83
  description: 'Basic implementation of a bowling game score keeper in Ruby '
84
84
  email:
85
85
  - chirica.mugurel@gmail.com
86
- executables: []
86
+ executables:
87
+ - bowling_score_keeper
87
88
  extensions: []
88
89
  extra_rdoc_files: []
89
90
  files:
@@ -96,6 +97,7 @@ files:
96
97
  - LICENSE.txt
97
98
  - README.md
98
99
  - Rakefile
100
+ - bin/bowling_score_keeper
99
101
  - bin/console
100
102
  - bin/setup
101
103
  - bowling_score_keeper.gemspec