bowling_score_keeper 0.1.0 → 0.2.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/README.md +3 -3
- data/bin/bowling_score_keeper +6 -0
- data/bowling_score_keeper.gemspec +2 -2
- data/lib/bowling_score_keeper.rb +56 -9
- data/lib/bowling_score_keeper/version.rb +1 -1
- data/todo.txt +0 -3
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 89bb212b1994a2e242e3bf78bcf211796a321f59
|
4
|
+
data.tar.gz: 460e5feef2e61fd1b5810e4c6715bd076080a872
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8a0c17810eb8faf470cb7372f6e54dc490463a05c27027126248c63ce69e00fb40ee8d81f3fd122a73c00da826e30b4478f0dc367c18f86dcfe0ba7de93b0c8c
|
7
|
+
data.tar.gz: 032621c1828114b089540884edcfd5d6dda6e94f73f55a94d61c7ca6aad132f25383ad140babd13b1cf8d6d46386c260f9a2d6a01b5153044fcaf6c9b974ad5c
|
data/README.md
CHANGED
@@ -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 = "
|
22
|
-
spec.executables =
|
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"
|
data/lib/bowling_score_keeper.rb
CHANGED
@@ -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
|
-
|
19
|
+
puts "You knocked #{pins} pins."
|
20
|
+
@rolls << pins.to_i
|
13
21
|
end
|
14
22
|
|
15
23
|
def score
|
16
|
-
|
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
|
-
|
28
|
+
|
29
|
+
10.times do
|
24
30
|
if(strike?(first_in_frame))
|
25
|
-
score += MAX_ROLL_POINTS +
|
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
|
-
|
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]) ==
|
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
|
+
VERSION = "0.2.0"
|
data/todo.txt
CHANGED
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.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mugur (Bud) Chirica
|
8
8
|
autorequire:
|
9
|
-
bindir:
|
9
|
+
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-06-
|
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
|