studio_game1113 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.
data/LICENSE ADDED
@@ -0,0 +1 @@
1
+ use at your peril!!
data/README ADDED
@@ -0,0 +1 @@
1
+ Ruby Studio Game folks!
@@ -0,0 +1,6 @@
1
+ rpg High Scores:
2
+ Berk................ 1090
3
+ Simon............... 760
4
+ Alvin............... 675
5
+ Klutz............... 472.5
6
+ Theo................ 375
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,34 @@
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
+ player1 = StudioGame::Player.new('moe')
8
+ player2 = StudioGame::Player.new('larry',60)
9
+ player3 = StudioGame::Player.new('curly',125)
10
+ player4 = StudioGame::ClumsyPlayer.new('klutz', 105, 10)
11
+ player5 = StudioGame::BerserkPlayer.new('berk', 50)
12
+
13
+ game1 = StudioGame::Game.new("rpg")
14
+
15
+ default_player_file = File.join(File.dirname(__FILE__), 'players.csv')
16
+ game1.load_players(ARGV.shift||default_player_file)
17
+
18
+ game1.add_player(player4)
19
+ game1.add_player(player5)
20
+
21
+ loop do
22
+ puts "\nHow many rounds? ('quit' to exit)"
23
+ rounds = gets.chomp.downcase
24
+ case rounds
25
+ when 'quit', 'exit'
26
+ game1.print_stats
27
+ game1.save_high_scores
28
+ break
29
+ when /^\d+$/
30
+ game1.play(rounds.to_i)
31
+ else
32
+ puts "Please enter a number or 'quit'"
33
+ end
34
+ end
@@ -0,0 +1,7 @@
1
+ module StudioGame
2
+ module Auditable
3
+ def audit
4
+ puts "Rolled a #{self.number} (#{self.class})"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,33 @@
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
+
27
+
28
+ if __FILE__ == $0
29
+ berserker = BerserkPlayer.new("berserker", 50)
30
+ 6.times { berserker.w00t }
31
+ 2.times { berserker.blam }
32
+ puts berserker.health
33
+ end
@@ -0,0 +1,40 @@
1
+ require_relative 'player'
2
+
3
+ module StudioGame
4
+ class ClumsyPlayer < Player
5
+ def initialize (name, health=100, w00t_factor=2)
6
+ @w00t_factor = w00t_factor
7
+ super(name, health)
8
+ end
9
+
10
+ def w00t
11
+ @w00t_factor.times { super }
12
+ end
13
+ def found_treasure(treasure)
14
+ damaged_treasure = Treasure.new(treasure.name, treasure.points / 2.0)
15
+ super(damaged_treasure)
16
+ end
17
+
18
+ def w00t
19
+ @w00t_factor.times { super }
20
+ end
21
+ end
22
+ end
23
+
24
+
25
+ if __FILE__ == $0
26
+ clumsy = ClumsyPlayer.new("klutz")
27
+
28
+ hammer = Treasure.new(:hammer, 50)
29
+ clumsy.found_treasure(hammer)
30
+ clumsy.found_treasure(hammer)
31
+ clumsy.found_treasure(hammer)
32
+
33
+ crowbar = Treasure.new(:crowbar, 400)
34
+ clumsy.found_treasure(crowbar)
35
+
36
+ clumsy.each_found_treasure do |treasure|
37
+ puts "#{treasure.points} total #{treasure.name} points"
38
+ end
39
+ puts "#{clumsy.points} grand total points"
40
+ end
@@ -0,0 +1,19 @@
1
+ require_relative 'auditable'
2
+
3
+ module StudioGame
4
+ class Die
5
+ include Auditable
6
+ attr_reader :number
7
+
8
+ def initialize
9
+ @numbers = [1, 2, 3, 4, 5, 6]
10
+ roll
11
+ end
12
+
13
+ def roll
14
+ @number = @numbers.sample
15
+ audit
16
+ @number
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,101 @@
1
+ require_relative 'player'
2
+ require_relative 'clumsy_player'
3
+ require_relative 'game_turn'
4
+ require_relative 'treasure_trove'
5
+
6
+ module StudioGame
7
+ class Game
8
+ attr_reader :title
9
+
10
+ def initialize(title)
11
+ @title = title
12
+ @players = []
13
+ end
14
+
15
+ def self.from_csv(line)
16
+ name, health = line.split(',')
17
+ Player.new(name, Integer(health))
18
+ end
19
+ def load_players(load_file)
20
+ File.readlines(load_file).each do |line|
21
+ add_player(Player.from_csv(line))
22
+ end
23
+ end
24
+ def save_high_scores(save_file="high_scores.txt")
25
+ File.open(save_file, "w") do |file|
26
+ file.puts "#{@title} High Scores:"
27
+ @players.sort.each do |player|
28
+ file.puts player_name_score(player)
29
+ end
30
+ end
31
+ end
32
+ def player_name_score(player)
33
+ "#{player.name.ljust(20, '.')} #{player.score}"
34
+ end
35
+ def add_player(player)
36
+ @players << player
37
+ end
38
+
39
+ def play(rounds)
40
+ treasures = TreasureTrove::TREASURES
41
+
42
+ puts "There are #{@players.size} players in #{@title}"
43
+ puts "There are #{treasures.size} treasures to be found:"
44
+ treasures.each do |treasure|
45
+ puts "A #{treasure.name} is worth #{treasure.points} points"
46
+ end
47
+ puts @players
48
+ 1.upto(rounds) do |r|
49
+ if block_given?
50
+ break if yield
51
+ end
52
+
53
+ puts "\nround number #{r}\n"
54
+ @players.each do |player|
55
+ GameTurn.take_turn(player)
56
+ puts player
57
+ end
58
+
59
+ end
60
+ end
61
+
62
+ def total_points
63
+ @players.reduce(0) do |sum, player|
64
+ sum + player.points
65
+ end
66
+ end
67
+ def print_name_and_health (player)
68
+ puts "#{player.name} (#{player.health})"
69
+ end
70
+
71
+ def print_stats
72
+ strong, weak = @players.partition {|p| p.strong?}
73
+
74
+ puts "\n#{@title} Statistics:\n"
75
+ puts "#{strong.size} strong players:"
76
+ strong.each do |player|
77
+ print_name_and_health (player)
78
+ end
79
+
80
+ puts "#{weak.size} weak players:"
81
+ weak.each do |player|
82
+ print_name_and_health (player)
83
+ end
84
+
85
+ @players.each do |player|
86
+ puts "\n#{player.name}'s point totals:"
87
+ player.each_found_treasure do |treasure|
88
+ puts "#{treasure.points} total #{treasure.name} points"
89
+ end
90
+ puts "#{player.points} grand total points\n"
91
+ end
92
+ puts"\n#{@title} High Scores"
93
+ @players.sort.each do |player|
94
+ puts player_name_score(player)
95
+ end
96
+ puts "Total treasure points found #{total_points}"
97
+ end
98
+
99
+ end
100
+ end
101
+
@@ -0,0 +1,23 @@
1
+ require_relative 'player'
2
+ require_relative 'die'
3
+ require_relative 'treasure_trove'
4
+
5
+ module StudioGame
6
+ module GameTurn
7
+ def self.take_turn(player)
8
+ die = Die.new
9
+ case die.roll
10
+ when 5..6
11
+ player.w00t
12
+ when 3..4
13
+ puts "#{player.name} was ignored"
14
+ else 1..2
15
+ player.blam
16
+ end
17
+
18
+ treasure = TreasureTrove.random
19
+ player.found_treasure(treasure)
20
+
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,11 @@
1
+ require_relative 'auditable'
2
+ require_relative 'die'
3
+
4
+ module StudioGame
5
+ class LoadedDie < Die
6
+ def initialize
7
+ @numbers = [1, 1, 2, 5, 6, 6]
8
+ roll
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,17 @@
1
+ module StudioGame
2
+ module Playable
3
+ def blam
4
+ self.health -= 10
5
+ puts "#{name} got blammed"
6
+ end
7
+
8
+ def w00t
9
+ self.health += 15
10
+ puts "#{name} got w00ted"
11
+ end
12
+
13
+ def strong?
14
+ health > 100
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,61 @@
1
+ require_relative 'treasure_trove'
2
+ require_relative 'playable'
3
+
4
+ module StudioGame
5
+ class Player
6
+ include Playable
7
+
8
+ attr_accessor :name, :health
9
+
10
+ def initialize (name, health=100)
11
+ @name = name.capitalize
12
+ @health = health
13
+ @found_treasures = Hash.new(0)
14
+ end
15
+
16
+ def self.from_csv(line)
17
+ name, health = line.split(',')
18
+ Player.new(name, Integer(health))
19
+ end
20
+
21
+ def score
22
+ @health + points
23
+ end
24
+ def name=(new_name)
25
+ @name = new_name.capitalize
26
+ end
27
+ def to_s
28
+ "I'm #{@name} with a health = #{@health}, points = #{points}, and a score of #{score}."
29
+ end
30
+
31
+ def <=>(other_player)
32
+ other_player.score <=> score
33
+ end
34
+
35
+ def found_treasure(treasure)
36
+ @found_treasures[treasure.name] += treasure.points
37
+ puts "#{@name} found a #{treasure.name} worth #{treasure.points} points."
38
+ puts "#{@name}'s treasures #{@found_treasures}"
39
+ end
40
+
41
+ def each_found_treasure
42
+ @found_treasures.each do |treasure, points|
43
+ yield Treasure.new(treasure, points)
44
+ end
45
+ end
46
+
47
+ def points
48
+ @found_treasures.values.reduce(0, :+)
49
+ end
50
+ end
51
+ end
52
+
53
+ if __FILE__ == $0
54
+ player = Player.new("moe")
55
+ puts player.name
56
+ puts player.health
57
+ player.w00t
58
+ puts player.health
59
+ player.blam
60
+ puts player.health
61
+ end
@@ -0,0 +1,18 @@
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
+ end
18
+ end
@@ -0,0 +1,31 @@
1
+ require 'studio_game/berserk_player'
2
+
3
+ module StudioGame
4
+ describe BerserkPlayer do
5
+
6
+ before do
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
+ @player.berserk?.should be_false
15
+ end
16
+
17
+ it "goes berserk when w00ted more than 5 times" do
18
+ 1.upto(6) { @player.w00t }
19
+
20
+ @player.berserk?.should be_true
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
+ @player.health.should == @initial_health + (8 * 15)
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,34 @@
1
+ require 'studio_game/clumsy_player'
2
+
3
+ module StudioGame
4
+
5
+ describe ClumsyPlayer do
6
+ before do
7
+ @player = ClumsyPlayer.new("klutz")
8
+ end
9
+
10
+ it "only gets half the point value for each treasure" do
11
+ @player.points.should == 0
12
+
13
+ hammer = Treasure.new(:hammer, 50)
14
+ @player.found_treasure(hammer)
15
+ @player.found_treasure(hammer)
16
+ @player.found_treasure(hammer)
17
+
18
+ @player.points.should == 75
19
+
20
+ crowbar = Treasure.new(:crowbar, 400)
21
+ @player.found_treasure(crowbar)
22
+
23
+ @player.points.should == 275
24
+
25
+ yielded = []
26
+ @player.each_found_treasure do |treasure|
27
+ yielded << treasure
28
+ end
29
+
30
+ yielded.should == [Treasure.new(:hammer, 75), Treasure.new(:crowbar, 200)]
31
+ end
32
+
33
+ end
34
+ end
@@ -0,0 +1,59 @@
1
+ require 'studio_game/game'
2
+
3
+ module StudioGame
4
+ describe Game do
5
+ before do
6
+ @game = Game.new("Knuckleheads")
7
+
8
+ @initial_health = 100
9
+ @player = Player.new("moe", @initial_health)
10
+
11
+ @game.add_player(@player)
12
+ end
13
+
14
+ it "assigns a treasure for points during a player's turn" do
15
+ game = Game.new("Knuckleheads")
16
+ player = Player.new("moe")
17
+
18
+ game.add_player(player)
19
+
20
+ game.play(1)
21
+
22
+ player.points.should_not be_zero
23
+ end
24
+
25
+ it "w00ts the player with high roll" do
26
+ Die.any_instance.stub(:roll).and_return(5)
27
+ @game.play(2)
28
+
29
+ @player.health.should == @initial_health + (15 * 2)
30
+ end
31
+
32
+ it "doesn't do anything with medium roll" do
33
+ Die.any_instance.stub(:roll).and_return(3)
34
+ @game.play(2)
35
+ @player.health.should == @initial_health
36
+ end
37
+ it "blams the player with low roll" do
38
+ Die.any_instance.stub(:roll).and_return(1)
39
+ @game.play(2)
40
+
41
+ @player.health.should == @initial_health - (10 * 2)
42
+ end
43
+ it "computes total points as the sum of all player points" do
44
+ game = Game.new("Knuckleheads")
45
+
46
+ player1 = Player.new("moe")
47
+ player2 = Player.new("larry")
48
+
49
+ game.add_player(player1)
50
+ game.add_player(player2)
51
+
52
+ player1.found_treasure(Treasure.new(:hammer, 50))
53
+ player1.found_treasure(Treasure.new(:hammer, 50))
54
+ player2.found_treasure(Treasure.new(:crowbar, 400))
55
+
56
+ game.total_points.should == 500
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,119 @@
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
+ @player = Player.new("larry", 150)
9
+ @initial_health = @player.health
10
+ end
11
+ it "has a capitalized name" do
12
+ @player.name.should == "Larry"
13
+ end
14
+ it "has an initial health" do
15
+ @initial_health.should == 150
16
+ end
17
+ it "is created from a csv line" do
18
+ line = "Larry,20"
19
+ player = Player.from_csv(line)
20
+ player.name.should == "Larry"
21
+ player.health.should == 20
22
+ end
23
+
24
+ it "computes a score as the sum of its health and points" do
25
+ @player.found_treasure(Treasure.new(:hammer, 50))
26
+ @player.found_treasure(Treasure.new(:hammer, 50))
27
+
28
+ @player.score.should == 250
29
+ end
30
+
31
+ it "has a string representation" do
32
+ @player.found_treasure(Treasure.new(:hammer, 50))
33
+ @player.found_treasure(Treasure.new(:hammer, 50))
34
+ @player.to_s.should == "I'm Larry with a health = 150, points = 100, and a score of 250."
35
+ end
36
+ it "increases health by 15 when w00ted" do
37
+ @player.w00t
38
+ @player.health.should == @initial_health + 15
39
+
40
+ end
41
+ it "decreases health by 10 when blammed" do
42
+ @player.blam
43
+ @player.health.should == @initial_health - 10
44
+ end
45
+
46
+ it "computes points as the sum of all treasure points" do
47
+ @player.points.should == 0
48
+
49
+ @player.found_treasure(Treasure.new(:hammer, 50))
50
+
51
+ @player.points.should == 50
52
+
53
+ @player.found_treasure(Treasure.new(:crowbar, 400))
54
+
55
+ @player.points.should == 450
56
+
57
+ @player.found_treasure(Treasure.new(:hammer, 50))
58
+
59
+ @player.points.should == 500
60
+ end
61
+
62
+ it "yields each found treasure and its total points" do
63
+ @player.found_treasure(Treasure.new(:skillet, 100))
64
+ @player.found_treasure(Treasure.new(:skillet, 100))
65
+ @player.found_treasure(Treasure.new(:hammer, 50))
66
+ @player.found_treasure(Treasure.new(:bottle, 5))
67
+ @player.found_treasure(Treasure.new(:bottle, 5))
68
+ @player.found_treasure(Treasure.new(:bottle, 5))
69
+ @player.found_treasure(Treasure.new(:bottle, 5))
70
+ @player.found_treasure(Treasure.new(:bottle, 5))
71
+
72
+ yielded = []
73
+ @player.each_found_treasure do |treasure|
74
+ yielded << treasure
75
+ end
76
+
77
+ yielded.should == [
78
+ Treasure.new(:skillet, 200),
79
+ Treasure.new(:hammer, 50),
80
+ Treasure.new(:bottle, 25)
81
+ ]
82
+ end
83
+
84
+ context "with a health greater than 100" do
85
+ before do
86
+ @player = Player.new("larry", 150)
87
+ end
88
+
89
+ it "is strong" do
90
+ @player.should be_strong
91
+ end
92
+ end
93
+
94
+ context "with a health equal or less than 100" do
95
+ before do
96
+ @player = Player.new("larry", 100)
97
+ end
98
+
99
+ it "is not strong" do
100
+ @player.should_not be_strong
101
+ end
102
+ end
103
+
104
+ context "in a collection of players" do
105
+ before do
106
+ @player1 = Player.new("moe", 100)
107
+ @player2 = Player.new("larry", 200)
108
+ @player3 = Player.new("curly", 300)
109
+
110
+ @players = [@player1, @player2, @player3]
111
+ end
112
+
113
+ it "is sorted by decreasing score" do
114
+ @players.sort.should == [@player3, @player2, @player1]
115
+ end
116
+ end
117
+
118
+ end
119
+ end
@@ -0,0 +1,57 @@
1
+ require 'studio_game/treasure_trove'
2
+
3
+ module StudioGame
4
+ describe Treasure do
5
+
6
+ before do
7
+ @treasure = Treasure.new(:hammer, 50)
8
+ end
9
+
10
+ it "has a name attribute" do
11
+ @treasure.name.should == :hammer
12
+ end
13
+
14
+ it "has a points attribute" do
15
+ @treasure.points.should == 50
16
+ end
17
+
18
+ end
19
+
20
+ describe TreasureTrove do
21
+
22
+ it "has six treasures" do
23
+ TreasureTrove::TREASURES.size.should == 6
24
+ end
25
+
26
+ it "has a pie worth 5 points" do
27
+ TreasureTrove::TREASURES[0].should == Treasure.new(:pie, 5)
28
+ end
29
+
30
+ it "has a bottle worth 25 points" do
31
+ TreasureTrove::TREASURES[1].should == Treasure.new(:bottle, 25)
32
+ end
33
+
34
+ it "has a hammer worth 50 points" do
35
+ TreasureTrove::TREASURES[2].should == Treasure.new(:hammer, 50)
36
+ end
37
+
38
+ it "has a skillet worth 100 points" do
39
+ TreasureTrove::TREASURES[3].should == Treasure.new(:skillet, 100)
40
+ end
41
+
42
+ it "has a broomstick worth 200 points" do
43
+ TreasureTrove::TREASURES[4].should == Treasure.new(:broomstick, 200)
44
+ end
45
+
46
+ it "has a crowbar worth 400 points" do
47
+ TreasureTrove::TREASURES[5].should == Treasure.new(:crowbar, 400)
48
+ end
49
+
50
+ it "returns a random treasure" do
51
+ treasure = TreasureTrove.random
52
+
53
+ TreasureTrove::TREASURES.should include(treasure)
54
+ end
55
+
56
+ end
57
+ end
metadata ADDED
@@ -0,0 +1,88 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: studio_game1113
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Ian Cheung
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-11-03 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ description: ! 'Ruby Studio Game folks!
31
+
32
+ '
33
+ email: ianc@starconcepts.co.uk
34
+ executables:
35
+ - studio_game
36
+ extensions: []
37
+ extra_rdoc_files: []
38
+ files:
39
+ - bin/high_scores.txt
40
+ - bin/players.csv
41
+ - bin/studio_game
42
+ - lib/studio_game/auditable.rb
43
+ - lib/studio_game/berserk_player.rb
44
+ - lib/studio_game/clumsy_player.rb
45
+ - lib/studio_game/die.rb
46
+ - lib/studio_game/game.rb
47
+ - lib/studio_game/game_turn.rb
48
+ - lib/studio_game/loaded_die.rb
49
+ - lib/studio_game/playable.rb
50
+ - lib/studio_game/player.rb
51
+ - lib/studio_game/treasure_trove.rb
52
+ - spec/studio_game/berserk_player_spec.rb
53
+ - spec/studio_game/clumsy_player_spec.rb
54
+ - spec/studio_game/game_spec.rb
55
+ - spec/studio_game/player_spec.rb
56
+ - spec/studio_game/treasure_trove_spec.rb
57
+ - LICENSE
58
+ - README
59
+ homepage: http://www.iancheung.com
60
+ licenses: []
61
+ post_install_message:
62
+ rdoc_options: []
63
+ require_paths:
64
+ - lib
65
+ required_ruby_version: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '1.9'
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ requirements: []
78
+ rubyforge_project:
79
+ rubygems_version: 1.8.23
80
+ signing_key:
81
+ specification_version: 3
82
+ summary: Part of the Pragmatic Studio Ruby course
83
+ test_files:
84
+ - spec/studio_game/berserk_player_spec.rb
85
+ - spec/studio_game/clumsy_player_spec.rb
86
+ - spec/studio_game/game_spec.rb
87
+ - spec/studio_game/player_spec.rb
88
+ - spec/studio_game/treasure_trove_spec.rb