studio_game_sergio_silva 1.0.1

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
+ SHA1:
3
+ metadata.gz: 3d5089253366898c846b62b1da65518b6659b71b
4
+ data.tar.gz: d68a1e52db9a80a4a171385e86544f8dae44c9aa
5
+ SHA512:
6
+ metadata.gz: 70649ccc5bbf515c5db96d839459239ea4064dc496fe8148a26a6426c3fededd9edf6bded32cc5067f5070579eedd782264e798fc0472d779900e294e4eef0b4
7
+ data.tar.gz: 8af9787a7e57542e8c6cbce358e5929325e1a913916cd0d4603a19aadd53e300023b87f094441da192f206c76fc6edcb97452f9d72a37c3de2ae9abcdf405eca
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ Copyright (c) 2012 The Pragmatic Studio
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ - You may not use this Software in other training contexts.
11
+
12
+ - The above copyright notice and this permission notice shall be
13
+ included in all 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
21
+ THE SOFTWARE.
data/README ADDED
@@ -0,0 +1,6 @@
1
+ This is an example application used in The Pragmatic Studio's
2
+ Ruby Programming course, as described at
3
+
4
+ http://pragmaticstudio.com
5
+
6
+ This code is Copyright 2012 The Pragmatic Studio. See the LICENSE file.
@@ -0,0 +1,6 @@
1
+ High Scores:
2
+ Curly...............845
3
+ Larry...............610
4
+ Klutz...............574
5
+ Moe.................535
6
+ Berserker...........160
data/bin/players.csv ADDED
@@ -0,0 +1,3 @@
1
+ moe,
2
+ larry,60
3
+ curly,125
data/bin/studio_game ADDED
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #imports
4
+ require_relative '../lib/studio_game/game'
5
+ require_relative '../lib/studio_game/clumsy_player'
6
+ require_relative '../lib/studio_game/berserker_player'
7
+
8
+ #Create a game
9
+ knuckleheads = StudioGame::Game.new("Knuckleheads")
10
+
11
+ default_player_file = File.join(File.dirname(__FILE__), 'players.csv')
12
+ knuckleheads.load(ARGV.shift || default_player_file)
13
+
14
+ #Create other players
15
+ player4 = StudioGame::ClumsyPlayer.new("klutz", 150)
16
+ player5 = StudioGame::BerserkerPlayer.new("berserker", 50)
17
+
18
+ #Adds players
19
+ knuckleheads.add_player(player4)
20
+ knuckleheads.add_player(player5)
21
+
22
+ #Running game
23
+ loop do
24
+ puts "How many rounds? ('quit' to exit the program)"
25
+ answer = gets.chomp.downcase
26
+ case answer
27
+ when /^\d+$/
28
+ knuckleheads.play(answer.to_i) do
29
+ knuckleheads.total_points >= 2000
30
+ end
31
+ when 'quit', 'exit'
32
+ knuckleheads.print_stats
33
+ break
34
+ else
35
+ puts "Please enter a number or 'quit'"
36
+ end
37
+ end
@@ -0,0 +1,9 @@
1
+ module StudioGame
2
+ module Auditable
3
+
4
+ def audit(number)
5
+ puts"Rolled a #{number} (#{self.class})"
6
+ end
7
+
8
+ end
9
+ end
@@ -0,0 +1,35 @@
1
+ require_relative 'player'
2
+ require_relative 'treasure_trove'
3
+
4
+ module StudioGame
5
+ class BerserkerPlayer < Player
6
+
7
+ def initialize(name, health = 100, counter = 0)
8
+ super(name, health)
9
+ @counter = counter
10
+ end
11
+
12
+ def berserker?
13
+ @w00t_counter.to_i > 5
14
+ end
15
+
16
+ def blam
17
+ berserker? ? w00t : super
18
+ end
19
+
20
+ def w00t
21
+ super
22
+ @w00t_counter = @w00t_counter.to_i + 1
23
+
24
+ puts "#{name} is berserker" if berserker?
25
+ end
26
+
27
+ end
28
+ end
29
+
30
+ if __FILE__ == $0
31
+ berserker = StudioGame::BerserkerPlayer.new("berserker", 50)
32
+ 6.times { berserker.w00t }
33
+ 2.times { berserker.blam }
34
+ puts berserker.health
35
+ end
@@ -0,0 +1,48 @@
1
+ require_relative 'player.rb'
2
+ require_relative 'treasure_trove.rb'
3
+
4
+ module StudioGame
5
+ class ClumsyPlayer < Player
6
+ attr_reader :boost
7
+
8
+ def initialize(name, health = 100, boost = 2)
9
+ super(name, health)
10
+ @boost = boost
11
+ end
12
+
13
+ def found_treasure(treasure)
14
+ damaged_treasure = Treasure.new(treasure.name, treasure.points / 2)
15
+ super(damaged_treasure)
16
+ puts "#{ name } found a #{ treasure.name } worth #{ treasure.points }"
17
+ puts "#{ name }'s treasures: #{ @found_treasures }"
18
+ end
19
+
20
+ def w00t
21
+ puts "#{ boost } boost factor give me #{ boost.to_i-1 } extra w00t"
22
+ @boost.to_i.times do
23
+ super
24
+ end
25
+ end
26
+
27
+ end
28
+ end
29
+
30
+ if __FILE__ == $0
31
+ clumsy = StudioGame::ClumsyPlayer.new("klutz", 100, 3)
32
+ hammer = StudioGame::Treasure.new(:hammer, 50)
33
+ crowbar = StudioGame::Treasure.new(:crowbar, 400)
34
+
35
+ clumsy.found_treasure(hammer)
36
+ clumsy.found_treasure(hammer)
37
+ clumsy.found_treasure(hammer)
38
+ clumsy.found_treasure(crowbar)
39
+
40
+ clumsy.each_found_treasure do |treasure|
41
+ puts "#{ treasure.points } total #{ treasure.name } points"
42
+ end
43
+
44
+ puts "#{ clumsy.points } grand total points"
45
+
46
+ clumsy.w00t
47
+ puts clumsy.health
48
+ end
@@ -0,0 +1,25 @@
1
+ require_relative 'auditable.rb'
2
+
3
+ module StudioGame
4
+ class Die
5
+
6
+ include Auditable
7
+ attr_reader :number
8
+
9
+ def initialize
10
+ @number = 0
11
+ end
12
+
13
+ def roll
14
+ @number = 1 +rand(6)
15
+ audit(@number)
16
+ @number
17
+ end
18
+
19
+ end
20
+ end
21
+
22
+ if __FILE__ == $0
23
+ die = Die.new()
24
+ puts die.roll
25
+ end
@@ -0,0 +1,145 @@
1
+ require_relative 'die.rb'
2
+ require_relative 'player.rb'
3
+ require_relative 'game_turn.rb'
4
+ require_relative 'treasure_trove.rb'
5
+
6
+ module StudioGame
7
+ class Game
8
+
9
+ attr_reader :name, :players
10
+
11
+ def initialize(name)
12
+ @name = name.capitalize
13
+ @players = Array.new
14
+ end
15
+
16
+ def add_player(player)
17
+ players.push(player)
18
+ end
19
+
20
+ def load(from_file)
21
+ File.readlines(from_file).each do |line|
22
+ add_player(Player.from_csv(line))
23
+ end
24
+ end
25
+
26
+ def play(rounds)
27
+ puts "\nThere are #{players.size} players on this game"
28
+
29
+ @players.each do |p|
30
+ puts p
31
+ end
32
+
33
+ @treasures = TreasureTrove::TREASURES
34
+ puts"\nThere are #{@treasures.size} treasures to be found"
35
+
36
+ @treasures.each do |t|
37
+ puts "A #{t.name} is worth #{t.points}"
38
+ end
39
+
40
+ 1.upto(rounds) do |counts|
41
+
42
+ if self.force_game_over?
43
+ puts "\nMaximum points limit reached at round #{counts}\n\t***GAME OVER***\n"
44
+ break
45
+ end
46
+
47
+ puts "\nRound #{counts}"
48
+
49
+ @players.each do |p|
50
+ puts "\n#{p}\n"
51
+ GameTurn.take_turn(p)
52
+ end
53
+
54
+ end
55
+ end
56
+
57
+ def print_name_and_health(player)
58
+ puts "#{player.name} (#{player.health})\n"
59
+ end
60
+
61
+ def print_total_points(player)
62
+ puts "\n #{player.name}'s points total:\n"
63
+ puts "#{player.name} grand #{player.points} total points\n"
64
+ end
65
+
66
+ #Bonus Round 17 method
67
+ def total_points
68
+ sum = 0
69
+ @players.each do |p|
70
+ sum += p.points
71
+ end
72
+ sum
73
+ end
74
+
75
+ #Bonus Round 18 method
76
+ def force_game_over?
77
+ self.total_points >= 2000
78
+ end
79
+
80
+ def save_high_scores(to_file = "high_scores.txt")
81
+ File.open(to_file, "w") do |file|
82
+ file.puts"#{@title} High Scores:"
83
+ @players.sort.each do |player|
84
+ file.puts(high_score_entry(player))
85
+ end
86
+ end
87
+ end
88
+
89
+ def high_score_entry(player)
90
+ formatted_name = player.name.ljust(20, '.')
91
+ "#{formatted_name}#{player.score}"
92
+ end
93
+
94
+ def print_stats
95
+
96
+ strong, wimpy = @players.partition { |p| p.strong? }
97
+ puts "\n#{@name}'s Statistics:\n"
98
+
99
+ puts "#{strong.size} strong players:\n"
100
+ strong.each do |s|
101
+ print_name_and_health(s)
102
+ end
103
+
104
+ puts "#{wimpy.size} wimpy players:\n"
105
+ wimpy.each do |w|
106
+ print_name_and_health(w)
107
+ end
108
+
109
+ @players = @players.sort
110
+
111
+ puts "\n#{@name}'s Grand points:\n"
112
+ @players.each do |p|
113
+ print_total_points(p)
114
+ end
115
+
116
+ puts "\n#{@name}'s High Scores:\n"
117
+ @players.each do |p|
118
+ high_score_entry(p)
119
+ end
120
+
121
+ puts "\nPoints on a per-treasure basis"
122
+ @players.each do |p|
123
+ puts "#{p.name}'s total points:\n"
124
+ p.each_found_treasure do |treasure|
125
+ puts "#{treasure.points} total #{treasure.name} points\n"
126
+ end
127
+ puts"\n"
128
+ end
129
+
130
+ puts "\n#{self.name}'s total found treasure points:\n"
131
+ puts total_points
132
+
133
+ save_high_scores
134
+ end
135
+
136
+ end
137
+ end
138
+
139
+ if __FILE__ == $0
140
+ player = Player.new("Sam")
141
+ game = Game.new("Game")
142
+ game.add_player(player)
143
+ game.play(3)
144
+ game.print_stats
145
+ end
@@ -0,0 +1,30 @@
1
+ require_relative 'die.rb'
2
+ #require_relative 'loaded_die.rb'
3
+ require_relative 'player.rb'
4
+ require_relative 'treasure_trove.rb'
5
+
6
+ module StudioGame
7
+ module GameTurn
8
+
9
+ def self.take_turn(player)
10
+ die = Die.new
11
+ #puts number_rolled
12
+
13
+ case die.roll
14
+ when 5..6
15
+ player.w00t
16
+ treasure = TreasureTrove.random
17
+ player.found_treasure(treasure)
18
+ when 3..4
19
+ puts "#{player.name} was skipped!"
20
+ treasure = TreasureTrove.random
21
+ player.found_treasure(treasure)
22
+ when 1..2
23
+ player.blam
24
+ treasure = TreasureTrove.random
25
+ player.found_treasure(treasure)
26
+ end
27
+ end
28
+
29
+ end
30
+ end
@@ -0,0 +1,15 @@
1
+ module StudioGame
2
+ class LoadedDie
3
+
4
+ attr_reader :number
5
+ include Auditable
6
+
7
+ def roll
8
+ numbers = [1, 1, 2, 5, 6, 6]
9
+ @number = numbers.sample
10
+ audit(@number)
11
+ @numbers
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1,19 @@
1
+ module StudioGame
2
+ module Playable
3
+
4
+ def strong?
5
+ self.health > 100
6
+ end
7
+
8
+ def blam
9
+ self.health -= 10
10
+ puts "#{@name} got blamed!"
11
+ end
12
+
13
+ def w00t
14
+ self.health += 15
15
+ puts "#{name} got w00ted!"
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,67 @@
1
+ require_relative 'playable.rb'
2
+
3
+ module StudioGame
4
+ class Player
5
+
6
+ include Playable
7
+ #attr_reader :health - Changed in lesson 21
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 to_s
17
+ "I am #{name} with health = #{health}, points = #{@found_treasures.values.reduce(:+)} and score = #{score}."
18
+ end
19
+
20
+ def score
21
+ @health + @found_treasures.values.reduce(:+).to_i
22
+ end
23
+
24
+ def strong?
25
+ @health > 100
26
+ end
27
+
28
+ def <=>(other)
29
+ other.score <=> self.score
30
+ end
31
+
32
+ def found_treasure(treasure)
33
+ @found_treasures[treasure.name] += treasure.points
34
+ puts "#{self.name} found a #{treasure.name} worth #{treasure.points}"
35
+ puts "#{self.name}'s treasures: #{@found_treasures}"
36
+ end
37
+
38
+ def points
39
+ @found_treasures.values.reduce(:+).to_i
40
+ end
41
+
42
+ def self.from_csv(string)
43
+ name, initial_health = string.split(",")
44
+ player = Player.new(name, initial_health.to_i)
45
+ end
46
+
47
+ def each_found_treasure
48
+
49
+ @found_treasures.each do|key, value|
50
+ treasure = Treasure.new(key, value)
51
+ yield(treasure)
52
+ end
53
+
54
+ end
55
+
56
+ end
57
+ end
58
+
59
+ if __FILE__ == $0
60
+ player = Player.new("moe")
61
+ puts player.name
62
+ puts player.health
63
+ player.w00t
64
+ puts player.health
65
+ player.blam
66
+ puts player.health
67
+ end
@@ -0,0 +1,24 @@
1
+
2
+ module StudioGame
3
+ Treasure = Struct.new(:name, :points)
4
+
5
+ module TreasureTrove
6
+ TREASURES = [ 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
+ def self.random
14
+ TREASURES.sample
15
+ end
16
+
17
+ end
18
+ end
19
+
20
+ if __FILE__ == $0
21
+ puts TreasureTrove::TREASURES
22
+ treasure = TreasureTrove.random
23
+ puts "You have found a #{treasure.name}. It values #{treasure.points} points"
24
+ end
@@ -0,0 +1,33 @@
1
+ #require_relative '../../lib/studio_game/berserker_player'
2
+ require 'studio_game/berserker_player'
3
+
4
+ module StudioGame
5
+ describe BerserkerPlayer do
6
+
7
+ before do
8
+ @initial_health = 50
9
+ @player = BerserkerPlayer.new("berserker", @initial_health)
10
+ puts @player
11
+ end
12
+
13
+ it "does not go berserk when w00ted up to 5 times" do
14
+ 1.upto(5){ @player.w00t }
15
+
16
+ expect( @player.berserker? ).to be false
17
+ end
18
+
19
+ it "goes berserk after 5 blams" do
20
+ 1.upto(6){ @player.w00t }
21
+
22
+ expect( @player.berserker? ).to be true
23
+ end
24
+
25
+ it "gots w00ted instead of blammed when it's gone berserk" do
26
+ 1.upto(6){ @player.w00t }
27
+ 1.upto(2){ @player.blam }
28
+
29
+ expect( @player.health ).to eq( @initial_health + ( 8 * 15 ))
30
+ end
31
+
32
+ end
33
+ end
@@ -0,0 +1,44 @@
1
+ #require_relative '../../lib/studio_game/clumsy_player'
2
+ require 'studio_game/clumsy_player'
3
+
4
+ module StudioGame
5
+ describe ClumsyPlayer do
6
+
7
+ before do
8
+ @boost = 4
9
+ @initial_health = 100
10
+ @player = ClumsyPlayer.new("klutz", @initial_health, @boost)
11
+ end
12
+
13
+ it "is being w00ted a several times by boost_factor" do
14
+ @player.w00t
15
+ expect(@player.health.to_i).to eq (@initial_health + (@boost * 15))
16
+ end
17
+
18
+ it "only gets half the point value for each treasure" do
19
+ expect(@player.points).to eq 0
20
+
21
+ hammer = Treasure.new(:hammer, 50)
22
+ @player.found_treasure(hammer)
23
+ @player.found_treasure(hammer)
24
+ @player.found_treasure(hammer)
25
+
26
+ expect(@player.points).to eq 75
27
+
28
+ crowbar = Treasure.new(:crowbar, 400)
29
+ @player.found_treasure(crowbar)
30
+
31
+ expect(@player.points).to eq 275
32
+
33
+ yielded = []
34
+ @player.each_found_treasure do |treasure|
35
+ yielded << treasure
36
+ end
37
+
38
+ expect(yielded).to eq ([Treasure.new(:hammer, 75),
39
+ Treasure.new(:crowbar, 200)
40
+ ])
41
+ end
42
+
43
+ end
44
+ end
@@ -0,0 +1,12 @@
1
+ require_relative 'player.rb'
2
+
3
+ File.readlines("players.csv").each do |line|
4
+
5
+ puts line
6
+ name, initial_health = line.split(",")
7
+ puts name
8
+ puts initial_health
9
+ player = Player.new(name, initial_health.to_i)
10
+ puts player
11
+
12
+ end
@@ -0,0 +1,67 @@
1
+ require 'studio_game/game'
2
+ #require_relative '../../lib/studio_game/game'
3
+
4
+ module StudioGame
5
+ describe Game do
6
+
7
+ before do
8
+ @game = Game.new("Knuckleheads")
9
+ @initial_health = 100
10
+ @player = Player.new("moe", @initial_health)
11
+ @rounds = 1
12
+ @game.add_player(@player)
13
+ end
14
+
15
+ it "a high number was rolled" do
16
+ #Die.any_instance.stub(:roll).and_return(5) --> The teachers suggest to use this, but is deprecated
17
+ allow_any_instance_of(Die).to receive(:roll).and_return(5)
18
+
19
+ @game.play(@rounds)
20
+
21
+ expect(@player.health).to eq(@initial_health + 15)
22
+ end
23
+
24
+ it "a medium number was rolled" do
25
+ #Die.any_instance.stub(:roll).and_return(3) --> The teachers suggest to use this, but is deprecated
26
+ allow_any_instance_of(Die).to receive(:roll).and_return(3)
27
+
28
+ @game.play(@rounds)
29
+
30
+ expect(@player.health).to eq(@initial_health)
31
+ end
32
+
33
+ it "a low number was rolled" do
34
+ #Die.any_instance.stub(:roll).and_return(1) --> The teachers suggest to use this, but is deprecated
35
+ allow_any_instance_of(Die).to receive(:roll).and_return(1)
36
+
37
+ @game.play(@rounds)
38
+
39
+ expect(@player.health).to eq(@initial_health - 10)
40
+ end
41
+
42
+ it "assigns a treasure for points during a player's turn" do
43
+ game = Game.new("Knuckleheads")
44
+ player = Player.new("moe")
45
+
46
+ game.add_player(player)
47
+ game.play(1)
48
+
49
+ expect(player.points).to_not eq(0)
50
+ end
51
+
52
+ it "computes a total points as the sum of all player points" do
53
+ game = Game.new("Knuckleheads")
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
+ expect(game.total_points).to eq(500)
64
+ end
65
+
66
+ end
67
+ end
@@ -0,0 +1,122 @@
1
+ require 'studio_game/player'
2
+ require 'studio_game/treasure_trove'
3
+ #require_relative '../../lib/studio_game/player'
4
+ #require_relative '../../lib/studio_game/treasure_trove'
5
+
6
+ module StudioGame
7
+ describe Player do
8
+
9
+ before do
10
+ @initial_health = 150
11
+ @player = Player.new("larry", @initial_health)
12
+ end
13
+
14
+ it "has a capitalized name" do
15
+ expect(@player.name).to eq("Larry")
16
+ end
17
+
18
+ it "has an initial healgh" do
19
+ expect(@player.health).to eq(150)
20
+ end
21
+
22
+ it "has a string representation" do
23
+ @player.found_treasure(Treasure.new(:hammer, 50))
24
+ @player.found_treasure(Treasure.new(:hammer, 50))
25
+
26
+ expect(@player.to_s).to eq("I am #{ @player.name } with health = #{ @player.health }, points = 100 and score = 250.")
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 eq(250)
34
+ end
35
+
36
+ it "increases health by 15 when w00ted" do
37
+ @player.w00t
38
+ expect(@player.health).to eq(@initial_health + 15)
39
+ end
40
+
41
+ it "decreases health by 10 when blammed" do
42
+ @player.blam
43
+ expect(@player.health).to eq(@initial_health - 10)
44
+ end
45
+
46
+ context "with a health of at least 101" do
47
+
48
+ before do
49
+ @player = Player.new("hulk", 150)
50
+ end
51
+
52
+ it "is strong" do
53
+ expect(@player).to be_strong
54
+ end
55
+ end
56
+
57
+ context "with a health less than 101" do
58
+
59
+ before do
60
+ @player = Player.new("loki", 100)
61
+ end
62
+
63
+ it "is wimpy" do
64
+ expect(@player).to_not be_strong
65
+ end
66
+ end
67
+
68
+ context "in a collection of players" do
69
+
70
+ before do
71
+ @player1 = Player.new("mow", 100)
72
+ @player2= Player.new("larryy", 200)
73
+ @player3 = Player.new("curly", 300)
74
+
75
+ @players = [@player1, @player2, @player3]
76
+ end
77
+
78
+ it "is sorted by decreasing score" do
79
+ expect(@players.sort).to eq([@player3, @player2, @player1])
80
+ end
81
+
82
+ it "computes points as the sum of all treasure points " do
83
+ expect(@player.points).to eq(0)
84
+
85
+ @player.found_treasure(Treasure.new(:hammer, 50))
86
+
87
+ expect(@player.points).to be(50)
88
+
89
+ @player.found_treasure(Treasure.new(:crowbar, 400))
90
+
91
+ expect(@player.points).to be(450)
92
+
93
+ @player.found_treasure(Treasure.new(:hammer, 50))
94
+
95
+ expect(@player.points).to be(500)
96
+ end
97
+
98
+ it "yields each found treasure and its total points" do
99
+ @player.found_treasure(Treasure.new(:skillet, 100))
100
+ @player.found_treasure(Treasure.new(:skillet, 100))
101
+ @player.found_treasure(Treasure.new(:hammer, 50))
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
+ @player.found_treasure(Treasure.new(:bottle, 5))
106
+ @player.found_treasure(Treasure.new(:bottle, 5))
107
+
108
+ yielded = []
109
+
110
+ @player.each_found_treasure do |treasure|
111
+ yielded << treasure
112
+ end
113
+
114
+ expect(yielded).to eq([Treasure.new(:skillet, 200),
115
+ Treasure.new(:hammer, 50),
116
+ Treasure.new(:bottle, 25)
117
+ ])
118
+ end
119
+ end
120
+
121
+ end
122
+ end
@@ -0,0 +1,26 @@
1
+ require 'studio_game/treasure_trove'
2
+ #require_relative '../../lib/studio_game/treasure_trove'
3
+
4
+ module StudioGame
5
+ describe TreasureTrove do
6
+
7
+ before do
8
+ @name = :sword
9
+ @points
10
+ @treasure = Treasure.new(@name, @points)
11
+ end
12
+
13
+ it "has an initial health" do
14
+ expect(@treasure.name).to eq(@name)
15
+ end
16
+
17
+ it "has an initial point" do
18
+ expect(@treasure.points).to eq(@points)
19
+ end
20
+
21
+ it "returns a random treasure" do
22
+ expect(TreasureTrove.random).to be_an_instance_of(Treasure)
23
+ end
24
+
25
+ end
26
+ end
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: studio_game_sergio_silva
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Sérgio Vitarelli Silva
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-06-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: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: |-
28
+ This is an example application used in The Pragmatic Studio's
29
+ Ruby Programming course, as described at
30
+
31
+ http://pragmaticstudio.com
32
+
33
+ This code is Copyright 2012 The Pragmatic Studio. See the LICENSE file.
34
+ email: sergio.silva@dito.com.br
35
+ executables:
36
+ - studio_game
37
+ extensions: []
38
+ extra_rdoc_files: []
39
+ files:
40
+ - LICENSE
41
+ - README
42
+ - bin/high_scores.txt
43
+ - bin/players.csv
44
+ - bin/studio_game
45
+ - lib/studio_game/auditable.rb
46
+ - lib/studio_game/berserker_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/berserker_player_spec.rb
56
+ - spec/studio_game/clumsy_player_spec.rb
57
+ - spec/studio_game/files.rb
58
+ - spec/studio_game/game_spec.rb
59
+ - spec/studio_game/player_spec.rb
60
+ - spec/studio_game/treasure_trove_spec.rb
61
+ homepage: https://github.com/
62
+ licenses: []
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
+ rubyforge_project:
80
+ rubygems_version: 2.4.5
81
+ signing_key:
82
+ specification_version: 4
83
+ summary: Studio game gem
84
+ test_files:
85
+ - spec/studio_game/game_spec.rb
86
+ - spec/studio_game/files.rb
87
+ - spec/studio_game/clumsy_player_spec.rb
88
+ - spec/studio_game/player_spec.rb
89
+ - spec/studio_game/treasure_trove_spec.rb
90
+ - spec/studio_game/berserker_player_spec.rb