Ruby_Dice 1.0.0.pre.1 → 1.0.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/Ruby_Dice +29 -18
- data/lib/dice.rb +0 -3
- data/lib/scoresheet.rb +4 -6
- data/lib/scoring.rb +56 -37
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ef8117351f5cfdb375f63cbda1f3da98d3da62aa
|
4
|
+
data.tar.gz: f108f818986f325633806d14022096b585f17c9a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 04d5812de399b4e905d9f6ac7a28e6d465683b69b1b421e21c5df7bb04ec1aba8edcca237fb07ac348e53a64050396332e7614e12676a567e17340832d214bee
|
7
|
+
data.tar.gz: 84fcd63edbfbf2bef34de656b78e72619f111eb3982c1ec5c439b837a1f33c1e6320936488f3b339cf0b501e090fed851c0f8698b6d5b2fd1fda0a63d471bef6
|
data/bin/Ruby_Dice
CHANGED
@@ -1,27 +1,38 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
BEGIN { # Checks for options
|
3
|
-
|
4
|
-
|
3
|
+
if ARGV.include? "-h"
|
4
|
+
puts <<HELP
|
5
5
|
Usage: $ Ruby_Dice [--help]
|
6
6
|
\u00B7 --help -> Displays this help message
|
7
7
|
Gameplay:
|
8
|
-
|
9
|
-
\u00B7
|
10
|
-
\u00B7
|
11
|
-
\u00B7
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
\u00B7
|
17
|
-
\u00B7
|
18
|
-
\u00B7
|
19
|
-
|
20
|
-
\u00B7
|
21
|
-
\u00B7
|
8
|
+
\u00B7 Rolling:
|
9
|
+
\u00B7 You must not put any scoring abbreviations in your input (See Scoring Abbreviations)
|
10
|
+
\u00B7 You can only roll twice before you must score
|
11
|
+
\u00B7 Select the characters of the dice you want to roll again
|
12
|
+
\u00B7 The characters must consist of at least one of these: ZXCVB
|
13
|
+
\u00B7 They can be touching
|
14
|
+
\u00B7 They can be in any order
|
15
|
+
\u00B7 Scoring:
|
16
|
+
\u00B7 You must not roll
|
17
|
+
\u00B7 You must use an abbreviation specified in Scoring Abbreviations
|
18
|
+
\u00B7 It must be available (with the exeception of Yahztee, which can be used multiple times)
|
19
|
+
\u00B7 Scoring Abbreviations:
|
20
|
+
\u00B7 1 -> Ones
|
21
|
+
\u00B7 2 -> Twos
|
22
|
+
\u00B7 3 -> Threes
|
23
|
+
\u00B7 4 -> Fours
|
24
|
+
\u00B7 5 -> Fives
|
25
|
+
\u00B7 6 -> Sixes
|
26
|
+
\u00B7 ss -> Small Straight
|
27
|
+
\u00B7 ls -> Large Straight
|
28
|
+
\u00B7 tok -> Three Of A Kind
|
29
|
+
\u00B7 fok -> Four Of A Kind
|
30
|
+
\u00B7 fh -> Full House
|
31
|
+
\u00B7 y -> Yahtzee
|
32
|
+
\u00B7 ? -> Chance
|
22
33
|
HELP
|
23
|
-
|
24
|
-
|
34
|
+
exit
|
35
|
+
end
|
25
36
|
}
|
26
37
|
|
27
38
|
require "Ruby_Dice"
|
data/lib/dice.rb
CHANGED
@@ -7,8 +7,6 @@ class Dice # Class for working with the 5 dice at the same time
|
|
7
7
|
@values = values
|
8
8
|
end
|
9
9
|
|
10
|
-
# @!group Roll Methods
|
11
|
-
|
12
10
|
=begin
|
13
11
|
@raise [ArgumentError] if i element > 4
|
14
12
|
@return [void]
|
@@ -30,7 +28,6 @@ class Dice # Class for working with the 5 dice at the same time
|
|
30
28
|
initialize
|
31
29
|
end
|
32
30
|
|
33
|
-
# @!endgroup
|
34
31
|
|
35
32
|
def to_s # @return [String] instance variable dice
|
36
33
|
print @values
|
data/lib/scoresheet.rb
CHANGED
@@ -56,8 +56,6 @@ class ScoreSheet # Keeps score throughout the game
|
|
56
56
|
lower_score_total + upper_score_total
|
57
57
|
end
|
58
58
|
|
59
|
-
|
60
|
-
|
61
59
|
=begin
|
62
60
|
Checks if upper score bonus can be awarded
|
63
61
|
@return [Fixnum] 0 if raw_upper < 63
|
@@ -70,7 +68,7 @@ Checks if upper score bonus can be awarded
|
|
70
68
|
end
|
71
69
|
end
|
72
70
|
=begin
|
73
|
-
@return [
|
71
|
+
@return [Integer]
|
74
72
|
Checks to see if you have all the of the same dice
|
75
73
|
=end
|
76
74
|
def yahtzee
|
@@ -127,7 +125,7 @@ Checks to see if you have all the of the same dice
|
|
127
125
|
Replace underscores with spaces
|
128
126
|
=end
|
129
127
|
def format_score(score_region, index)
|
130
|
-
score_label =
|
128
|
+
score_label = score_region[index].to_s.tr(?_, " ")
|
131
129
|
cap_label score_label
|
132
130
|
score_field = @sheet[score_region[index]]
|
133
131
|
return justify_score(score_label, "#{score_field[1]? score_field[0]:?-}")
|
@@ -140,11 +138,11 @@ Replace underscores with spaces
|
|
140
138
|
=begin
|
141
139
|
@param score_label [String]
|
142
140
|
@return [String]
|
143
|
-
Capitalize each letter of each word only if the score label has two words
|
141
|
+
Capitalize each letter of each word only if the score label has two or more words
|
144
142
|
Else only capitalize the first letter of the score label
|
145
143
|
=end
|
146
144
|
def cap_label(score_label)
|
147
|
-
if score_label.split.length
|
145
|
+
if score_label.split.length >= 2
|
148
146
|
score_label = score_label.split.map(&:capitalize)*' '
|
149
147
|
else
|
150
148
|
score_label.capitalize!
|
data/lib/scoring.rb
CHANGED
@@ -7,9 +7,10 @@ module Scoring # methods for calculating score
|
|
7
7
|
LowerScores = :three_of_a_kind, :four_of_a_kind, :full_house, :small_straight, :large_straight, :chance, :yahtzee # The fields on the bottom section of the score sheet
|
8
8
|
|
9
9
|
=begin
|
10
|
-
|
11
|
-
|
12
|
-
@return [Fixnum]
|
10
|
+
@param dice [Array<Fixnum>] The dice to be tested
|
11
|
+
Checks to see if dice has 3 of one kind of dice and 2 of another
|
12
|
+
@return [Fixnum] 25 if dice contains 3 of one Fixnum and 2 of another
|
13
|
+
@return [Fixnum] 0 if dice does not contain 3 of one Fixnum and 2 of another
|
13
14
|
=end
|
14
15
|
def full_house(dice)
|
15
16
|
f_table = freq dice
|
@@ -19,10 +20,11 @@ Checks to see if you have 3 of one kind of dice and 2 of another
|
|
19
20
|
end
|
20
21
|
|
21
22
|
=begin
|
23
|
+
@param dice [Array<Fixnum>] The dice to be tested
|
22
24
|
Checks to see if you have 4 of the same dice
|
23
25
|
@return [Fixnum] 0 if <= 4 indices have the same value
|
24
26
|
@return [Fixnum] dice.reduce(:+) if >= 4 indices have the same value
|
25
|
-
@see (
|
27
|
+
@see (three_of_a_kind)
|
26
28
|
=end
|
27
29
|
def four_of_a_kind(dice)
|
28
30
|
of_a_kind dice, 4
|
@@ -30,28 +32,48 @@ Checks to see if you have 4 of the same dice
|
|
30
32
|
|
31
33
|
=begin
|
32
34
|
@param d [Array<Fixnum>] the dice to be tested
|
33
|
-
@return [Fixnum] the
|
35
|
+
@return [Fixnum] the total of all the ones
|
34
36
|
=end
|
35
37
|
def ones(d)
|
36
38
|
single_face d, 1
|
37
39
|
end
|
38
40
|
|
39
|
-
|
41
|
+
=begin
|
42
|
+
@param d [Array<Fixnum>] the dice to be tested
|
43
|
+
@return [Fixnum] the total of all the twos
|
44
|
+
=end
|
45
|
+
def twos(d)
|
40
46
|
single_face d, 2
|
41
47
|
end
|
42
48
|
|
43
|
-
|
49
|
+
=begin
|
50
|
+
@param d [Array<Fixnum>] the dice to be tested
|
51
|
+
@return [Fixnum] the score
|
52
|
+
=end
|
53
|
+
def threes(d)
|
44
54
|
single_face d, 3
|
45
55
|
end
|
46
56
|
|
47
|
-
|
57
|
+
=begin
|
58
|
+
@param d [Array<Fixnum>] the dice to be tested
|
59
|
+
@return [Fixnum] the score
|
60
|
+
=end
|
61
|
+
def fours(d)
|
48
62
|
single_face d, 4
|
49
63
|
end
|
50
|
-
|
51
|
-
|
64
|
+
|
65
|
+
=begin
|
66
|
+
@param d [Array<Fixnum>] the dice to be tested
|
67
|
+
@return [Fixnum] the score
|
68
|
+
=end
|
69
|
+
def fives(d)
|
52
70
|
single_face d, 5
|
53
71
|
end
|
54
72
|
|
73
|
+
=begin
|
74
|
+
@param d [Array<Fixnum>] the dice to be tested
|
75
|
+
@return [Fixnum] the score
|
76
|
+
=end
|
55
77
|
def sixes(d) # @see (#ones)
|
56
78
|
single_face d, 6
|
57
79
|
end
|
@@ -78,7 +100,7 @@ Checks to see if you have 3 of the same dice
|
|
78
100
|
@param dice [Array<Fixnum>] the dice to be tested
|
79
101
|
@return [Fixnum] 30 if there are 3 consecutive Fixnums in dice
|
80
102
|
@return [Fixnum] 0 if there are not three conscecutive Fixnums in dice
|
81
|
-
@see (
|
103
|
+
@see (large_straight)
|
82
104
|
=end
|
83
105
|
def small_straight(dice)
|
84
106
|
straight dice, 4, 30
|
@@ -89,7 +111,7 @@ Checks to see if you have 3 of the same dice
|
|
89
111
|
@param dice [Array<Fixnum>] the dice to be tested
|
90
112
|
@return [Fixnum] 40 if there are 4 consecutive Fixnums in dice
|
91
113
|
@return [Fixnum] 0 if there are not three conscecutive Fixnums in dice
|
92
|
-
@see (
|
114
|
+
@see (small_straight)
|
93
115
|
=end
|
94
116
|
def large_straight(dice)
|
95
117
|
straight dice, 5, 40
|
@@ -98,32 +120,32 @@ Checks to see if you have 3 of the same dice
|
|
98
120
|
|
99
121
|
private # Helper methods for score calculation
|
100
122
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
end
|
123
|
+
def single_face(dice, value)
|
124
|
+
v = dice.select{|number| number == value}.reduce :+
|
125
|
+
unless v.nil?
|
126
|
+
return v
|
127
|
+
else
|
128
|
+
return 0
|
108
129
|
end
|
130
|
+
end
|
109
131
|
|
110
|
-
|
111
|
-
|
112
|
-
|
132
|
+
def freq(dice)
|
133
|
+
dice.inject(Hash.new(0)) { |h,v| h[v] += 1; h }
|
134
|
+
end
|
113
135
|
|
114
|
-
|
115
|
-
|
116
|
-
|
136
|
+
def modal_frequency(dice)
|
137
|
+
freq(dice).max_by{|k,v| v}[1]
|
138
|
+
end
|
117
139
|
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
end
|
140
|
+
def of_a_kind(dice, limit)
|
141
|
+
if modal_frequency(dice) >= limit
|
142
|
+
dice.reduce :+
|
143
|
+
else
|
144
|
+
0
|
124
145
|
end
|
146
|
+
end
|
125
147
|
|
126
|
-
=begin
|
148
|
+
=begin
|
127
149
|
@param dice [Fixnum] the dice to be tested
|
128
150
|
@param limit [Fixnum] = 4 for small straight
|
129
151
|
@param limit [Fixnum] = 5 for large straight
|
@@ -132,14 +154,11 @@ common code for both small straight (SS) and large straight (LS)
|
|
132
154
|
@return [Fixnum] score
|
133
155
|
=end
|
134
156
|
def straight(dice, limit, score)
|
135
|
-
#each_cons is generating every possible value for a straight of length limit
|
136
|
-
|
137
|
-
# Asking if i is a subset of dice
|
138
|
-
if (i - dice).empty?
|
157
|
+
(1..6).each_cons(limit).each do |i| #each_cons is generating every possible value for a straight of length limit
|
158
|
+
if (i - dice).empty? # Asking if i is a subset of dice
|
139
159
|
return score if (i - dice)
|
140
160
|
end
|
141
161
|
end
|
142
162
|
return 0
|
143
163
|
end
|
144
|
-
|
145
164
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: Ruby_Dice
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zachary Perlmutter
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-12-
|
12
|
+
date: 2014-12-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -76,9 +76,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
76
76
|
version: 1.9.2
|
77
77
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
78
|
requirements:
|
79
|
-
- - "
|
79
|
+
- - ">="
|
80
80
|
- !ruby/object:Gem::Version
|
81
|
-
version:
|
81
|
+
version: '0'
|
82
82
|
requirements:
|
83
83
|
- Terminal
|
84
84
|
rubyforge_project:
|