mfp_studio_game 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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ab3b48ba024a32c184cc58d9e2bff77be345628b
4
+ data.tar.gz: 9346fddd8b1419346364cd5c04c7af92f3275aa7
5
+ SHA512:
6
+ metadata.gz: 331dda062947004c435f32234c05d51a21a69f2b70d8c48a356c08eb30e907bc4ddba098d5ba8ad6b93597cdd063483227a602682454a1139d10267f1187b746
7
+ data.tar.gz: f10b6c1593d1bebc78834df541ffc48625e7e24c7ca10d749b38c0f7304868ecb4410ba856f5791d67e49b74a1e41460002d8f9ad164a9a01c5bd1bf62d26c9a
data/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Marcos Parreiras
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
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
data/README ADDED
@@ -0,0 +1 @@
1
+ This is the project got from the Pragmatic Studio Ruby classes and exercises.
@@ -0,0 +1,6 @@
1
+ Knuckleheads's High Scores:
2
+ Theo................1085
3
+ Klutz...............1082.5
4
+ Berserker...........630
5
+ Simon...............605
6
+ Alvin...............350
@@ -0,0 +1,5 @@
1
+ John,30
2
+ Jack,70
3
+ Arnold,120
4
+ Steve,50
5
+ Adolfinho,90
@@ -0,0 +1,3 @@
1
+ Alvin,100
2
+ Simon,60
3
+ Theo,125
@@ -0,0 +1,64 @@
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", 100)
8
+ # player2 = Player.new("larry", 60)
9
+ # player3 = Player.new("curly", 125)
10
+
11
+ game = StudioGame::Game.new("Knuckleheads")
12
+ # game.load(ARGV.shift || "players.csv")
13
+ default_player_file = File.join(File.dirname(__FILE__), 'players.csv')
14
+ game.load(ARGV.shift || default_player_file)
15
+
16
+ klutz = StudioGame::ClumsyPlayer.new("klutz", 105)
17
+ berserker = StudioGame::BerserkPlayer.new("berserker", 50)
18
+ game.add_player(klutz)
19
+ game.add_player(berserker)
20
+ # knuckleheads.add_player(player1)
21
+ # knuckleheads.add_player(player2)
22
+ # knuckleheads.add_player(player3)
23
+ # knuckleheads.play(3)
24
+
25
+
26
+ loop do
27
+ puts "How many rounds? ('quit' to exit)"
28
+ answer = STDIN.gets.chomp.downcase
29
+ case answer
30
+ when /^\d+$/
31
+ puts "Let's play for #{answer} rounds"
32
+ game.play(answer.to_i)
33
+ # game.play(answer.to_i) do
34
+ # game.total_points >= 20000
35
+ # end
36
+ when 'quit', 'exit'
37
+ game.print_stats
38
+ break
39
+ else
40
+ puts "Please enter a name or 'quit'"
41
+ end
42
+ end
43
+
44
+ game.save_high_scores(to_file="high_scores.txt")
45
+
46
+
47
+
48
+
49
+
50
+ # # Another game
51
+ # chipmunks = Game.new("Chipmunks")
52
+ # player4 = Player.new("alvin", 90)
53
+ # player5 = Player.new("simon", 90)
54
+ # player6 = Player.new("theodore", 95)
55
+
56
+ # chipmunks = Game.new("Knuckleheads")
57
+ # chipmunks.add_player(player4)
58
+ # chipmunks.add_player(player5)
59
+ # chipmunks.add_player(player6)
60
+ # chipmunks.play(2)
61
+
62
+
63
+ # chipmunks.print_stats
64
+ # knuckleheads.print_stats
@@ -0,0 +1,10 @@
1
+
2
+ module StudioGame
3
+ module Auditable
4
+
5
+ def audit
6
+ puts "Rolled a #{self.number} (#{self.class})"
7
+ end
8
+
9
+ end
10
+ end
@@ -0,0 +1,39 @@
1
+ require_relative 'player'
2
+
3
+ module StudioGame
4
+ class BerserkPlayer < Player
5
+
6
+ def initialize(name, health)
7
+ super(name,health)
8
+ @w00t_count = 0
9
+ end
10
+
11
+ def berserk?
12
+ @w00t_count > 5
13
+ end
14
+
15
+ def w00t
16
+ super
17
+ @w00t_count += 1
18
+ puts "Berserker is berserk" if berserk?
19
+ end
20
+
21
+ def blam
22
+ if berserk?
23
+ w00t
24
+ else
25
+ super
26
+ end
27
+ end
28
+
29
+
30
+ end
31
+
32
+
33
+ if __FILE__ == $0
34
+ berserker = BerserkPlayer.new("berserker", 50)
35
+ 6.times { berserker.w00t }
36
+ 2.times { berserker.blam }
37
+ puts berserker.health
38
+ end
39
+ end
@@ -0,0 +1,39 @@
1
+ require_relative 'player'
2
+
3
+ module StudioGame
4
+ class ClumsyPlayer < Player
5
+ attr_reader :boost_factor
6
+
7
+ def initialize(name, health, boost_factor=15)
8
+ super(name,health)
9
+ @boost_factor = boost_factor
10
+ end
11
+
12
+ def found_treasure(treasure)
13
+ super( Treasure.new(treasure.name, treasure.points / 2.0) )
14
+ # puts "#{@name}'s treasures: #{@found_treasures}"
15
+ end
16
+
17
+ def w00t
18
+ @boost_factor.times { super }
19
+ end
20
+
21
+ end
22
+
23
+ if __FILE__ == $0
24
+ clumsy = ClumsyPlayer.new("klutz")
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
39
+ end
@@ -0,0 +1,18 @@
1
+ require_relative 'auditable'
2
+
3
+ module StudioGame
4
+ class Die
5
+ include Auditable
6
+ attr_reader :number
7
+
8
+ def initialize
9
+ @number = roll
10
+ end
11
+
12
+ def roll
13
+ @number = rand(1..6)
14
+ audit
15
+ @number
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,99 @@
1
+ require_relative 'player'
2
+ require_relative 'die'
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 load(from_file)
16
+ File.readlines(from_file).each do |line|
17
+ add_player(Player.from_csv(line))
18
+ end
19
+ end
20
+
21
+ def save_high_scores(to_file="high_scores.txt")
22
+ File.open(to_file,'w') do |file|
23
+
24
+ file.puts "#{@title}'s High Scores:"
25
+ @players.sort.each do |player|
26
+ # file.puts print_name_and_health(player)
27
+ file.puts "#{high_score_entry(player)}"
28
+ end
29
+ end
30
+ end
31
+
32
+ def high_score_entry(player)
33
+ print_name_and_health(player)
34
+ end
35
+
36
+ def add_player(player)
37
+ @players << player
38
+ end
39
+
40
+ def play(rounds)
41
+ puts "\n\n#{@title}'s game"
42
+
43
+ treasures = TreasureTrove::TREASURES
44
+ puts "\nThere are #{treasures.size} treasures to be found:"
45
+ treasures.each do |treasure|
46
+ puts "A #{treasure.name} is worth #{treasure.points}"
47
+ end
48
+
49
+ 1.upto(rounds) do |round|
50
+ puts "\n---- New round: #{round} ----"
51
+ @players.each do |player|
52
+ GameTurn.take_turn(player)
53
+ puts player
54
+ end
55
+ puts "Points at the end of the #{round}round: #{total_points}"
56
+ # if yield
57
+ # break
58
+ # end
59
+ end
60
+ end
61
+
62
+ def print_name_and_health(player)
63
+ "#{player.name}".ljust(20, '.') + "#{player.score}"
64
+ # "#{player.score}".ljust(20, '.') + "#{player.name}"
65
+ end
66
+
67
+ def print_stats
68
+ puts "\n\n#{@title}'s Stats"
69
+ strongs, wimpies = @players.partition{ |player| player.strong? }
70
+ # strongs.sort.reverse!
71
+
72
+ puts "\n#{strongs.length} strong player:"
73
+ strongs.each { |player| puts "#{player.name} (#{player.health})" }
74
+
75
+ puts "\n#{wimpies.length} wimpy player:"
76
+ wimpies.each { |player| puts "#{player.name} (#{player.health})" }
77
+
78
+ # sorted_players = @players.sort_by { |player| player.score } .reverse
79
+ # sorted_players = @players.sort { |x,y| y.score <=> x.score }
80
+ @players.each do |player|
81
+ puts "\n#{player.name}'s points totals:"
82
+ player.each_found_treasure do | treasure |
83
+ puts "#{treasure.points} total #{treasure.name} points"
84
+ end
85
+ puts "#{player.points} grand total points"
86
+ end
87
+
88
+ puts "\n\n#{@title}'s High Scores"
89
+ @players.sort.each do |player|
90
+ puts high_score_entry(player)
91
+ end
92
+ end
93
+
94
+ def total_points
95
+ @players.reduce(0) { |sum, player| sum + player.points }
96
+ end
97
+
98
+ end
99
+ end
@@ -0,0 +1,29 @@
1
+ require_relative 'game'
2
+ require_relative 'die'
3
+ require_relative 'loaded_die'
4
+ require_relative 'treasure_trove'
5
+
6
+ module StudioGame
7
+ module GameTurn
8
+ def self.take_turn(player)
9
+ puts "\nPlayer turn: #{player.name}"
10
+ die = Die.new
11
+ number_rolled = die.number
12
+
13
+ puts "number_rolled: #{number_rolled}"
14
+
15
+ case number_rolled
16
+ when 1..2
17
+ player.blam
18
+ when 3..4
19
+ puts "#{player.name} was skipped"
20
+ else
21
+ player.w00t
22
+ end
23
+
24
+ treasure = TreasureTrove::random
25
+ # puts "#{player.name} found a #{treasure.name} worth #{treasure.points} points"
26
+ player.found_treasure(treasure)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,20 @@
1
+ require_relative 'auditable'
2
+
3
+ module StudioGame
4
+ class LoadedDie
5
+ attr_reader :number
6
+ include Auditable
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
+
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ module StudioGame
2
+ module Playable
3
+
4
+ def blam
5
+ self.health -= 10
6
+ puts "#{self.name} got blammed"
7
+ end
8
+
9
+ def w00t
10
+ self.health += 15
11
+ puts "#{self.name} got w00ted"
12
+ end
13
+
14
+ def strong?
15
+ self.health > 100
16
+ # true
17
+ end
18
+
19
+ end
20
+ end
@@ -0,0 +1,71 @@
1
+ require_relative 'treasure_trove'
2
+ require_relative 'playable'
3
+
4
+ module StudioGame
5
+ class Player
6
+ include Playable
7
+ include Comparable
8
+
9
+ attr_reader :found_treasures
10
+ attr_accessor :name, :health
11
+
12
+ def initialize(name, health=50)
13
+ @name = name.capitalize
14
+ @health = health
15
+ @found_treasures = Hash.new(0)
16
+ end
17
+
18
+ def self.from_csv(line)
19
+ name, health = line.split(',')
20
+ Player.new(name, Integer(health))
21
+ end
22
+
23
+ def each_found_treasure
24
+ @found_treasures.each do |name, points|
25
+ treasure = Treasure.new(name,points)
26
+ yield treasure
27
+ end
28
+ end
29
+
30
+ def found_treasure(treasure)
31
+ @found_treasures[treasure.name] += treasure.points
32
+ puts "#{@name} found a #{treasure.name} worth #{treasure.points} points"
33
+ puts "#{@name}'s treasures: #{@found_treasures}"
34
+ end
35
+
36
+ def points
37
+ @found_treasures.values.reduce(0, :+)
38
+ end
39
+
40
+
41
+
42
+ def to_s
43
+ "I'm #{@name} with a health of #{@health}, points = #{points}, and score of = #{score}."
44
+ end
45
+
46
+ def score
47
+ @health + points
48
+ # @health + @name.length
49
+ end
50
+
51
+ def name=(new_name)
52
+ @name = new_name.capitalize
53
+ end
54
+
55
+ def <=>(other)
56
+ # score <=> anOther.score
57
+ other.score <=> score
58
+ end
59
+ # end
60
+ end
61
+
62
+ if __FILE__ == $0
63
+ player = Player.new("moe")
64
+ puts player.name
65
+ puts player.health
66
+ player.w00t
67
+ puts player.health
68
+ player.blam
69
+ puts player.health
70
+ end
71
+ end
@@ -0,0 +1,23 @@
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
19
+
20
+ if __FILE__ == $0
21
+ # puts TreasureTrove::TREASURES
22
+
23
+ end
@@ -0,0 +1,31 @@
1
+ require 'studio_game/berserk_player'
2
+ require 'stringio'
3
+
4
+ module StudioGame
5
+ describe BerserkPlayer do
6
+ $stdout = StringIO.new
7
+
8
+ before do
9
+ @initial_health = 50
10
+ @player = BerserkPlayer.new("berserker", @initial_health)
11
+ end
12
+
13
+ it "does not go berserk when w00ted up to 5 times" do
14
+ 1.upto(5) { @player.w00t }
15
+ expect(@player.berserk?).to eq(false)
16
+
17
+ end
18
+
19
+ it "goes berserk when w00ted more than 5 times" do
20
+ 1.upto(6) { @player.w00t }
21
+ expect(@player.berserk?).to eq(true)
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
+ expect(@player.health).to eq(@initial_health + (8 * 15))
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,46 @@
1
+ require 'studio_game/clumsy_player'
2
+
3
+ module StudioGame
4
+ describe ClumsyPlayer do
5
+ $stdout = StringIO.new
6
+
7
+ before do
8
+ @initial_health = 100
9
+ @boost_factor = 4
10
+ @player = ClumsyPlayer.new("klutz", @initial_health, @boost_factor)
11
+ end
12
+
13
+ it "only gets half the point value for each treasure" do
14
+ # @player.points.should == 0
15
+ expect(@player.points).to eq(0)
16
+
17
+ hammer = Treasure.new(:hammer, 50)
18
+ @player.found_treasure(hammer)
19
+ @player.found_treasure(hammer)
20
+ @player.found_treasure(hammer)
21
+
22
+ # @player.points.should == 75
23
+ expect(@player.points).to eq(75)
24
+
25
+ crowbar = Treasure.new(:crowbar, 400)
26
+ @player.found_treasure(crowbar)
27
+
28
+ # @player.points.should == 275
29
+ expect(@player.points).to eq(275)
30
+
31
+ yielded = []
32
+ @player.each_found_treasure do |treasure|
33
+ yielded << treasure
34
+ end
35
+
36
+
37
+ expect(yielded).to eq([Treasure.new(:hammer, 75), Treasure.new(:crowbar, 200)])
38
+ end
39
+
40
+ it "receives several w00ts when w00ted" do
41
+ @player.w00t
42
+ expect(@player.health).to eq(@initial_health + @boost_factor*15)
43
+ end
44
+
45
+ end
46
+ end
@@ -0,0 +1,15 @@
1
+ require 'studio_game/die'
2
+
3
+ module StudioGame
4
+ describe Die do
5
+
6
+ before do
7
+ @die = Die.new
8
+ end
9
+
10
+ it "has a defined number" do
11
+ expect(@die.number >= 1 && @die.number <=6).to eq(true)
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1,76 @@
1
+ require 'studio_game/game'
2
+
3
+ module StudioGame
4
+ describe Game do
5
+
6
+ # $stdout = StringIO.new
7
+
8
+ before do
9
+ @game = Game.new("Knuckleheads")
10
+ @initial_health = 100
11
+ @player = Player.new("moe", @initial_health)
12
+ @game.add_player(@player)
13
+ end
14
+
15
+ it "increases player health when gets 6- a high number on die" do
16
+ allow_any_instance_of(Die).to receive(:roll).and_return(6)
17
+ @game.play(1)
18
+ expect(@player.health).to eq(@initial_health + 15)
19
+ end
20
+
21
+ it "increases player health when gets 5- a high number on die" do
22
+ allow_any_instance_of(Die).to receive(:roll).and_return(5)
23
+ @game.play(1)
24
+ expect(@player.health).to eq(@initial_health + 15)
25
+ end
26
+
27
+ it "skips player when gets 4- a medium number on die" do
28
+ allow_any_instance_of(Die).to receive(:roll).and_return(4)
29
+ @game.play(1)
30
+ expect(@player.health).to eq(@initial_health)
31
+ end
32
+
33
+ it "skips player when gets 3- a medium number on die" do
34
+ allow_any_instance_of(Die).to receive(:roll).and_return(3)
35
+ @game.play(1)
36
+ expect(@player.health).to eq(@initial_health)
37
+ end
38
+
39
+ it "decreases player health when gets 2- a low number on die" do
40
+ allow_any_instance_of(Die).to receive(:roll).and_return(2)
41
+ @game.play(1)
42
+ expect(@player.health).to eq(@initial_health - 10)
43
+ end
44
+
45
+ it "decreases player health when gets 1- a low number on die" do
46
+ allow_any_instance_of(Die).to receive(:roll).and_return(2)
47
+ @game.play(1)
48
+ expect(@player.health).to eq(@initial_health - 10)
49
+ end
50
+
51
+ it "assigns a treasure for points during a player's turn" do
52
+ game = Game.new("Knuckleheads")
53
+ player = Player.new("moe")
54
+ game.add_player(player)
55
+ game.play(1)
56
+ expect(player.points).not_to eq(0)
57
+ # expect(player.points).to eq(2)
58
+ # player.points.should_not be_zero
59
+ # or use alternate expectation syntax:
60
+ # expect(player.points).not_to be_zero
61
+ end
62
+
63
+ it "computes total points as the sum of all player points" do
64
+ game = Game.new("Knuckleheads")
65
+ player1 = Player.new("moe")
66
+ player2 = Player.new("larry")
67
+ game.add_player(player1)
68
+ game.add_player(player2)
69
+ player1.found_treasure(Treasure.new(:hammer, 50))
70
+ player1.found_treasure(Treasure.new(:hammer, 50))
71
+ player2.found_treasure(Treasure.new(:crowbar, 400))
72
+ # game.total_points.should == 500
73
+ expect(game.total_points).to eq(500)
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,165 @@
1
+ require 'stringio' # Adiciona StringIO
2
+ # require 'studio_game/spec_helper'
3
+ require 'studio_game/player'
4
+ require 'studio_game/treasure_trove'
5
+
6
+ module StudioGame
7
+ describe Player do
8
+ $stdout = StringIO.new
9
+
10
+ before do
11
+ @initial_health = 150
12
+ @player = player = Player.new("larry", @initial_health)
13
+ end
14
+
15
+ it "has a capitalized name" do
16
+ expect(@player.name).to eq("Larry")
17
+ # player.name.should == "Larry"
18
+ end
19
+
20
+ it "has an initial health" do
21
+ expect(@player.health).to eq(150)
22
+ end
23
+
24
+ it "has a string representation" do
25
+ @player.found_treasure(Treasure.new(:hammer, 50))
26
+ @player.found_treasure(Treasure.new(:hammer, 50))
27
+ # expect(@player.to_s).to eq("I'm Larry with a health of 150 and socre of 250.")
28
+ expect(@player.to_s).to eq("I'm Larry with a health of 150, points = 100, and score of = 250.")
29
+
30
+ end
31
+
32
+ # it "computes a score as the sum of its health and length of name" do
33
+ # expect(@player.score).to eq(@player.health + @player.name.length)
34
+ # end
35
+
36
+ it "computes points correctly" do
37
+ @player.found_treasure(Treasure.new(:hammer, 50))
38
+ @player.found_treasure(Treasure.new(:hammer, 50))
39
+ expect(@player.points).to eq(100)
40
+ end
41
+
42
+ it "computes a score as the sum of its health and points" do
43
+ @player.found_treasure(Treasure.new(:hammer, 50))
44
+ @player.found_treasure(Treasure.new(:hammer, 50))
45
+ expect(@player.score).to eq(250)
46
+ end
47
+
48
+ it "increases health by 15 when w00ted" do
49
+ @player.w00t
50
+ expect(@player.health).to eq(@initial_health+15)
51
+ end
52
+
53
+ it "decreases health by 10 when blammed" do
54
+ @player.blam
55
+ expect(@player.health).to eq(@initial_health-10)
56
+ end
57
+
58
+ it "has a found_treasures attribute" do
59
+ expect(@player.found_treasures).not_to eq(nil)
60
+ end
61
+
62
+ it "returns a hash for found_treasures attribute" do
63
+ expect(@player.found_treasures.class).to eq(Hash.new.class)
64
+ end
65
+
66
+ it "finds treasures" do
67
+ treasure = TreasureTrove.random
68
+ @player.found_treasure(treasure)
69
+ expect(@player.found_treasures[treasure.name]).to eq(treasure.points)
70
+ end
71
+
72
+ it "yields each found treasure and its total points" do
73
+ @player.found_treasure(Treasure.new(:skillet, 100))
74
+ @player.found_treasure(Treasure.new(:skillet, 100))
75
+ @player.found_treasure(Treasure.new(:hammer, 50))
76
+ @player.found_treasure(Treasure.new(:bottle, 5))
77
+ @player.found_treasure(Treasure.new(:bottle, 5))
78
+ @player.found_treasure(Treasure.new(:bottle, 5))
79
+ @player.found_treasure(Treasure.new(:bottle, 5))
80
+ @player.found_treasure(Treasure.new(:bottle, 5))
81
+ yielded = []
82
+
83
+ @player.each_found_treasure do |treasure|
84
+ yielded << treasure
85
+ end
86
+ # yielded.should == [
87
+ # Treasure.new(:skillet, 200),
88
+ # Treasure.new(:hammer, 50),
89
+ # Treasure.new(:bottle, 25)
90
+ # ]
91
+
92
+ expect(yielded).to eq( [
93
+ Treasure.new(:skillet, 200),
94
+ Treasure.new(:hammer, 50),
95
+ Treasure.new(:bottle, 25)
96
+ ])
97
+ end
98
+
99
+ it "creates a Player from a csv file line" do
100
+ line = "Jack,20"
101
+ expect(Player.from_csv(line)).to eq(Player.new("Jack",20))
102
+ end
103
+
104
+
105
+ context "with initial health of 150" do
106
+
107
+ before do
108
+ @initial_health = 150
109
+ @player = player = Player.new("larry", @initial_health)
110
+ end
111
+
112
+ it "has a strong status" do
113
+ # expect(@player.strong?).to eq(true)
114
+ expect(@player).to be_strong
115
+ # @player.should be_strong
116
+ end
117
+ end
118
+
119
+ context "with initial health of 100" do
120
+
121
+ before do
122
+ @initial_health = 100
123
+ @player = player = Player.new("larry", @initial_health)
124
+ end
125
+
126
+ it "has a strong status" do
127
+ expect(@player.strong?).to eq(false)
128
+ # expect(@player).to be_strong
129
+ # @player.should_not be_strong
130
+ end
131
+ end
132
+
133
+ context "in a collection of players" do
134
+ before do
135
+ @player1 = Player.new("moe", 100)
136
+ @player2 = Player.new("larry", 200)
137
+ @player3 = Player.new("curly", 300)
138
+ @players = [@player1, @player2, @player3]
139
+ end
140
+ it "is sorted by decreasing score" do
141
+ # @players.sort.should == [@player3, @player2, @player1]
142
+ expect(@players.sort).to eq([@player3, @player2, @player1])
143
+ end
144
+ end
145
+
146
+ context "which got a hammer and a crowbar" do
147
+ before do
148
+ @player = Player.new("moe", 100)
149
+ treasure = TreasureTrove::TREASURES[2]
150
+ @player.found_treasure(treasure)
151
+ treasure = TreasureTrove::TREASURES[5]
152
+ @player.found_treasure(treasure)
153
+ end
154
+
155
+ it "has a hammer and a crowbar" do
156
+ expect(@player.found_treasures.keys.include?(:hammer) && @player.found_treasures.keys.include?(:crowbar)).to eq(true)
157
+ end
158
+
159
+ it "has 450 points grand (hammer = 50; crowbar = 400)" do
160
+ expect(@player.points).to eq(450)
161
+ end
162
+ end
163
+
164
+ end
165
+ end
@@ -0,0 +1,8 @@
1
+ RSpec.configure do |config|
2
+ config.expect_with :rspec do |c|
3
+ c.syntax = [:should, :expect]
4
+ end
5
+ config.mock_with :rspec do |c|
6
+ c.syntax = [:should, :expect]
7
+ end
8
+ end
@@ -0,0 +1,65 @@
1
+ require 'studio_game/treasure_trove'
2
+ # require 'studio_game/spec_helper'
3
+
4
+ module StudioGame
5
+ describe Treasure do
6
+
7
+ before do
8
+ @treasure = Treasure.new(:hammer, 50)
9
+ end
10
+
11
+ it "has a name attribute" do
12
+ expect(@treasure.name).to eq(:hammer)
13
+ # @treasure.name.should == :hammer
14
+ end
15
+
16
+ it "has a points attribute" do
17
+ # @treasure.points.should == 50
18
+ expect(@treasure.points).to eq(50)
19
+ end
20
+
21
+ end
22
+
23
+ describe TreasureTrove do
24
+
25
+ it "has six treasures" do
26
+ # TreasureTrove::TREASURES.size.should == 6
27
+ expect(TreasureTrove::TREASURES.size).to eq(6)
28
+ end
29
+
30
+ it "has a pie worth 5 points" do
31
+ # TreasureTrove::TREASURES[0].should == Treasure.new(:pie, 5)
32
+ expect(TreasureTrove::TREASURES[0]).to eq(Treasure.new(:pie, 5))
33
+ end
34
+
35
+ it "has a bottle worth 25 points" do
36
+ # TreasureTrove::TREASURES[1].should == Treasure.new(:bottle, 25)
37
+ expect(TreasureTrove::TREASURES[1]).to eq(Treasure.new(:bottle, 25))
38
+ end
39
+
40
+ it "has a hammer worth 50 points" do
41
+ # TreasureTrove::TREASURES[2].should == Treasure.new(:hammer, 50)
42
+ expect(TreasureTrove::TREASURES[2]).to eq(Treasure.new(:hammer, 50))
43
+ end
44
+
45
+ it "has a skillet worth 100 points" do
46
+ # TreasureTrove::TREASURES[3].should == Treasure.new(:skillet, 100)
47
+ expect(TreasureTrove::TREASURES[3]).to eq(Treasure.new(:skillet, 100))
48
+ end
49
+
50
+ it "has a broomstick worth 200 points" do
51
+ # TreasureTrove::TREASURES[4].should == Treasure.new(:broomstick, 200)
52
+ expect(TreasureTrove::TREASURES[4]).to eq(Treasure.new(:broomstick, 200))
53
+ end
54
+
55
+ it "has a crowbar worth 400 points" do
56
+ # TreasureTrove::TREASURES[5].should == Treasure.new(:crowbar, 400)
57
+ expect(TreasureTrove::TREASURES[5]).to eq(Treasure.new(:crowbar, 400))
58
+ end
59
+
60
+ it "gets a valid treasure" do
61
+ expect(TreasureTrove::TREASURES.include?(TreasureTrove::random)).to eq(true)
62
+ end
63
+
64
+ end
65
+ end
metadata ADDED
@@ -0,0 +1,88 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mfp_studio_game
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Marcos Parreiras
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-09-16 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: This is the project got from the Pragmatic Studio Ruby classes and exercises.
28
+ email: marcosfparreiras@gmail.com
29
+ executables:
30
+ - studio_game
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - LICENSE
35
+ - README
36
+ - bin/high_scores.txt
37
+ - bin/my_favorite_players.csv
38
+ - bin/players.csv
39
+ - bin/studio_game
40
+ - lib/studio_game/auditable.rb
41
+ - lib/studio_game/berserk_player.rb
42
+ - lib/studio_game/clumsy_player.rb
43
+ - lib/studio_game/die.rb
44
+ - lib/studio_game/game.rb
45
+ - lib/studio_game/game_turn.rb
46
+ - lib/studio_game/loaded_die.rb
47
+ - lib/studio_game/playable.rb
48
+ - lib/studio_game/player.rb
49
+ - lib/studio_game/treasure_trove.rb
50
+ - spec/studio_game/berserk_player_spec.rb
51
+ - spec/studio_game/clumsy_player_spec.rb
52
+ - spec/studio_game/die_spec.rb
53
+ - spec/studio_game/game_spec.rb
54
+ - spec/studio_game/player_spec.rb
55
+ - spec/studio_game/spec_helper.rb
56
+ - spec/studio_game/treasure_trove_spec.rb
57
+ homepage: ''
58
+ licenses:
59
+ - MIT
60
+ metadata: {}
61
+ post_install_message:
62
+ rdoc_options: []
63
+ require_paths:
64
+ - lib
65
+ required_ruby_version: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '1.9'
70
+ required_rubygems_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ requirements: []
76
+ rubyforge_project:
77
+ rubygems_version: 2.4.5
78
+ signing_key:
79
+ specification_version: 4
80
+ summary: game application as a learning ruby program
81
+ test_files:
82
+ - spec/studio_game/berserk_player_spec.rb
83
+ - spec/studio_game/die_spec.rb
84
+ - spec/studio_game/spec_helper.rb
85
+ - spec/studio_game/game_spec.rb
86
+ - spec/studio_game/player_spec.rb
87
+ - spec/studio_game/treasure_trove_spec.rb
88
+ - spec/studio_game/clumsy_player_spec.rb