studio_game_sammy 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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: c3b48de88f533e581064caa59a624ccb655f4457a1afd0fb24b80dd1b5ec7e3b
4
+ data.tar.gz: 71532950a1c2fe6ba8597fe57eb5b6dba7cc65d3aaaeb1bc874a808c92dc3349
5
+ SHA512:
6
+ metadata.gz: c6ca1f8baff455dee98014019ef5c66e34560cce3a600030d40517d69ff438201617115284d627f823f2b68875495263ff830bd712a5516af45c2f9993e9bebb
7
+ data.tar.gz: '086e3aa4d9fb4cbd53dce5a5115169e02c4cb6e71b76624be645b632e65eac97b1b40eb2f35d497c6050ea7633f2d4e28d8d7ec03b498779ec52945f6c3c90d3'
data/LICENSE ADDED
File without changes
data/README ADDED
File without changes
data/bin/players.csv ADDED
@@ -0,0 +1,3 @@
1
+ Alvin,100
2
+ Simon,60
3
+ Theo,125
data/bin/studio_game ADDED
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative "../lib/studio_game/game"
4
+ require_relative "../lib/studio_game/clumsy_player"
5
+ require_relative "../lib/studio_game/berserk_player"
6
+
7
+ knuckleheads = StudioGame::Game.new("Knuckleheads")
8
+
9
+ default_player_file = File.join(File.dirname(__FILE__), "players.csv")
10
+ knuckleheads.load_players (ARGV.shift || default_player_file)
11
+
12
+ klutz = StudioGame::ClumsyPlayer.new("klutz", 105)
13
+ berserker = StudioGame::BerserkPlayer.new("berserker", 50)
14
+
15
+ knuckleheads.add_player(klutz)
16
+ knuckleheads.add_player(berserker)
17
+
18
+ loop do
19
+ puts "How many game rounds? ('quit' to exit)"
20
+ user_input = gets.chomp.downcase
21
+
22
+ case user_input
23
+ when /\d+$/
24
+ knuckleheads.play(user_input.to_i)
25
+ when "exit", "quit"
26
+ knuckleheads.print_stats
27
+ break
28
+ else
29
+ puts "Please enter a valid a number or 'quit'."
30
+ end
31
+
32
+ knuckleheads.save_high_scores
33
+ end
@@ -0,0 +1,3 @@
1
+ moe,100
2
+ larry,60
3
+ curly, 125
@@ -0,0 +1,5 @@
1
+ module Auditable
2
+ def audit
3
+ puts "Rolled a #{self.number} (#{self.class})"
4
+ end
5
+ end
@@ -0,0 +1,31 @@
1
+ require_relative "player"
2
+
3
+ module StudioGame
4
+ class BerserkPlayer < Player
5
+ def initialize(name, health = 100)
6
+ super(name, health)
7
+ @w00t_count = 0
8
+ end
9
+
10
+ def berserk?
11
+ @w00t_count > 5
12
+ end
13
+
14
+ def w00t
15
+ @w00t_count += 1
16
+ super
17
+ puts "#{@name} is berserk!" if berserk?
18
+ end
19
+
20
+ def blam
21
+ berserk? ? w00t : super
22
+ end
23
+ end
24
+ end
25
+
26
+ if __FILE__ == $0
27
+ berserker = StudioGame::BerserkPlayer.new("berserker", 50)
28
+ 6.times { berserker.w00t }
29
+ 2.times { berserker.blam }
30
+ puts berserker.health
31
+ end
@@ -0,0 +1,37 @@
1
+ require_relative "player"
2
+
3
+ module StudioGame
4
+ class ClumsyPlayer < Player
5
+ attr_reader :boost_factor
6
+
7
+ def initialize(name, health = 100, boost_factor = 1)
8
+ super(name, health)
9
+ @boost_factor = boost_factor
10
+ end
11
+
12
+ def w00t
13
+ @boost_factor.times { super }
14
+ end
15
+
16
+ def found_treasure(treasure)
17
+ super(Treasure.new(treasure.name, treasure.points / 2.0))
18
+ end
19
+ end
20
+ end
21
+
22
+ if __FILE__ == $0
23
+ clumsy = StudioGame::ClumsyPlayer.new("klutz")
24
+
25
+ hammer = Treasure.new(:hammer, 50)
26
+ clumsy.found_treasure(hammer)
27
+ clumsy.found_treasure(hammer)
28
+ clumsy.found_treasure(hammer)
29
+
30
+ crowbar = Treasure.new(:crowbar, 400)
31
+ clumsy.found_treasure(crowbar)
32
+
33
+ clumsy.each_found_treasure do |treasure|
34
+ puts "#{treasure.points} total #{treasure.name} points"
35
+ end
36
+ puts "#{clumsy.points} grand total points"
37
+ end
@@ -0,0 +1,14 @@
1
+ require_relative "auditable"
2
+
3
+ module StudioGame
4
+ class Die
5
+ include Auditable
6
+ attr_reader :number
7
+
8
+ def roll
9
+ @number = rand(1..6)
10
+ audit
11
+ @number
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,93 @@
1
+ require_relative "player"
2
+ require_relative "game_turn"
3
+ require_relative "treasure_trove"
4
+
5
+ module StudioGame
6
+ class Game
7
+ attr_reader :title
8
+
9
+ def initialize(title)
10
+ @title = title.capitalize
11
+ @players = []
12
+ end
13
+
14
+ def add_player(player)
15
+ @players << player
16
+ end
17
+
18
+ def load_players(from_file)
19
+ File
20
+ .readlines(from_file)
21
+ .each { |line| add_player(Player.from_csv(line)) }
22
+ end
23
+
24
+ def save_high_scores(to_file = "high_scores.txt")
25
+ File.open(to_file, "w") do |file|
26
+ file.puts "#{@title} High Scores:"
27
+ @players.sort.each { |player| file.puts player.format_score }
28
+ end
29
+ end
30
+
31
+ def play(rounds)
32
+ puts "There are #{@players.size} players in #{@title}:"
33
+
34
+ @players.each { |player| puts player }
35
+
36
+ StudioGame::TreasureTrove.print_treasures
37
+
38
+ 1.upto(rounds) do |number|
39
+ status = yield if block_given?
40
+
41
+ break if !status.nil? && status
42
+ puts "\nRound #{number}:"
43
+ @players.each do |player|
44
+ StudioGame::GameTurn.take_turn(player)
45
+ puts player
46
+ end
47
+ end
48
+ end
49
+
50
+ def print_name_and_health(player)
51
+ puts "#{player.name} (#{player.health})"
52
+ end
53
+
54
+ def total_points
55
+ @players.reduce(0) { |sum, player| sum + player.points }
56
+ end
57
+
58
+ def print_stats
59
+ strong, wimpy = @players.partition { |player| player.strong? }
60
+
61
+ puts "\n#{@title} Statistics:"
62
+
63
+ puts "\n#{strong.size} strong players:"
64
+ strong.each { |player| print_name_and_health(player) }
65
+
66
+ puts "\n#{wimpy.size} wimpy players:"
67
+ wimpy.each { |player| print_name_and_health(player) }
68
+
69
+ puts "\n#{@title} High Scores:"
70
+ @players.sort.each { |player| puts player.format_score }
71
+
72
+ @players.each do |player|
73
+ puts "\n#{player.name}'s point totals:"
74
+ player.each_found_treasure do |treasure|
75
+ puts "#{treasure.points} total #{treasure.name} points"
76
+ end
77
+ end
78
+
79
+ puts "".ljust(20, "*")
80
+ puts "#{total_points} points from treasures found"
81
+ puts "".ljust(20, "*")
82
+ end
83
+ end
84
+ end
85
+
86
+ if __FILE__ == $0
87
+ knuckleheads = StudioGame::Game.new("Knuckleheads")
88
+ knuckleheads.add_player(Player.new("moe"))
89
+ knuckleheads.add_player(Player.new("larry", 60))
90
+ knuckleheads.add_player(Player.new("curly", 125))
91
+
92
+ knuckleheads.play
93
+ end
@@ -0,0 +1,22 @@
1
+ require_relative "player"
2
+ require_relative "die"
3
+
4
+ module StudioGame
5
+ module GameTurn
6
+ def self.take_turn(player)
7
+ die = Die.new
8
+
9
+ case die.roll
10
+ when 1..2
11
+ player.blam
12
+ when 3..4
13
+ puts "#{player.name} was skipped."
14
+ else
15
+ player.w00t
16
+ end
17
+
18
+ treasure = TreasureTrove.random
19
+ player.found_treasure(treasure)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,19 @@
1
+ require_relative "auditable"
2
+
3
+ module StudioGame
4
+ class LoadedDie
5
+ include Auditable
6
+ attr_reader :number
7
+
8
+ def initialize
9
+ roll
10
+ end
11
+
12
+ def roll
13
+ numbers = [1, 1, 2, 5, 6, 6]
14
+ @number = numbers.sample
15
+ audit
16
+ @number
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,17 @@
1
+ module StudioGame
2
+ module Playable
3
+ def blam
4
+ self.health -= 10
5
+ puts "#{self.name} got blammed!"
6
+ end
7
+
8
+ def w00t
9
+ self.health += 15
10
+ puts "#{self.name} got w00ted"
11
+ end
12
+
13
+ def strong?
14
+ self.health > 100
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,80 @@
1
+ require_relative "treasure_trove"
2
+ require_relative "playable"
3
+
4
+ module StudioGame
5
+ class Player
6
+ # by default object state is private (meaning instance variables)
7
+ # to make them public, we need to use the attr_accessor method -- short hand for getter and setter methods
8
+ # attr_accessor -- creates getter and setter methods
9
+ # attr_reader -- for getter methods
10
+ # attr_writer -- for setter methods
11
+
12
+ # virtual attribute -- a derived attribute
13
+ # self in class in ruby works the same as this in Java
14
+ # similar to how scopes go from inner to outer
15
+ # (parent scope tree trace to find definition for variable or function)
16
+ include Playable
17
+ attr_accessor :name, :health
18
+
19
+ def initialize(name, health = 100)
20
+ @name = name.capitalize
21
+ @health = health
22
+ @found_treasures = Hash.new(0)
23
+ end
24
+
25
+ def self.from_csv(string)
26
+ name, health = string.split(",")
27
+ Player.new(name, Integer(health))
28
+ end
29
+
30
+ def score
31
+ @health + points
32
+ end
33
+
34
+ def say_hello
35
+ "I'm #{@name} with a health of #{@health}."
36
+ end
37
+
38
+ def found_treasure(treasure)
39
+ @found_treasures[treasure.name] += treasure.points
40
+ puts "#{@name} found a #{treasure.name} worth #{treasure.points} points."
41
+ puts "#{@name}'s treasures: #{@found_treasures}"
42
+ end
43
+
44
+ def points
45
+ @found_treasures.values.reduce(0, :+)
46
+ end
47
+
48
+ def each_found_treasure
49
+ @found_treasures.each { |name, points| yield Treasure.new(name, points) }
50
+ end
51
+
52
+ def format_score
53
+ "#{@name.ljust(20, ".")} #{score}"
54
+ end
55
+
56
+ # helper methods
57
+ def to_s
58
+ "I'm #{@name} with health=#{@health}, points=#{points}, and scores=#{score}."
59
+ end
60
+
61
+ def name=(name)
62
+ @name = name.capitalize
63
+ end
64
+
65
+ # by default, sort happens in descending order
66
+ def <=>(other)
67
+ other.score <=> score
68
+ end
69
+ end
70
+ end
71
+
72
+ if __FILE__ == $0
73
+ player = StudioGame::Player.new("moe")
74
+ puts player.name
75
+ puts player.health
76
+ player.w00t
77
+ puts player.health
78
+ player.blam
79
+ puts player.health
80
+ end
@@ -0,0 +1,27 @@
1
+ module StudioGame
2
+ Treasure = Struct.new(:name, :points)
3
+
4
+ module TreasureTrove
5
+ TREASURES = [
6
+ Treasure.new(:pie, 5),
7
+ Treasure.new(:bottle, 25),
8
+ Treasure.new(:hammer, 50),
9
+ Treasure.new(:skillet, 100),
10
+ Treasure.new(:broomstick, 200),
11
+ Treasure.new(:crowbar, 400)
12
+ ]
13
+
14
+ def self.random
15
+ TREASURES.sample
16
+ end
17
+
18
+ def self.print_treasures
19
+ puts "\nThere are #{TREASURES.size} treasures to be found:"
20
+ TREASURES.each do |treasure|
21
+ puts "A #{treasure.name} is worth #{treasure.points} points."
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+ puts TreasureTrove::TREASURES if __FILE__ == $0
@@ -0,0 +1,30 @@
1
+ require "studio_game/berserk_player"
2
+
3
+ module StudioGame
4
+ describe BerserkPlayer do
5
+ before do
6
+ $stdout = StringIO.new
7
+ @initial_health = 50
8
+ @player = BerserkPlayer.new("berserker", @initial_health)
9
+ end
10
+
11
+ it "does not go berserk when w00ted up to 5 times" do
12
+ 1.upto(5) { @player.w00t }
13
+
14
+ expect(@player.berserk?).to be_falsey
15
+ end
16
+
17
+ it "goes berserk when w00ted more than 5 times" do
18
+ 1.upto(6) { @player.w00t }
19
+
20
+ expect(@player.berserk?).to be_truthy
21
+ end
22
+
23
+ it "gets w00ted instead of blammed when it's gone berserk" do
24
+ 1.upto(6) { @player.w00t }
25
+ 1.upto(2) { @player.blam }
26
+
27
+ expect(@player.health).to eq(@initial_health + (8 * 15))
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,44 @@
1
+ require "studio_game/clumsy_player"
2
+
3
+ module StudioGame
4
+ describe ClumsyPlayer do
5
+ before do
6
+ $stdout = StringIO.new
7
+ @boost_factor = 2
8
+ @initial_health = 100
9
+ @player = ClumsyPlayer.new("klutz", @initial_health, @boost_factor)
10
+ end
11
+
12
+ it "has a boost factor" do
13
+ expect(@player.boost_factor).to eq(@boost_factor)
14
+ end
15
+
16
+ it "gets boosted when w00ted" do
17
+ @player.w00t
18
+ expect(@player.health).to eq(@initial_health + (15 * @boost_factor))
19
+ end
20
+
21
+ it "only gets half the point value for each treasure" do
22
+ expect(@player.points).to eq(0)
23
+
24
+ hammer = Treasure.new(:hammer, 50)
25
+ @player.found_treasure(hammer)
26
+ @player.found_treasure(hammer)
27
+ @player.found_treasure(hammer)
28
+
29
+ expect(@player.points).to eq(75)
30
+
31
+ crowbar = Treasure.new(:crowbar, 400)
32
+ @player.found_treasure(crowbar)
33
+
34
+ expect(@player.points).to eq(275)
35
+
36
+ yielded = []
37
+ @player.each_found_treasure { |treasure| yielded << treasure }
38
+
39
+ expect(yielded).to eq(
40
+ [Treasure.new(:hammer, 75), Treasure.new(:crowbar, 200)]
41
+ )
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,73 @@
1
+ require "studio_game/game"
2
+ require "studio_game/player"
3
+
4
+ module StudioGame
5
+ describe Game do
6
+ before do
7
+ $stdout = StringIO.new
8
+ @game = Game.new("Knuckleheads")
9
+ @initial_health = 100
10
+ @player = Player.new("moe", @initial_health)
11
+ @game.add_player(@player)
12
+ end
13
+
14
+ it "returns a capitalized title" do
15
+ expect(@game.title).to eq("Knuckleheads")
16
+ end
17
+
18
+ context "simulating game play" do
19
+ rounds = 2
20
+ it "w00ts the player if a high number is rolled" do
21
+ allow_any_instance_of(Die).to receive(:roll).and_return(5)
22
+ @game.play(rounds)
23
+
24
+ expect(@player.health).to eq(@initial_health + (15 * rounds))
25
+ end
26
+
27
+ it "skips the player if a medium number is rolled" do
28
+ allow_any_instance_of(Die).to receive(:roll).and_return(3)
29
+
30
+ @game.play(rounds)
31
+
32
+ expect(@player.health).to eq(@initial_health)
33
+ end
34
+
35
+ it "blams the player if a low number is rolled" do
36
+ allow_any_instance_of(Die).to receive(:roll).and_return(1)
37
+
38
+ @game.play(rounds)
39
+
40
+ expect(@player.health).to eq(@initial_health - (10 * rounds))
41
+ end
42
+
43
+ it "assigns a treasure for points during a player's turn" do
44
+ game = Game.new("Knuckleheads")
45
+ player = Player.new("moe")
46
+
47
+ game.add_player(player)
48
+
49
+ game.play(1)
50
+
51
+ expect(player.points).not_to eq(0)
52
+ end
53
+ end
54
+
55
+ it "computes total points as the sum of all player points" do
56
+ game = Game.new("Knuckleheads")
57
+
58
+ player1 = Player.new("moe")
59
+ player2 = Player.new("larry")
60
+
61
+ game.add_player(player1)
62
+ game.add_player(player2)
63
+
64
+ player1.found_treasure(Treasure.new(:hammer, 50))
65
+ player1.found_treasure(Treasure.new(:hammer, 50))
66
+ player2.found_treasure(Treasure.new(:crowbar, 400))
67
+
68
+ total_points = player1.points + player2.points
69
+
70
+ expect(game.total_points).to eq(total_points)
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,138 @@
1
+ require "studio_game/player"
2
+ require "studio_game/treasure_trove"
3
+
4
+ module StudioGame
5
+ describe Player do
6
+ before do
7
+ $stdout = StringIO.new
8
+ @initial_health = 150
9
+ @initial_name = "larry"
10
+ @player = Player.new(@initial_name, @initial_health)
11
+ @treasure = Treasure.new(:hammer, 50)
12
+ end
13
+
14
+ it "has a capitalized name" do
15
+ @initial_name.capitalize!
16
+ expect(@player.name).to eq(@initial_name)
17
+ end
18
+
19
+ it "has an initial health" do
20
+ expect(@player.health).to eq(@initial_health)
21
+ end
22
+
23
+ it "has a string representation" do
24
+ @initial_name.capitalize!
25
+ @player.found_treasure(@treasure)
26
+ @player.found_treasure(@treasure)
27
+
28
+ expect(@player.to_s).to eq(
29
+ "I'm #{@initial_name} with health=#{@player.health}, points=#{@player.points}, and scores=#{@player.score}."
30
+ )
31
+ end
32
+
33
+ it "formats player name and score" do
34
+ @initial_name.capitalize!
35
+ @player.found_treasure(@treasure)
36
+ @player.found_treasure(@treasure)
37
+
38
+ result = "#{@initial_name}".ljust(20, ".") + " 250"
39
+
40
+ expect(@player.format_score).to eq(result)
41
+ end
42
+
43
+ it "computes a score as the sum of its health and points" do
44
+ @player.found_treasure(@treasure)
45
+ @player.found_treasure(@treasure)
46
+
47
+ player_score = @player.health + @treasure.points * 2
48
+
49
+ expect(@player.score).to eq(player_score)
50
+ end
51
+
52
+ it "increases health by 15 when w00ted" do
53
+ @player.w00t
54
+
55
+ expect(@player.health).to eq(@initial_health + 15)
56
+ end
57
+
58
+ it "decreases health by 10 when blammed" do
59
+ @player.blam
60
+
61
+ expect(@player.health).to eq(@initial_health - 10)
62
+ end
63
+
64
+ context "player strength" do
65
+ before { @player = Player.new(@initial_name, @initial_health) }
66
+
67
+ it "is strong when health is greater than 100" do
68
+ expect(@player.strong?).to be_truthy
69
+ end
70
+
71
+ it "is wimpy when health is less than 100" do
72
+ @player = Player.new(@initial_name, 100)
73
+
74
+ expect(@player.strong?).to be_falsy
75
+ end
76
+ end
77
+
78
+ context "sorting a collection of players" do
79
+ before do
80
+ @player1 = Player.new("moe", 100)
81
+ @player2 = Player.new(@initial_name, 200)
82
+ @player3 = Player.new("curly", 300)
83
+
84
+ @players = [@player1, @player2, @player3]
85
+ end
86
+
87
+ it "is sorted by decreasing score" do
88
+ expect(@players.sort).to eq([@player3, @player2, @player1])
89
+ end
90
+ end
91
+
92
+ it "computes points as sum of all treasure points" do
93
+ expect(@player.points).to eq(0)
94
+
95
+ @player.found_treasure(Treasure.new(:hammer, 50))
96
+
97
+ expect(@player.points).to eq(50)
98
+
99
+ @player.found_treasure(Treasure.new(:crowbar, 400))
100
+
101
+ expect(@player.points).to eq(450)
102
+
103
+ @player.found_treasure(Treasure.new(:hammer, 50))
104
+
105
+ expect(@player.points).to eq(500)
106
+ end
107
+
108
+ it "yields each found treasure and its total points" do
109
+ @player.found_treasure(Treasure.new(:skillet, 100))
110
+ @player.found_treasure(Treasure.new(:skillet, 100))
111
+ @player.found_treasure(Treasure.new(:hammer, 50))
112
+ @player.found_treasure(Treasure.new(:bottle, 5))
113
+ @player.found_treasure(Treasure.new(:bottle, 5))
114
+ @player.found_treasure(Treasure.new(:bottle, 5))
115
+ @player.found_treasure(Treasure.new(:bottle, 5))
116
+ @player.found_treasure(Treasure.new(:bottle, 5))
117
+
118
+ yields_treasures = []
119
+
120
+ @player.each_found_treasure { |treasure| yields_treasures << treasure }
121
+
122
+ expect(yields_treasures).to eq(
123
+ [
124
+ Treasure.new(:skillet, 200),
125
+ Treasure.new(:hammer, 50),
126
+ Treasure.new(:bottle, 25)
127
+ ]
128
+ )
129
+ end
130
+
131
+ it "can be created from a CSV string" do
132
+ @initial_name.capitalize!
133
+ player = Player.from_csv("larry,150")
134
+ expect(player.name).to eq(@initial_name)
135
+ expect(player.health).to eq(@initial_health)
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,53 @@
1
+ require "studio_game/treasure_trove"
2
+
3
+ module StudioGame
4
+ describe Treasure do
5
+ before { @treasure = Treasure.new(:hammer, 50) }
6
+
7
+ it "has a name attribute" do
8
+ expect(@treasure.name).to eq(:hammer)
9
+ end
10
+
11
+ it "has a points attribute" do
12
+ expect(@treasure.points).to eq(50)
13
+ end
14
+ end
15
+
16
+ describe TreasureTrove do
17
+ before { @treasures = TreasureTrove::TREASURES }
18
+
19
+ it "has six treasures" do
20
+ expect(@treasures.size).to eq(6)
21
+ end
22
+
23
+ it "has a pie worth 5 points" do
24
+ expect(@treasures[0]).to eq(Treasure.new(:pie, 5))
25
+ end
26
+
27
+ it "has a bottle worth 25 points" do
28
+ expect(@treasures[1]).to eq(Treasure.new(:bottle, 25))
29
+ end
30
+
31
+ it "has a hammer worth 50 points" do
32
+ expect(@treasures[2]).to eq(Treasure.new(:hammer, 50))
33
+ end
34
+
35
+ it "has a skillet worth 100 points" do
36
+ expect(@treasures[3]).to eq(Treasure.new(:skillet, 100))
37
+ end
38
+
39
+ it "has a broomstick worth 200 points" do
40
+ expect(@treasures[4]).to eq(Treasure.new(:broomstick, 200))
41
+ end
42
+
43
+ it "has a crowbar worth 400 points" do
44
+ expect(@treasures[5]).to eq(Treasure.new(:crowbar, 400))
45
+ end
46
+
47
+ it "returns a random treasure" do
48
+ treasure = TreasureTrove.random
49
+
50
+ expect(TreasureTrove::TREASURES).to include(treasure)
51
+ end
52
+ end
53
+ end
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: studio_game_sammy
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Samuel Oyediran
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-11-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.8'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 2.8.0
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '2.8'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 2.8.0
33
+ description: ''
34
+ email:
35
+ executables:
36
+ - studio_game
37
+ extensions: []
38
+ extra_rdoc_files: []
39
+ files:
40
+ - LICENSE
41
+ - README
42
+ - bin/players.csv
43
+ - bin/studio_game
44
+ - bin/test_players.csv
45
+ - lib/studio_game/auditable.rb
46
+ - lib/studio_game/berserk_player.rb
47
+ - lib/studio_game/clumsy_player.rb
48
+ - lib/studio_game/die.rb
49
+ - lib/studio_game/game.rb
50
+ - lib/studio_game/game_turn.rb
51
+ - lib/studio_game/loaded_die.rb
52
+ - lib/studio_game/playable.rb
53
+ - lib/studio_game/player.rb
54
+ - lib/studio_game/treasure_trove.rb
55
+ - spec/studio_game/berserk_player_spec.rb
56
+ - spec/studio_game/clumsy_player_spec.rb
57
+ - spec/studio_game/game_spec.rb
58
+ - spec/studio_game/player_spec.rb
59
+ - spec/studio_game/treasure_trove_spec.rb
60
+ homepage:
61
+ licenses:
62
+ - MIT
63
+ metadata: {}
64
+ post_install_message:
65
+ rdoc_options: []
66
+ require_paths:
67
+ - lib
68
+ required_ruby_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '1.9'
73
+ required_rubygems_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ requirements: []
79
+ rubygems_version: 3.3.7
80
+ signing_key:
81
+ specification_version: 4
82
+ summary: Studio Game is a command line game that assigns random treasures, funds and
83
+ defunds a list of players randomly.
84
+ test_files:
85
+ - spec/studio_game/berserk_player_spec.rb
86
+ - spec/studio_game/clumsy_player_spec.rb
87
+ - spec/studio_game/game_spec.rb
88
+ - spec/studio_game/player_spec.rb
89
+ - spec/studio_game/treasure_trove_spec.rb