studio_game_louise 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: 37acea7f94ef92ac7d7cd42393b71f39fbbe2588b17f97eb013f8b4f649a817e
4
+ data.tar.gz: '08d1a4bd4ec783da77e74cdfbf16bba25960e602c531dc91b4c0a515c205266a'
5
+ SHA512:
6
+ metadata.gz: '0584853e542a9d47872069ddc84f9491362cab95fa5a0d5ada25bc873e3027346ac7769d83c8ec7a8b8ce72bddd09f63eac3cd606f08f045133d117cc45c76d6'
7
+ data.tar.gz: a1045678931cbacdf30bc58f6078c22159f5dbfc93fc4d97e5b9e6a4f78104977364971fb7ec4e40a245495e2339e871dea71bbcad01f9703ace2c30bdab9652
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 Louise Hamoy
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 ADDED
@@ -0,0 +1 @@
1
+ # ruby-lou
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,40 @@
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 = Player.new("moe")
8
+ # player2 = Player.new("larry", 60)
9
+ # player3 = Player.new("curly", 125)
10
+
11
+ knuckleheads = StudioGame::Game.new("knuckleheads")
12
+ klutz = StudioGame::ClumsyPlayer.new("klutz", 105, 3)
13
+ knuckleheads.add_player(klutz)
14
+
15
+ berserker = StudioGame::BerserkPlayer.new("berserker", 50)
16
+ knuckleheads.add_player(berserker)
17
+
18
+ default_player_file = File.join(File.dirname(__FILE__), 'players.csv')
19
+ knuckleheads.load_players(ARGV.shift || default_player_file)
20
+
21
+ loop do
22
+ puts "\nHow many game rounds? ('quit' to exit)"
23
+ answer = gets.chomp.downcase
24
+
25
+ case answer
26
+ when /^\d+$/
27
+ knuckleheads.play(answer.to_i)
28
+ when "quit", "exit"
29
+ knuckleheads.print_stats
30
+ break
31
+ else
32
+ puts "Please enter a number or 'quit'"
33
+ end
34
+ end
35
+
36
+ knuckleheads.save_high_scores
37
+ # knuckleheads.play(10) do
38
+ # knuckleheads.total_points >= 2000
39
+ # end
40
+
@@ -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,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
+ super
16
+ @w00t_count += 1
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 = BerserkPlayer.new("berserker", 50)
28
+ 6.times { berserker.w00t }
29
+ 2.times { berserker.blam }
30
+ puts berserker.health
31
+ end
@@ -0,0 +1,38 @@
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
+ damaged_treasure = Treasure.new(treasure.name, treasure.points / 2)
18
+ super(damaged_treasure)
19
+ end
20
+ end
21
+ end
22
+
23
+ if __FILE__ == $0
24
+ clumsy = ClumsyPlayer.new("klutz", 105, 3)
25
+
26
+ hammer = Treasure.new(:hammer, 50)
27
+ clumsy.found_treasure(hammer)
28
+ clumsy.found_treasure(hammer)
29
+ clumsy.found_treasure(hammer)
30
+
31
+ crowbar = Treasure.new(:crowbar, 400)
32
+ clumsy.found_treasure(crowbar)
33
+
34
+ clumsy.each_found_treasure do |treasure|
35
+ puts "#{treasure.points} total #{treasure.name} points"
36
+ end
37
+ puts "#{clumsy.points} grand total points"
38
+ end
@@ -0,0 +1,19 @@
1
+ require_relative 'auditable'
2
+
3
+ module StudioGame
4
+ class Die
5
+ include Auditable
6
+
7
+ attr_reader :number
8
+
9
+ def initialize
10
+ roll
11
+ end
12
+
13
+ def roll
14
+ @number = rand(1..6)
15
+ audit
16
+ @number
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,113 @@
1
+ require_relative 'player'
2
+ require_relative 'die'
3
+ require_relative 'game_turn'
4
+ require_relative 'treasure_hunt'
5
+ require 'csv'
6
+
7
+ module StudioGame
8
+ class Game
9
+ attr_reader :title
10
+
11
+ def initialize(title)
12
+ @title = title
13
+ @players = []
14
+ end
15
+
16
+ def high_score_entry(player)
17
+ formatted_name = player.name.ljust(20, '.')
18
+ "#{formatted_name} #{player.score}"
19
+ end
20
+
21
+ def save_high_scores(to_file = "high_score.txt")
22
+ File.open(to_file, "w") do |file|
23
+ file.puts("#{@title} High Scores:")
24
+ @players.sort.each do |player|
25
+ file.puts high_score_entry(player)
26
+ end
27
+ end
28
+ end
29
+
30
+ def load_players(from_file)
31
+ CSV.foreach(from_file) do |row|
32
+ player = Player.new(row[0], row[1].to_i)
33
+ add_player(player)
34
+ end
35
+ end
36
+
37
+ def total_points
38
+ @players.reduce(0) { |sum, player| sum + player.points }
39
+ end
40
+
41
+ def print_name_and_stats(player)
42
+ puts "#{player.name} (#{player.health})"
43
+ end
44
+
45
+ def print_stats
46
+ strong_players, wimpy_players = @players.partition { |player| player.strong? }
47
+
48
+ puts "\n#{@title} Statistics:"
49
+
50
+ puts "#{total_points} total points from treasures found"
51
+
52
+ puts "\n#{strong_players.size} strong players:"
53
+ strong_players.each do |player|
54
+ print_name_and_stats(player)
55
+ end
56
+
57
+ puts "\n#{wimpy_players.size} wimpy players:"
58
+ wimpy_players.each do |player|
59
+ print_name_and_stats(player)
60
+ end
61
+
62
+ puts "\n#{@title} High Scores:"
63
+
64
+ @players.sort.each do |player|
65
+ puts high_score_entry(player)
66
+ end
67
+
68
+ @players.each do |player|
69
+ puts "\n#{player.name}'s point totals:"
70
+ puts "#{player.points} grand total points"
71
+ end
72
+
73
+ @players.sort.each do |player|
74
+ puts "\n#{player.name}'s point totals:"
75
+ player.each_found_treasure do |treasure|
76
+ puts "#{treasure.points} total #{treasure.name} points"
77
+ end
78
+ puts "#{player.points} grand total points"
79
+ end
80
+ end
81
+
82
+ def add_player(a_player)
83
+ @players << a_player
84
+ end
85
+
86
+ def play(rounds)
87
+ puts "There are #{@players.size} in #{@title}: "
88
+
89
+ @players.each do |player|
90
+ puts player
91
+ end
92
+
93
+ treasures = TreasureHunt::TREASURES
94
+ puts "There are #{treasures.size} treasures to be found:"
95
+
96
+ treasures.each do |treasure|
97
+ puts "A #{treasure.name} is worth #{treasure.points} points"
98
+ end
99
+
100
+ 1.upto(rounds) do |round|
101
+ if block_given?
102
+ break if yield
103
+ end
104
+
105
+ puts "\nRound #{round}"
106
+ @players.each do |player|
107
+ GameTurn.take_turn(player)
108
+ puts player
109
+ end
110
+ end
111
+ end
112
+ end
113
+ 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
+ number_rolled = die.roll
9
+
10
+ if number_rolled < 3
11
+ player.blam
12
+ elsif number_rolled < 5
13
+ puts "#{player.name} was skipped."
14
+ else
15
+ player.w00t
16
+ end
17
+
18
+ treasure = TreasureHunt.random_treasure
19
+ player.found_treasure(treasure)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,16 @@
1
+ require_relative 'auditable'
2
+
3
+ module StudioGame
4
+ class LoadedDie
5
+ include Auditable
6
+
7
+ attr_reader :number
8
+
9
+ def roll
10
+ numbers = [1, 1, 2, 5, 6, 6]
11
+ @number = numbers.sample
12
+ audit
13
+ @number
14
+ end
15
+ end
16
+ 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,65 @@
1
+ require_relative 'treasure_hunt'
2
+ require_relative 'playable'
3
+
4
+ module StudioGame
5
+ class Player
6
+ include Playable
7
+
8
+ attr_reader :name
9
+ attr_accessor :health
10
+
11
+ def initialize(name, health = 100)
12
+ @name = name.capitalize
13
+ @health = health
14
+ @found_treasure = Hash.new(0)
15
+ end
16
+
17
+ def self.from_csv(string)
18
+ name, health = string.split(',')
19
+ Player.new(name, Integer(health))
20
+ end
21
+
22
+
23
+ def each_found_treasure
24
+ @found_treasure.each do |name, points|
25
+ yield Treasure.new(name, points)
26
+ end
27
+ end
28
+
29
+ def found_treasure(treasure)
30
+ @found_treasure[treasure.name] += treasure.points
31
+ puts "#{@name} found a #{treasure.name} worth #{treasure.points}"
32
+ puts "#{@name} treasures: #{@found_treasure}"
33
+ end
34
+
35
+ def points
36
+ @found_treasure.values.reduce(0, :+)
37
+ end
38
+
39
+ def name=(new_name)
40
+ @name = new_name.capitalize
41
+ end
42
+
43
+ def score
44
+ health + points
45
+ end
46
+
47
+ def <=>(other)
48
+ other.score <=> score
49
+ end
50
+
51
+ def to_s
52
+ "I'm #{@name} with health = #{@health}, points = #{points}, and score = #{score}"
53
+ end
54
+ end
55
+ end
56
+
57
+ if __FILE__ == $0
58
+ player = Player.new("moe")
59
+ puts player.name
60
+ puts player.health
61
+ player.w00t
62
+ puts player.health
63
+ player.blam
64
+ puts player.health
65
+ end
@@ -0,0 +1,18 @@
1
+ Treasure = Struct.new(:name, :points)
2
+
3
+ module StudioGame
4
+ module TreasureHunt
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_treasure
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
+ $stdout = StringIO.new
10
+ end
11
+
12
+ it "does not go berserk when w00ted up to 5 times" do
13
+ 1.upto(5) { @player.w00t }
14
+
15
+ expect(@player).not_to be_berserk
16
+ end
17
+
18
+ it "goes berserk when w00ted more than 5 times" do
19
+ 1.upto(6) { @player.w00t }
20
+
21
+ expect(@player).to be_berserk
22
+ end
23
+
24
+ it "gets w00ted instead of blammed when it's gone berserk" do
25
+ 1.upto(6) { @player.w00t }
26
+ 1.upto(2) { @player.blam }
27
+
28
+ expect(@player.health).to eql @initial_health + (8 * 15)
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,51 @@
1
+ require 'studio_game/clumsy_player'
2
+
3
+ module StudioGame
4
+ describe ClumsyPlayer do
5
+ before do
6
+ @player = ClumsyPlayer.new("klutz")
7
+ $stdout = StringIO.new
8
+ end
9
+
10
+ it "only gets half the point value for each treasure" do
11
+ expect(@player.points).to be_zero
12
+
13
+ hammer = Treasure.new(:hammer, 50)
14
+ @player.found_treasure(hammer)
15
+ @player.found_treasure(hammer)
16
+ @player.found_treasure(hammer)
17
+
18
+ expect(@player.points).to eql 75
19
+
20
+ crowbar = Treasure.new(:crowbar, 400)
21
+ @player.found_treasure(crowbar)
22
+
23
+ expect(@player.points).to eql 275
24
+
25
+ yielded = []
26
+ @player.each_found_treasure do |treasure|
27
+ yielded << treasure
28
+ end
29
+
30
+ expect(yielded).to eql [Treasure.new(:hammer, 75), Treasure.new(:crowbar, 200)]
31
+ end
32
+
33
+ context "with a boost factor" do
34
+ before do
35
+ @initial_health = 100
36
+ @boost_factor = 5
37
+ @player = ClumsyPlayer.new("klutz", @initial_health, @boost_factor)
38
+ end
39
+
40
+ it "has a boost factor" do
41
+ expect(@player.boost_factor).to eql 5
42
+ end
43
+
44
+ it "gets boost factor number of w00ts when w00ted" do
45
+ @player.w00t
46
+
47
+ expect(@player.health).to eql @initial_health + (15 * @boost_factor)
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,67 @@
1
+ require 'studio_game/game'
2
+
3
+ module StudioGame
4
+ describe Game do
5
+
6
+ before do
7
+ @game = Game.new("Knuckleheads")
8
+
9
+ @initial_health = 100
10
+ @player = Player.new("moe", @initial_health)
11
+
12
+ @game.add_player(@player)
13
+ $stdout = StringIO.new
14
+ end
15
+
16
+ it "blams a player if a low number is rolled" do
17
+ allow_any_instance_of(Die).to receive(:roll).and_return(1)
18
+
19
+ @game.play(2)
20
+
21
+ expect(@player.health).to eql @initial_health - (10 * 2)
22
+ end
23
+
24
+ it "skips the player if a medium number is rolled" do
25
+ allow_any_instance_of(Die).to receive(:roll).and_return(3)
26
+
27
+ @game.play(2)
28
+
29
+ expect(@player.health).to eql @initial_health
30
+ end
31
+
32
+ it "w00ts the player if a high number is rolled" do
33
+ allow_any_instance_of(Die).to receive(:roll).and_return(5)
34
+
35
+ @game.play(2)
36
+
37
+ expect(@player.health).to eql @initial_health + (15 * 2)
38
+ end
39
+
40
+ it "assigns a treasure for points during a player's turn" do
41
+ game = Game.new("Knuckleheads")
42
+ player = Player.new("moe")
43
+
44
+ game.add_player(player)
45
+
46
+ game.play(1)
47
+
48
+ expect(player.points).not_to be_zero
49
+ end
50
+
51
+ it "computes total points as the sum of all player points" do
52
+ game = Game.new("Knuckleheads")
53
+
54
+ player1 = Player.new("moe")
55
+ player2 = Player.new("larry")
56
+
57
+ game.add_player(player1)
58
+ game.add_player(player2)
59
+
60
+ player1.found_treasure(Treasure.new(:hammer, 50))
61
+ player1.found_treasure(Treasure.new(:hammer, 50))
62
+ player2.found_treasure(Treasure.new(:crowbar, 400))
63
+
64
+ expect(game.total_points).to eql 500
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,125 @@
1
+ require 'studio_game/player'
2
+ require 'studio_game/treasure_hunt'
3
+ require 'studio_game/game'
4
+
5
+ module StudioGame
6
+ describe Player do
7
+ before do
8
+ @player = Player.new("moe")
9
+ @initial_health = 100
10
+ $stdout = StringIO.new
11
+ end
12
+
13
+ it "has a capitalized name" do
14
+ expect(@player.name).to eql "Moe"
15
+ end
16
+
17
+ it "has an initial health" do
18
+ expect(@player.health).to eql @initial_health
19
+ end
20
+
21
+ it "has a string representation" do
22
+ @player.found_treasure(Treasure.new(:hammer, 50))
23
+ @player.found_treasure(Treasure.new(:hammer, 50))
24
+
25
+ expect(@player.to_s)
26
+ .to eql "I'm Moe with health = 100, points = 100, and score = 200"
27
+ end
28
+
29
+ it "computes a score as the sum of its health and points" do
30
+ @player.found_treasure(Treasure.new(:hammer, 50))
31
+ @player.found_treasure(Treasure.new(:hammer, 50))
32
+
33
+ expect(@player.score).to eql 200
34
+ end
35
+
36
+ it "decreases health by 10 when blammed" do
37
+ @player.blam
38
+ expect(@player.health).to eql @initial_health - 10
39
+ end
40
+
41
+ it "increases health by 15 when w00ted" do
42
+ @player.w00t
43
+ expect(@player.health).to eql @initial_health + 15
44
+ end
45
+
46
+ context "sets up a player with an initial health greater than 100" do
47
+ before do
48
+ @player = Player.new("larry", 150)
49
+ end
50
+
51
+ it "is strong" do
52
+ expect(@player).to be_strong
53
+ end
54
+ end
55
+
56
+ context "sets up a player with an initial health of 100 or less" do
57
+ before do
58
+ @player = Player.new("larry", 100)
59
+ end
60
+
61
+ it "is wimpy" do
62
+ expect(@player).not_to be_strong
63
+ end
64
+ end
65
+ context "in a collection of players" do
66
+ before do
67
+ @player1 = Player.new("moe", 100)
68
+ @player2 = Player.new("larry", 200)
69
+ @player3 = Player.new("curly", 300)
70
+
71
+ @players = [@player1, @player2, @player3]
72
+ end
73
+
74
+ it "is sorted by decreasing score" do
75
+ expect(@players.sort).to eql [@player3, @player2, @player1]
76
+ end
77
+ end
78
+
79
+ it "computes points at the sum of all treasures points" do
80
+ expect(@player.points).to eql 0
81
+
82
+ @player.found_treasure(Treasure.new(:hammer, 50))
83
+
84
+ expect(@player.points).to eql 50
85
+
86
+ @player.found_treasure(Treasure.new(:crowbar, 400))
87
+
88
+ expect(@player.points).to eql 450
89
+
90
+ @player.found_treasure(Treasure.new(:hammer, 50))
91
+
92
+ expect(@player.points).to eql 500
93
+ end
94
+
95
+
96
+ it "yields each found treasure and its total points" do
97
+ @player.found_treasure(Treasure.new(:skillet, 100))
98
+ @player.found_treasure(Treasure.new(:skillet, 100))
99
+ @player.found_treasure(Treasure.new(:hammer, 50))
100
+ @player.found_treasure(Treasure.new(:bottle, 5))
101
+ @player.found_treasure(Treasure.new(:bottle, 5))
102
+ @player.found_treasure(Treasure.new(:bottle, 5))
103
+ @player.found_treasure(Treasure.new(:bottle, 5))
104
+ @player.found_treasure(Treasure.new(:bottle, 5))
105
+
106
+ yielded = []
107
+ @player.each_found_treasure do |treasure|
108
+ yielded << treasure
109
+ end
110
+
111
+ expect(yielded).to eql [
112
+ Treasure.new(:skillet, 200),
113
+ Treasure.new(:hammer, 50),
114
+ Treasure.new(:bottle, 25)
115
+ ]
116
+ end
117
+
118
+ it "can be created from a CSV string" do
119
+ player = Player.from_csv("Larry,150")
120
+
121
+ expect(player.name).to eq("Larry")
122
+ expect(player.health).to eq(150)
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,55 @@
1
+ require 'studio_game/treasure_hunt'
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
+ expect(@treasure.name).to eql :hammer
12
+ end
13
+
14
+ it "has a point attribute" do
15
+ expect(@treasure.points).to eql 50
16
+ end
17
+ end
18
+
19
+ describe TreasureHunt do
20
+
21
+ it "has six treasures" do
22
+ expect(TreasureHunt::TREASURES.size).to eql 6
23
+ end
24
+
25
+ it "has a pie worth 5 points" do
26
+ expect(TreasureHunt::TREASURES[0]).to eql Treasure.new(:pie, 5)
27
+ end
28
+
29
+ it "has a bottle worth 25 points" do
30
+ expect(TreasureHunt::TREASURES[1]).to eql Treasure.new(:bottle, 25)
31
+ end
32
+
33
+ it "has a hammer worth 50 points" do
34
+ expect(TreasureHunt::TREASURES[2]).to eql Treasure.new(:hammer, 50)
35
+ end
36
+
37
+ it "has a skillet worth 100 points" do
38
+ expect(TreasureHunt::TREASURES[3]).to eql Treasure.new(:skillet, 100)
39
+ end
40
+
41
+ it "has a broomstick worth 200 points" do
42
+ expect(TreasureHunt::TREASURES[4]).to eql Treasure.new(:broomstick, 200)
43
+ end
44
+
45
+ it "has a crowbar worth 400 points" do
46
+ expect(TreasureHunt::TREASURES[5]).to eql Treasure.new(:crowbar, 400)
47
+ end
48
+
49
+ it "returns a random treasure" do
50
+ treasure = TreasureHunt.random_treasure
51
+
52
+ expect(TreasureHunt::TREASURES).to include(treasure)
53
+ end
54
+ end
55
+ end
metadata ADDED
@@ -0,0 +1,87 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: studio_game_louise
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Louise Therezo
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-10-08 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: '3.4'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 3.4.4
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '3.4'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 3.4.4
33
+ description: "# ruby-lou"
34
+ email: louise.thamoy@gmail.com
35
+ executables:
36
+ - studio_game
37
+ extensions: []
38
+ extra_rdoc_files: []
39
+ files:
40
+ - LICENSE
41
+ - README.md
42
+ - bin/players.csv
43
+ - bin/studio_game
44
+ - lib/studio_game/auditable.rb
45
+ - lib/studio_game/berserk_player.rb
46
+ - lib/studio_game/clumsy_player.rb
47
+ - lib/studio_game/die.rb
48
+ - lib/studio_game/game.rb
49
+ - lib/studio_game/game_turn.rb
50
+ - lib/studio_game/loaded_die.rb
51
+ - lib/studio_game/playable.rb
52
+ - lib/studio_game/player.rb
53
+ - lib/studio_game/treasure_hunt.rb
54
+ - spec/studio_game/berserk_player_spec.rb
55
+ - spec/studio_game/clumsy_player_spec.rb
56
+ - spec/studio_game/game_spec.rb
57
+ - spec/studio_game/player_spec.rb
58
+ - spec/studio_game/treasure_hunt_spec.rb
59
+ homepage: http://pragmaticstudio.com
60
+ licenses:
61
+ - MIT
62
+ metadata: {}
63
+ post_install_message:
64
+ rdoc_options: []
65
+ require_paths:
66
+ - lib
67
+ required_ruby_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: '1.9'
72
+ required_rubygems_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ requirements: []
78
+ rubygems_version: 3.2.15
79
+ signing_key:
80
+ specification_version: 4
81
+ summary: A game that is fun
82
+ test_files:
83
+ - spec/studio_game/berserk_player_spec.rb
84
+ - spec/studio_game/clumsy_player_spec.rb
85
+ - spec/studio_game/game_spec.rb
86
+ - spec/studio_game/player_spec.rb
87
+ - spec/studio_game/treasure_hunt_spec.rb