studio_game_sergio_silva 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
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