Ruby_Dice 0.0.1 → 1.0.0.pre
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/LICENSE.md +21 -21
- data/README.md +10 -11
- data/bin/Ruby_Dice +38 -38
- data/lib/Ruby_Dice.rb +4 -4
- data/lib/dice.rb +65 -59
- data/lib/player.rb +118 -90
- data/lib/scoresheet.rb +155 -156
- data/lib/scoring.rb +145 -145
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 94e563c4bbfab5d2e0efe9e3b286b3b48f8bb45f
|
4
|
+
data.tar.gz: 4796d59ae2e73bf1b47bf7bf37adf250561c92c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ef488d12af8d9e32624f69ec6e0b089ee0ea226f2057fe5656c83d346519ab8214d7df2c3ebc0cb85f124ab2daa4183a8b5d42d11362393ae664c031a91db5d5
|
7
|
+
data.tar.gz: 54e572b7af23e772b8fb9e8029c11c8002ae75b015d8aa342142f7a7d6bc8de8b5a2a2b6819c4cf0fb40cbd3ef60e8ceb341522aeca856554d1d88160ee3fae6
|
data/LICENSE.md
CHANGED
@@ -1,21 +1,21 @@
|
|
1
|
-
The MIT License (MIT)
|
2
|
-
|
3
|
-
Copyright (c) 2014 Mario Martinez and Zachary Perlmutter
|
4
|
-
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
7
|
-
in the Software without restriction, including without limitation the rights
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
10
|
-
furnished to do so, subject to the following conditions:
|
11
|
-
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
13
|
-
copies or substantial portions of the Software.
|
14
|
-
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
-
SOFTWARE.
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2014 Mario Martinez and Zachary Perlmutter
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
CHANGED
@@ -1,11 +1,10 @@
|
|
1
|
-
# Ruby_Dice
|
2
|
-
A Yahtzee clone written in Ruby that runs in the terminal
|
3
|
-
|
4
|
-
This project is a personal project for educational purposes and becoming accustomed to the Ruby programming paradigm. Furthermore, it's to become accustomed to the Git workflow. Contributions are most welcome!
|
5
|
-
## Badges
|
6
|
-
[](http://inch-ci.org/github/martimatix/Ruby-Dice)
|
7
|
-
[](https://codeclimate.com/github/martimatix/Ruby-Dice)
|
8
|
-
[](https://travis-ci.org/martimatix/Ruby-Dice)
|
9
|
-
[](https://codeclimate.com/github/martimatix/Ruby-Dice)
|
10
|
-
|
11
|
-
* [rubydoc.info](http://www.rubydoc.info/github/martimatix/Ruby-Dice/master)
|
1
|
+
# Ruby_Dice
|
2
|
+
A Yahtzee clone written in Ruby that runs in the terminal
|
3
|
+
|
4
|
+
This project is a personal project for educational purposes and becoming accustomed to the Ruby programming paradigm. Furthermore, it's to become accustomed to the Git workflow. Contributions are most welcome!
|
5
|
+
## Badges
|
6
|
+
[](http://inch-ci.org/github/martimatix/Ruby-Dice)
|
7
|
+
[](https://codeclimate.com/github/martimatix/Ruby-Dice)
|
8
|
+
[](https://travis-ci.org/martimatix/Ruby-Dice)
|
9
|
+
[](https://codeclimate.com/github/martimatix/Ruby-Dice)
|
10
|
+
[](http://badge.fury.io/rb/Ruby_Dice)
|
data/bin/Ruby_Dice
CHANGED
@@ -1,38 +1,38 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
BEGIN {
|
3
|
-
if ARGV.include? "-h"
|
4
|
-
puts <<HELP
|
5
|
-
Usage: $ Ruby_Dice [--help]
|
6
|
-
\u00B7 --help -> Displays this help message
|
7
|
-
|
8
|
-
Gameplay:
|
9
|
-
Abbreviations:
|
10
|
-
\u00B7 1 -> Ones
|
11
|
-
\u00B7 2 -> Twos
|
12
|
-
\u00B7 3 -> Threes
|
13
|
-
\u00B7 4 -> Fours
|
14
|
-
\u00B7 5 -> Fives
|
15
|
-
\u00B7 6 -> Sixes
|
16
|
-
\u00B7 ss -> Small Straight
|
17
|
-
\u00B7 ls -> Large Straight
|
18
|
-
\u00B7 tok -> Three Of A Kind
|
19
|
-
\u00B7 fok -> Four Of A Kind
|
20
|
-
\u00B7 fh -> Full House
|
21
|
-
\u00B7 y -> Yahtzee
|
22
|
-
\u00B7 ? -> chance
|
23
|
-
HELP
|
24
|
-
exit
|
25
|
-
end
|
26
|
-
}
|
27
|
-
|
28
|
-
require "Ruby_Dice"
|
29
|
-
|
30
|
-
user = Player.new
|
31
|
-
|
32
|
-
until user.score.filled? do
|
33
|
-
puts ?\n
|
34
|
-
puts "New Turn".center(80)
|
35
|
-
puts ?\n
|
36
|
-
sleep 0.5
|
37
|
-
user.take_turn
|
38
|
-
end
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
BEGIN {
|
3
|
+
if ARGV.include? "-h"
|
4
|
+
puts <<HELP
|
5
|
+
Usage: $ Ruby_Dice [--help]
|
6
|
+
\u00B7 --help -> Displays this help message
|
7
|
+
|
8
|
+
Gameplay:
|
9
|
+
Abbreviations:
|
10
|
+
\u00B7 1 -> Ones
|
11
|
+
\u00B7 2 -> Twos
|
12
|
+
\u00B7 3 -> Threes
|
13
|
+
\u00B7 4 -> Fours
|
14
|
+
\u00B7 5 -> Fives
|
15
|
+
\u00B7 6 -> Sixes
|
16
|
+
\u00B7 ss -> Small Straight
|
17
|
+
\u00B7 ls -> Large Straight
|
18
|
+
\u00B7 tok -> Three Of A Kind
|
19
|
+
\u00B7 fok -> Four Of A Kind
|
20
|
+
\u00B7 fh -> Full House
|
21
|
+
\u00B7 y -> Yahtzee
|
22
|
+
\u00B7 ? -> chance
|
23
|
+
HELP
|
24
|
+
exit
|
25
|
+
end
|
26
|
+
}
|
27
|
+
|
28
|
+
require "Ruby_Dice"
|
29
|
+
|
30
|
+
user = Player.new
|
31
|
+
|
32
|
+
until user.score.filled? do
|
33
|
+
puts ?\n
|
34
|
+
puts "New Turn".center(80)
|
35
|
+
puts ?\n
|
36
|
+
sleep 0.5
|
37
|
+
user.take_turn
|
38
|
+
end
|
data/lib/Ruby_Dice.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
autoload :Dice, "dice"
|
2
|
-
autoload :Player, "player"
|
3
|
-
autoload :ScoreSheet, "scoresheet"
|
4
|
-
autoload :Scoring, "scoring"
|
1
|
+
autoload :Dice, "dice"
|
2
|
+
autoload :Player, "player"
|
3
|
+
autoload :ScoreSheet, "scoresheet"
|
4
|
+
autoload :Scoring, "scoring"
|
data/lib/dice.rb
CHANGED
@@ -1,59 +1,65 @@
|
|
1
|
-
class Dice # Class for working with the 5 dice at the same time
|
2
|
-
|
3
|
-
attr_reader :values # @return [Array] the dice.
|
4
|
-
|
5
|
-
def initialize(values=Array.new(5) {new_dice}) # @param values [Array<Fixnum>] that contains 5 Fixnums
|
6
|
-
check_dice values
|
7
|
-
@values = values
|
8
|
-
end
|
9
|
-
|
10
|
-
# @!group Roll Methods
|
11
|
-
|
12
|
-
=begin
|
13
|
-
@raise [ArgumentError] if i element > 4
|
14
|
-
@return [void]
|
15
|
-
@param i [Array<Fixnum>] < 4
|
16
|
-
=end
|
17
|
-
def roll(dice_to_roll)
|
18
|
-
for index in dice_to_roll
|
19
|
-
raise ArgumentError, "Illegal index" if index > 4
|
20
|
-
@values[index] = new_dice
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
=begin
|
25
|
-
@note Rolls all the dice
|
26
|
-
|
27
|
-
@return [
|
28
|
-
=end
|
29
|
-
def roll_all
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
@
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
@return [
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
1
|
+
class Dice # Class for working with the 5 dice at the same time
|
2
|
+
|
3
|
+
attr_reader :values # @return [Array] the dice.
|
4
|
+
|
5
|
+
def initialize(values=Array.new(5) {new_dice}) # @param values [Array<Fixnum>] that contains 5 Fixnums
|
6
|
+
check_dice values
|
7
|
+
@values = values
|
8
|
+
end
|
9
|
+
|
10
|
+
# @!group Roll Methods
|
11
|
+
|
12
|
+
=begin
|
13
|
+
@raise [ArgumentError] if i element > 4
|
14
|
+
@return [void]
|
15
|
+
@param i [Array<Fixnum>] < 4
|
16
|
+
=end
|
17
|
+
def roll(dice_to_roll)
|
18
|
+
for index in dice_to_roll
|
19
|
+
raise ArgumentError, "Illegal index" if index > 4
|
20
|
+
@values[index] = new_dice
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
=begin
|
25
|
+
@note Rolls all the dice
|
26
|
+
|
27
|
+
@return [Dice]
|
28
|
+
=end
|
29
|
+
def roll_all
|
30
|
+
new
|
31
|
+
end
|
32
|
+
|
33
|
+
# @!endgroup
|
34
|
+
|
35
|
+
def to_s # @return [String] instance variable dice
|
36
|
+
print @values
|
37
|
+
end
|
38
|
+
alias display to_s
|
39
|
+
|
40
|
+
=begin
|
41
|
+
@param values [Array<Integer>]
|
42
|
+
@see (#check_dice)
|
43
|
+
@note setting dice for values for testing
|
44
|
+
@!parse attr_writer :values
|
45
|
+
=end
|
46
|
+
def values=(values)
|
47
|
+
check_dice values
|
48
|
+
@values = values
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def new_dice # @return [Fixnum] a random number between 1 and 6, inclusive
|
54
|
+
(1..6).to_a.sample
|
55
|
+
end
|
56
|
+
|
57
|
+
=begin
|
58
|
+
@param dice [Array<Fixnum>]
|
59
|
+
@return [void]
|
60
|
+
@raise [ArgumentError] if dice does not meet expectations
|
61
|
+
=end
|
62
|
+
def check_dice(dice)
|
63
|
+
raise(ArgumentError, "Array must have 5 Integers that are between 1 and 6") unless dice.length == 5 && dice.all? {|val| (val.is_a? Fixnum) && (val.between? 1,6)}
|
64
|
+
end
|
65
|
+
end
|
data/lib/player.rb
CHANGED
@@ -1,90 +1,118 @@
|
|
1
|
-
require_relative "scoresheet.rb"
|
2
|
-
require 'set'
|
3
|
-
|
4
|
-
class Player
|
5
|
-
|
6
|
-
ScoreAbbr = { # Abbreviations used in-game
|
7
|
-
?1.to_sym => :ones,
|
8
|
-
?2.to_sym => :twos,
|
9
|
-
?3.to_sym => :threes,
|
10
|
-
?4.to_sym => :fours,
|
11
|
-
?5.to_sym => :fives,
|
12
|
-
?6.to_sym => :sixes,
|
13
|
-
ss: :small_straight,
|
14
|
-
ls: :large_straight,
|
15
|
-
tok: :three_of_a_kind,
|
16
|
-
fok: :four_of_a_kind,
|
17
|
-
fh: :full_house,
|
18
|
-
y: :yahtzee,
|
19
|
-
"?".to_sym => :chance
|
20
|
-
}
|
21
|
-
|
22
|
-
attr_reader :score # @return [ScoreSheet]
|
23
|
-
|
24
|
-
def initialize
|
25
|
-
@score = ScoreSheet.new
|
26
|
-
end
|
27
|
-
|
28
|
-
=begin
|
29
|
-
@todo finish method
|
30
|
-
@return [void]
|
31
|
-
=end
|
32
|
-
def take_turn
|
33
|
-
turn_over = false
|
34
|
-
(1..3).each do |i|
|
35
|
-
display_dice i
|
36
|
-
turn_over = user_input i
|
37
|
-
break if turn_over
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def display_dice(i)
|
42
|
-
sleep 0.5
|
43
|
-
puts String.new.center(80, ?-)
|
44
|
-
puts "Here are your dice. You have have #{3-i} #{i==2? "roll":"rolls"} remaining.\n\n"
|
45
|
-
puts "\tDice\t\tZ\tX\tC\tV\tB"
|
46
|
-
puts "\tValues\t\t" + score.dice.values.map{|value| value.to_s}.join(?\t)
|
47
|
-
puts String.new.center(80, ?-)
|
48
|
-
end
|
49
|
-
|
50
|
-
=begin
|
51
|
-
@param i [Fixnum] Amount of times rolled
|
52
|
-
@return [Boolean]
|
53
|
-
@note Gameplay
|
54
|
-
=end
|
55
|
-
def user_input(i)
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
#
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
1
|
+
require_relative "scoresheet.rb"
|
2
|
+
require 'set'
|
3
|
+
|
4
|
+
class Player
|
5
|
+
|
6
|
+
ScoreAbbr = { # Abbreviations used in-game
|
7
|
+
?1.to_sym => :ones,
|
8
|
+
?2.to_sym => :twos,
|
9
|
+
?3.to_sym => :threes,
|
10
|
+
?4.to_sym => :fours,
|
11
|
+
?5.to_sym => :fives,
|
12
|
+
?6.to_sym => :sixes,
|
13
|
+
ss: :small_straight,
|
14
|
+
ls: :large_straight,
|
15
|
+
tok: :three_of_a_kind,
|
16
|
+
fok: :four_of_a_kind,
|
17
|
+
fh: :full_house,
|
18
|
+
y: :yahtzee,
|
19
|
+
"?".to_sym => :chance
|
20
|
+
}
|
21
|
+
|
22
|
+
attr_reader :score # @return [ScoreSheet]
|
23
|
+
|
24
|
+
def initialize
|
25
|
+
@score = ScoreSheet.new
|
26
|
+
end
|
27
|
+
|
28
|
+
=begin
|
29
|
+
@todo finish method
|
30
|
+
@return [void]
|
31
|
+
=end
|
32
|
+
def take_turn
|
33
|
+
turn_over = false
|
34
|
+
(1..3).each do |i|
|
35
|
+
display_dice i
|
36
|
+
turn_over = user_input i
|
37
|
+
break if turn_over
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def display_dice(i)
|
42
|
+
sleep 0.5
|
43
|
+
puts String.new.center(80, ?-)
|
44
|
+
puts "Here are your dice. You have have #{3-i} #{i==2? "roll":"rolls"} remaining.\n\n"
|
45
|
+
puts "\tDice\t\tZ\tX\tC\tV\tB"
|
46
|
+
puts "\tValues\t\t" + score.dice.values.map{|value| value.to_s}.join(?\t)
|
47
|
+
puts String.new.center(80, ?-)
|
48
|
+
end
|
49
|
+
|
50
|
+
=begin
|
51
|
+
@param i [Fixnum] Amount of times rolled
|
52
|
+
@return [Boolean]
|
53
|
+
@note Gameplay
|
54
|
+
=end
|
55
|
+
def user_input(i)
|
56
|
+
|
57
|
+
print_instructions i
|
58
|
+
|
59
|
+
input = gets.chomp.downcase
|
60
|
+
user_input = Set.new(input.split(''))
|
61
|
+
dice_controls = Set.new("zxcvb".split(''))
|
62
|
+
|
63
|
+
# If user wants to enter score
|
64
|
+
if ScoreAbbr.keys.include? input.to_sym
|
65
|
+
user_enter_score input.to_sym, i
|
66
|
+
# Else if user wants to roll the dice
|
67
|
+
elsif i < 3 && (user_input.subset? dice_controls)
|
68
|
+
user_roll_dice input, dice_controls
|
69
|
+
else
|
70
|
+
invalid_input
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
# Private methods need to be indented properly
|
75
|
+
private
|
76
|
+
def print_instructions i
|
77
|
+
if i < 3
|
78
|
+
print "Select dice to re-roll or select a score category: "
|
79
|
+
else
|
80
|
+
print "No rolls remaining. Select a score category: "
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def user_enter_score input_symbol, i
|
85
|
+
field = ScoreAbbr[input_symbol]
|
86
|
+
@score.enter_score field
|
87
|
+
puts score
|
88
|
+
@score.dice.roll_all
|
89
|
+
sleep 2
|
90
|
+
return true
|
91
|
+
rescue
|
92
|
+
puts "\n"
|
93
|
+
sleep 0.5
|
94
|
+
puts " You have already entered a score for that category. Try again. ".center(80, '!')
|
95
|
+
sleep 1.5
|
96
|
+
puts "\n"
|
97
|
+
user_input i
|
98
|
+
end
|
99
|
+
|
100
|
+
def user_roll_dice input, dice_controls
|
101
|
+
dice_to_roll = (0..4).to_a.select { |index| input.include? dice_controls.to_a[index]}
|
102
|
+
@score.dice.roll(dice_to_roll)
|
103
|
+
sleep 0.5
|
104
|
+
2.times {puts ?\n}
|
105
|
+
puts " Rolling Dice!\ ".center 80, "* "
|
106
|
+
sleep 1
|
107
|
+
return false
|
108
|
+
end
|
109
|
+
|
110
|
+
def invalid_input
|
111
|
+
puts "Invalid input. Please try again."
|
112
|
+
sleep 1.5
|
113
|
+
puts ?\n
|
114
|
+
user_input i
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
|
data/lib/scoresheet.rb
CHANGED
@@ -1,156 +1,155 @@
|
|
1
|
-
require_relative "dice.rb"
|
2
|
-
require_relative "scoring.rb"
|
3
|
-
|
4
|
-
class ScoreSheet # Keeps score throughout the game
|
5
|
-
include Scoring
|
6
|
-
|
7
|
-
UpperScores = :ones, :twos, :threes, :fours, :fives, :sixes # The fields on the top section of the score sheet
|
8
|
-
|
9
|
-
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
|
10
|
-
|
11
|
-
attr_reader :sheet # @return [Hash] table of two element arrays where the first value is the score and the second is whether the field has been played
|
12
|
-
attr_reader :dice # @return [Dice]
|
13
|
-
attr_reader :num_yahtzees # @return [Fixnum] counter for number of yahtzees scored in the game
|
14
|
-
=begin
|
15
|
-
@param custom_dice [Array<Fixnum>] custom dice for testing
|
16
|
-
=end
|
17
|
-
def initialize(custom_dice=Array.new(5) {Dice.new.instance_eval "new_dice"})
|
18
|
-
@sheet, @dice, @num_yahtzees = Hash.new, Dice.new(custom_dice), 0
|
19
|
-
Array.new(UpperScores).concat(LowerScores).each {|s| @sheet[s] = [0, false]}
|
20
|
-
end
|
21
|
-
|
22
|
-
=begin
|
23
|
-
@param field [Symbol]
|
24
|
-
@return [void]
|
25
|
-
@raise ArgumentError
|
26
|
-
=end
|
27
|
-
def enter_score(field)
|
28
|
-
if field == :yahtzee && ((available :yahtzee) || @num_yahtzees > 0)
|
29
|
-
@sheet[field] = yahtzee, true
|
30
|
-
elsif available field
|
31
|
-
@sheet[field] = send(field, @dice.values), true
|
32
|
-
else
|
33
|
-
raise ArgumentError, "Score already entered."
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
=begin
|
38
|
-
@return [true] if the score sheet is completely filled and no legal moves remain
|
39
|
-
@return [false] if the score sheet is not completely filled and there are still legal moves to be made
|
40
|
-
=end
|
41
|
-
def filled?
|
42
|
-
@sheet.collect{|k,v| v[1]}.reduce{|r,e| r && e}
|
43
|
-
end
|
44
|
-
|
45
|
-
def raw_upper # @return [Fixnum]
|
46
|
-
@sheet.select{|x| UpperScores.include? x }.collect{|k,v| v[0]}.reduce :+
|
47
|
-
end
|
48
|
-
|
49
|
-
def upper_score_total # @return [Fixnum] the total score of the upper part of the ScoreSheet, including bonuses
|
50
|
-
raw_upper + upper_score_bonus
|
51
|
-
end
|
52
|
-
def lower_score_total # @return [Integer] The total score of the lower part of the ScoreSheet
|
53
|
-
@sheet.select{|x| LowerScores.include? x }.collect{|k,v| v[0]}.reduce :+
|
54
|
-
end
|
55
|
-
def total # @return [Integer] the grand total
|
56
|
-
lower_score_total + upper_score_total
|
57
|
-
end
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
=begin
|
62
|
-
Checks if upper score bonus can be awarded
|
63
|
-
@return [Fixnum] 0 if raw_upper < 63
|
64
|
-
@return [Fixnum] 35 if raw_upper >= 63
|
65
|
-
=end
|
66
|
-
def upper_score_bonus
|
67
|
-
if raw_upper >= 63 then 35
|
68
|
-
else
|
69
|
-
0
|
70
|
-
end
|
71
|
-
end
|
72
|
-
=begin
|
73
|
-
@return [Fixnum]
|
74
|
-
Checks to see if you have all the of the same dice
|
75
|
-
=end
|
76
|
-
def yahtzee
|
77
|
-
if dice.values.all? {|x| x == dice.values[0]}
|
78
|
-
@num_yahtzees += 1
|
79
|
-
return sheet[:yahtzee][0] + 50 * 2 ** (@num_yahtzees - 1)
|
80
|
-
else
|
81
|
-
return 0
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
=begin
|
86
|
-
@todo Find a less complex way to create final string
|
87
|
-
@return [String]
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
ss
|
92
|
-
|
93
|
-
|
94
|
-
ss +=
|
95
|
-
ss += "
|
96
|
-
ss +=
|
97
|
-
ss
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
upper, lower
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
bonus_string, yahtzee_string
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
@
|
126
|
-
@param
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
score_label
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
@
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
end
|
1
|
+
require_relative "dice.rb"
|
2
|
+
require_relative "scoring.rb"
|
3
|
+
|
4
|
+
class ScoreSheet # Keeps score throughout the game
|
5
|
+
include Scoring
|
6
|
+
|
7
|
+
UpperScores = :ones, :twos, :threes, :fours, :fives, :sixes # The fields on the top section of the score sheet
|
8
|
+
|
9
|
+
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
|
10
|
+
|
11
|
+
attr_reader :sheet # @return [Hash] table of two element arrays where the first value is the score and the second is whether the field has been played
|
12
|
+
attr_reader :dice # @return [Dice]
|
13
|
+
attr_reader :num_yahtzees # @return [Fixnum] counter for number of yahtzees scored in the game
|
14
|
+
=begin
|
15
|
+
@param custom_dice [Array<Fixnum>] custom dice for testing
|
16
|
+
=end
|
17
|
+
def initialize(custom_dice=Array.new(5) {Dice.new.instance_eval "new_dice"})
|
18
|
+
@sheet, @dice, @num_yahtzees = Hash.new, Dice.new(custom_dice), 0
|
19
|
+
Array.new(UpperScores).concat(LowerScores).each {|s| @sheet[s] = [0, false]}
|
20
|
+
end
|
21
|
+
|
22
|
+
=begin
|
23
|
+
@param field [Symbol]
|
24
|
+
@return [void]
|
25
|
+
@raise ArgumentError
|
26
|
+
=end
|
27
|
+
def enter_score(field)
|
28
|
+
if field == :yahtzee && ((available :yahtzee) || @num_yahtzees > 0)
|
29
|
+
@sheet[field] = yahtzee, true
|
30
|
+
elsif available field
|
31
|
+
@sheet[field] = send(field, @dice.values), true
|
32
|
+
else
|
33
|
+
raise ArgumentError, "Score already entered."
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
=begin
|
38
|
+
@return [true] if the score sheet is completely filled and no legal moves remain
|
39
|
+
@return [false] if the score sheet is not completely filled and there are still legal moves to be made
|
40
|
+
=end
|
41
|
+
def filled?
|
42
|
+
@sheet.collect{|k,v| v[1]}.reduce{|r,e| r && e}
|
43
|
+
end
|
44
|
+
|
45
|
+
def raw_upper # @return [Fixnum]
|
46
|
+
@sheet.select{|x| UpperScores.include? x }.collect{|k,v| v[0]}.reduce :+
|
47
|
+
end
|
48
|
+
|
49
|
+
def upper_score_total # @return [Fixnum] the total score of the upper part of the ScoreSheet, including bonuses
|
50
|
+
raw_upper + upper_score_bonus
|
51
|
+
end
|
52
|
+
def lower_score_total # @return [Integer] The total score of the lower part of the ScoreSheet
|
53
|
+
@sheet.select{|x| LowerScores.include? x }.collect{|k,v| v[0]}.reduce :+
|
54
|
+
end
|
55
|
+
def total # @return [Integer] the grand total
|
56
|
+
lower_score_total + upper_score_total
|
57
|
+
end
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
=begin
|
62
|
+
Checks if upper score bonus can be awarded
|
63
|
+
@return [Fixnum] 0 if raw_upper < 63
|
64
|
+
@return [Fixnum] 35 if raw_upper >= 63
|
65
|
+
=end
|
66
|
+
def upper_score_bonus
|
67
|
+
if raw_upper >= 63 then 35
|
68
|
+
else
|
69
|
+
0
|
70
|
+
end
|
71
|
+
end
|
72
|
+
=begin
|
73
|
+
@return [Fixnum]
|
74
|
+
Checks to see if you have all the of the same dice
|
75
|
+
=end
|
76
|
+
def yahtzee
|
77
|
+
if dice.values.all? {|x| x == dice.values[0]}
|
78
|
+
@num_yahtzees += 1
|
79
|
+
return sheet[:yahtzee][0] + 50 * 2 ** (@num_yahtzees - 1)
|
80
|
+
else
|
81
|
+
return 0
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
=begin
|
86
|
+
@todo Find a less complex way to create final string
|
87
|
+
@return [String]
|
88
|
+
=end
|
89
|
+
def to_s
|
90
|
+
ss = String.new
|
91
|
+
ss += %Q( S C O R E S H E E T ).center(80, ?=) + "\n\n"
|
92
|
+
(0..(UpperScores.length - 1)).each { |i| ss += print_score_sheet_line(i) }
|
93
|
+
ss += bonus_yahtzee_line
|
94
|
+
ss += "\n\n"
|
95
|
+
ss += "Total Score: #{total}".center(80) + ?\n
|
96
|
+
ss += (?= * 80) + ?\n
|
97
|
+
return ss
|
98
|
+
end
|
99
|
+
|
100
|
+
|
101
|
+
private # Helper methods
|
102
|
+
|
103
|
+
def available (field)
|
104
|
+
@sheet[field][1] == false
|
105
|
+
end
|
106
|
+
|
107
|
+
def score_sheet_line(left_val, right_val)
|
108
|
+
(left_val + "\t\t" + right_val).center(68) + ?\n
|
109
|
+
end
|
110
|
+
alias ssl score_sheet_line
|
111
|
+
|
112
|
+
def print_score_sheet_line(i);
|
113
|
+
upper, lower = format_score(UpperScores, i), format_score(LowerScores, i)
|
114
|
+
ssl upper, lower
|
115
|
+
end
|
116
|
+
|
117
|
+
|
118
|
+
def bonus_yahtzee_line
|
119
|
+
bonus_string, yahtzee_string = justify_score("Bonus", upper_score_bonus.to_s), format_score(LowerScores, LowerScores.length - 1)
|
120
|
+
ssl bonus_string, yahtzee_string
|
121
|
+
end
|
122
|
+
alias byl bonus_yahtzee_line
|
123
|
+
=begin
|
124
|
+
@return [String] the formatted string
|
125
|
+
@param index [Fixnum]
|
126
|
+
@param score_region [String, Array<String>]
|
127
|
+
Replace underscores with spaces
|
128
|
+
=end
|
129
|
+
def format_score(score_region, index)
|
130
|
+
score_label = "#{score_region[index]}".tr(?_, " ")
|
131
|
+
cap_label score_label
|
132
|
+
score_field = @sheet[score_region[index]]
|
133
|
+
return justify_score(score_label, "#{score_field[1]? score_field[0]:?-}")
|
134
|
+
end
|
135
|
+
|
136
|
+
def justify_score(label, score)
|
137
|
+
label.ljust(20) + score.rjust(3)
|
138
|
+
end
|
139
|
+
|
140
|
+
=begin
|
141
|
+
@param score_label [String]
|
142
|
+
@return [String]
|
143
|
+
Capitalize each letter of each word only if the score label has two words
|
144
|
+
Else only capitalize the first letter of the score label
|
145
|
+
=end
|
146
|
+
def cap_label(score_label)
|
147
|
+
if score_label.split.length == 2
|
148
|
+
score_label = score_label.split.map(&:capitalize)*' '
|
149
|
+
else
|
150
|
+
score_label.capitalize!
|
151
|
+
end
|
152
|
+
end
|
153
|
+
public
|
154
|
+
alias display to_s
|
155
|
+
end
|
data/lib/scoring.rb
CHANGED
@@ -1,145 +1,145 @@
|
|
1
|
-
require_relative "dice.rb"
|
2
|
-
|
3
|
-
module Scoring # methods for calculating score
|
4
|
-
|
5
|
-
UpperScores = :ones, :twos, :threes, :fours, :fives, :sixes # The fields on the top section of the score sheet
|
6
|
-
|
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
|
-
|
9
|
-
=begin
|
10
|
-
Checks to see if you have 3 of one kind of dice and 2 of another
|
11
|
-
@return [Fixnum] 25 if @dice.dice contains 3 of one Fixnum and 2 of another
|
12
|
-
@return [Fixnum] 0 if @dice.dice does not contain 3 of one Fixnum and 2 of another
|
13
|
-
=end
|
14
|
-
def full_house(dice)
|
15
|
-
f_table = freq dice
|
16
|
-
if (f_table.length == 2 && f_table.has_value?(3)) || f_table.length == 1 then return 25
|
17
|
-
else; return 0
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
=begin
|
22
|
-
Checks to see if you have 4 of the same dice
|
23
|
-
@return [Fixnum] 0 if <= 4 indices have the same value
|
24
|
-
@return [Fixnum] dice.reduce(:+) if >= 4 indices have the same value
|
25
|
-
@see (#three_of_a_kind)
|
26
|
-
=end
|
27
|
-
def four_of_a_kind(dice)
|
28
|
-
of_a_kind dice, 4
|
29
|
-
end
|
30
|
-
|
31
|
-
=begin
|
32
|
-
@param d [Array<Fixnum>] the dice to be tested
|
33
|
-
@return [Fixnum] the score
|
34
|
-
=end
|
35
|
-
def ones(d)
|
36
|
-
single_face d, 1
|
37
|
-
end
|
38
|
-
|
39
|
-
def twos(d) # @see (#ones)
|
40
|
-
single_face d, 2
|
41
|
-
end
|
42
|
-
|
43
|
-
def threes(d) # @see (#ones)
|
44
|
-
single_face d, 3
|
45
|
-
end
|
46
|
-
|
47
|
-
def fours(d) # @see (#ones)
|
48
|
-
single_face d, 4
|
49
|
-
end
|
50
|
-
|
51
|
-
def fives(d) # @see (#ones)
|
52
|
-
single_face d, 5
|
53
|
-
end
|
54
|
-
|
55
|
-
def sixes(d) # @see (#ones)
|
56
|
-
single_face d, 6
|
57
|
-
end
|
58
|
-
|
59
|
-
=begin
|
60
|
-
@see (#four_of_a_kind)
|
61
|
-
Checks to see if you have 3 of the same dice
|
62
|
-
@return [Fixnum] dice.reduce(:+) if there is <= 3 of the same value
|
63
|
-
@return [Fixnum] 0 if you do not have a three of a kind
|
64
|
-
=end
|
65
|
-
def three_of_a_kind(dice)
|
66
|
-
of_a_kind dice, 3
|
67
|
-
end
|
68
|
-
|
69
|
-
=begin
|
70
|
-
@param dice [Array<Fixnum>] the dice to be evaluated
|
71
|
-
@return [Fixnum] the sum of all the dice
|
72
|
-
=end
|
73
|
-
def chance(dice)
|
74
|
-
dice.reduce :+
|
75
|
-
end
|
76
|
-
|
77
|
-
=begin
|
78
|
-
@param dice [Array<Fixnum>] the dice to be tested
|
79
|
-
@return [Fixnum] 30 if there are 3 consecutive Fixnums in dice
|
80
|
-
@return [Fixnum] 0 if there are not three conscecutive Fixnums in dice
|
81
|
-
@see (#large_straight)
|
82
|
-
=end
|
83
|
-
def small_straight(dice)
|
84
|
-
straight dice, 4, 30
|
85
|
-
end
|
86
|
-
alias SS small_straight
|
87
|
-
|
88
|
-
=begin
|
89
|
-
@param dice [Array<Fixnum>] the dice to be tested
|
90
|
-
@return [Fixnum] 40 if there are 4 consecutive Fixnums in dice
|
91
|
-
@return [Fixnum] 0 if there are not three conscecutive Fixnums in dice
|
92
|
-
@see (#small_straight)
|
93
|
-
=end
|
94
|
-
def large_straight(dice)
|
95
|
-
straight dice, 5, 40
|
96
|
-
end
|
97
|
-
alias LS large_straight
|
98
|
-
|
99
|
-
private # Helper methods for score calculation
|
100
|
-
|
101
|
-
def single_face(dice, value)
|
102
|
-
v = dice.select{|number| number == value}.reduce :+
|
103
|
-
unless v.nil?
|
104
|
-
return v
|
105
|
-
else
|
106
|
-
return 0
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
def freq(dice)
|
111
|
-
dice.inject(Hash.new(0)) { |h,v| h[v] += 1; h }
|
112
|
-
end
|
113
|
-
|
114
|
-
def modal_frequency(dice)
|
115
|
-
freq(dice).max_by{|k,v| v}[1]
|
116
|
-
end
|
117
|
-
|
118
|
-
def of_a_kind(dice, limit)
|
119
|
-
if modal_frequency(dice) >= limit
|
120
|
-
dice.reduce :+
|
121
|
-
else
|
122
|
-
0
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
=begin
|
127
|
-
@param dice [Fixnum] the dice to be tested
|
128
|
-
@param limit [Fixnum] = 4 for small straight
|
129
|
-
@param limit [Fixnum] = 5 for large straight
|
130
|
-
common code for both small straight (SS) and large straight (LS)
|
131
|
-
@param score [Fixnum] is the score to return
|
132
|
-
@return [Fixnum] score
|
133
|
-
=end
|
134
|
-
def straight(dice, limit, score)
|
135
|
-
#each_cons is generating every possible value for a straight of length limit
|
136
|
-
(1..6).each_cons(limit).each do |i|
|
137
|
-
# Asking if i is a subset of dice
|
138
|
-
if (i - dice).empty?
|
139
|
-
return score if (i - dice)
|
140
|
-
end
|
141
|
-
end
|
142
|
-
return 0
|
143
|
-
end
|
144
|
-
|
145
|
-
end
|
1
|
+
require_relative "dice.rb"
|
2
|
+
|
3
|
+
module Scoring # methods for calculating score
|
4
|
+
|
5
|
+
UpperScores = :ones, :twos, :threes, :fours, :fives, :sixes # The fields on the top section of the score sheet
|
6
|
+
|
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
|
+
|
9
|
+
=begin
|
10
|
+
Checks to see if you have 3 of one kind of dice and 2 of another
|
11
|
+
@return [Fixnum] 25 if @dice.dice contains 3 of one Fixnum and 2 of another
|
12
|
+
@return [Fixnum] 0 if @dice.dice does not contain 3 of one Fixnum and 2 of another
|
13
|
+
=end
|
14
|
+
def full_house(dice)
|
15
|
+
f_table = freq dice
|
16
|
+
if (f_table.length == 2 && f_table.has_value?(3)) || f_table.length == 1 then return 25
|
17
|
+
else; return 0
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
=begin
|
22
|
+
Checks to see if you have 4 of the same dice
|
23
|
+
@return [Fixnum] 0 if <= 4 indices have the same value
|
24
|
+
@return [Fixnum] dice.reduce(:+) if >= 4 indices have the same value
|
25
|
+
@see (#three_of_a_kind)
|
26
|
+
=end
|
27
|
+
def four_of_a_kind(dice)
|
28
|
+
of_a_kind dice, 4
|
29
|
+
end
|
30
|
+
|
31
|
+
=begin
|
32
|
+
@param d [Array<Fixnum>] the dice to be tested
|
33
|
+
@return [Fixnum] the score
|
34
|
+
=end
|
35
|
+
def ones(d)
|
36
|
+
single_face d, 1
|
37
|
+
end
|
38
|
+
|
39
|
+
def twos(d) # @see (#ones)
|
40
|
+
single_face d, 2
|
41
|
+
end
|
42
|
+
|
43
|
+
def threes(d) # @see (#ones)
|
44
|
+
single_face d, 3
|
45
|
+
end
|
46
|
+
|
47
|
+
def fours(d) # @see (#ones)
|
48
|
+
single_face d, 4
|
49
|
+
end
|
50
|
+
|
51
|
+
def fives(d) # @see (#ones)
|
52
|
+
single_face d, 5
|
53
|
+
end
|
54
|
+
|
55
|
+
def sixes(d) # @see (#ones)
|
56
|
+
single_face d, 6
|
57
|
+
end
|
58
|
+
|
59
|
+
=begin
|
60
|
+
@see (#four_of_a_kind)
|
61
|
+
Checks to see if you have 3 of the same dice
|
62
|
+
@return [Fixnum] dice.reduce(:+) if there is <= 3 of the same value
|
63
|
+
@return [Fixnum] 0 if you do not have a three of a kind
|
64
|
+
=end
|
65
|
+
def three_of_a_kind(dice)
|
66
|
+
of_a_kind dice, 3
|
67
|
+
end
|
68
|
+
|
69
|
+
=begin
|
70
|
+
@param dice [Array<Fixnum>] the dice to be evaluated
|
71
|
+
@return [Fixnum] the sum of all the dice
|
72
|
+
=end
|
73
|
+
def chance(dice)
|
74
|
+
dice.reduce :+
|
75
|
+
end
|
76
|
+
|
77
|
+
=begin
|
78
|
+
@param dice [Array<Fixnum>] the dice to be tested
|
79
|
+
@return [Fixnum] 30 if there are 3 consecutive Fixnums in dice
|
80
|
+
@return [Fixnum] 0 if there are not three conscecutive Fixnums in dice
|
81
|
+
@see (#large_straight)
|
82
|
+
=end
|
83
|
+
def small_straight(dice)
|
84
|
+
straight dice, 4, 30
|
85
|
+
end
|
86
|
+
alias SS small_straight
|
87
|
+
|
88
|
+
=begin
|
89
|
+
@param dice [Array<Fixnum>] the dice to be tested
|
90
|
+
@return [Fixnum] 40 if there are 4 consecutive Fixnums in dice
|
91
|
+
@return [Fixnum] 0 if there are not three conscecutive Fixnums in dice
|
92
|
+
@see (#small_straight)
|
93
|
+
=end
|
94
|
+
def large_straight(dice)
|
95
|
+
straight dice, 5, 40
|
96
|
+
end
|
97
|
+
alias LS large_straight
|
98
|
+
|
99
|
+
private # Helper methods for score calculation
|
100
|
+
|
101
|
+
def single_face(dice, value)
|
102
|
+
v = dice.select{|number| number == value}.reduce :+
|
103
|
+
unless v.nil?
|
104
|
+
return v
|
105
|
+
else
|
106
|
+
return 0
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def freq(dice)
|
111
|
+
dice.inject(Hash.new(0)) { |h,v| h[v] += 1; h }
|
112
|
+
end
|
113
|
+
|
114
|
+
def modal_frequency(dice)
|
115
|
+
freq(dice).max_by{|k,v| v}[1]
|
116
|
+
end
|
117
|
+
|
118
|
+
def of_a_kind(dice, limit)
|
119
|
+
if modal_frequency(dice) >= limit
|
120
|
+
dice.reduce :+
|
121
|
+
else
|
122
|
+
0
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
=begin
|
127
|
+
@param dice [Fixnum] the dice to be tested
|
128
|
+
@param limit [Fixnum] = 4 for small straight
|
129
|
+
@param limit [Fixnum] = 5 for large straight
|
130
|
+
common code for both small straight (SS) and large straight (LS)
|
131
|
+
@param score [Fixnum] is the score to return
|
132
|
+
@return [Fixnum] score
|
133
|
+
=end
|
134
|
+
def straight(dice, limit, score)
|
135
|
+
#each_cons is generating every possible value for a straight of length limit
|
136
|
+
(1..6).each_cons(limit).each do |i|
|
137
|
+
# Asking if i is a subset of dice
|
138
|
+
if (i - dice).empty?
|
139
|
+
return score if (i - dice)
|
140
|
+
end
|
141
|
+
end
|
142
|
+
return 0
|
143
|
+
end
|
144
|
+
|
145
|
+
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: 0.0.
|
4
|
+
version: 1.0.0.pre
|
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-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -61,7 +61,7 @@ files:
|
|
61
61
|
- lib/player.rb
|
62
62
|
- lib/scoresheet.rb
|
63
63
|
- lib/scoring.rb
|
64
|
-
homepage:
|
64
|
+
homepage: https://rubygems.org/gems/Ruby_Dice
|
65
65
|
licenses:
|
66
66
|
- MIT
|
67
67
|
metadata: {}
|
@@ -76,14 +76,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
76
76
|
version: '0'
|
77
77
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
78
|
requirements:
|
79
|
-
- - "
|
79
|
+
- - ">"
|
80
80
|
- !ruby/object:Gem::Version
|
81
|
-
version:
|
81
|
+
version: 1.3.1
|
82
82
|
requirements:
|
83
|
-
-
|
83
|
+
- Terminal
|
84
84
|
rubyforge_project:
|
85
85
|
rubygems_version: 2.4.5
|
86
86
|
signing_key:
|
87
87
|
specification_version: 4
|
88
88
|
summary: A Yahtzee clone written in Ruby that runs in the terminal
|
89
89
|
test_files: []
|
90
|
+
has_rdoc:
|