studio_game_trevlore 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
+ SHA256:
3
+ metadata.gz: e453998e6d88913b18846022578a689ddb06d44876849cb1741cb4137040b20c
4
+ data.tar.gz: 5f70036ee608456fdcb3bf239e7d5a0091957fda2d31cae6a84d432ca151cc54
5
+ SHA512:
6
+ metadata.gz: a9da01ff05e1f059ed5474943c89cd404a47511153f14554f835f259f572376b612d43c5103a6b25ed668aeb6ef4a7ed785057ea3a0459948724c680858fa62e
7
+ data.tar.gz: 7bfb860729a1143cf2565ad08041cc2bcea3db699fb9b77ef72367473a94bd646afa8fd51b5a3fb7ddf4f7970056d4526bff90b0ed7756a2306ea64e2f99499b
data/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2019 Trevor Storey
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
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
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 THE
19
+ SOFTWARE.
data/README ADDED
@@ -0,0 +1 @@
1
+ A simple random game, made from The Pragmatic Studio's Ruby course
@@ -0,0 +1,6 @@
1
+ Knuckleheads High Scores:
2
+ Klutz............... 195
3
+ Curly............... 165
4
+ Moe................. 115
5
+ Larry............... 100
6
+ Berserker........... 65
@@ -0,0 +1,3 @@
1
+ Alvin,100
2
+ Simon,60
3
+ Theo,125
@@ -0,0 +1,42 @@
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
+ require_relative '../lib/studio_game/player'
7
+
8
+ knuckleheads = StudioGame::Game.new("Knuckleheads")
9
+ player1 = StudioGame::Player.new('moe')
10
+ player2 = StudioGame::Player.new('larry', 60)
11
+ player3 = StudioGame::Player.new('curly', 125)
12
+ klutz = StudioGame::ClumsyPlayer.new("klutz", 105, 3)
13
+ berserker = StudioGame::BerserkPlayer.new("berserker", 50)
14
+ knuckleheads.add_player(player1)
15
+ knuckleheads.add_player(player2)
16
+ knuckleheads.add_player(player3)
17
+ knuckleheads.add_player(klutz)
18
+ knuckleheads.add_player(berserker)
19
+
20
+ # knuckleheads.load_players
21
+ # knuckleheads.load_players(ARGV.shift || 'players.csv')
22
+ default_player_file = File.join(File.dirname(__FILE__), 'players.csv')
23
+ knuckleheads.load_players(ARGV.shift || default_player_file)
24
+ # knuckleheads.play(10) do
25
+ # knuckleheads.total_points >= 2000
26
+ # end
27
+ # knuckleheads.print_stats
28
+
29
+ loop do
30
+ puts "\nHow many game rounds? ('quit' to exit)"
31
+ answer = gets.chomp.downcase
32
+ case answer
33
+ when /^\d+$/
34
+ knuckleheads.play(Integer(answer))
35
+ when 'quit', 'exit'
36
+ knuckleheads.print_stats
37
+ break
38
+ else
39
+ puts "Please enter a number or 'quit'"
40
+ end
41
+ end
42
+ knuckleheads.save_high_scores
@@ -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,37 @@
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
+ # if berserk?
22
+ # w00t
23
+ # else
24
+ # super
25
+ # end
26
+ berserk? ? w00t : super
27
+ end
28
+
29
+ end
30
+
31
+ if __FILE__ == $0
32
+ berserker = BerserkPlayer.new("berserker", 50)
33
+ 6.times { berserker.w00t }
34
+ 2.times { berserker.blam }
35
+ puts berserker.health
36
+ end
37
+ end
@@ -0,0 +1,42 @@
1
+ require_relative 'player'
2
+ require_relative 'treasure_trove'
3
+
4
+ module StudioGame
5
+ class ClumsyPlayer < Player
6
+ attr_reader :boost_factor
7
+ def initialize(name, health=100, boost_factor=1)
8
+ super(name, health)
9
+ @boost_factor = boost_factor
10
+ end
11
+
12
+ def found_treasure(treasure)
13
+ damaged_treasure = Treasure.new(treasure.name, treasure.points / 2)
14
+ super(damaged_treasure)
15
+ # points = treasure.points / 2.0
16
+ # @found_treasures[treasure.name] += points
17
+ # puts "#{@name} found a #{treasure.name} worth #{points} points."
18
+ # puts "#{@name}'s treasures: #{@found_treasures}"
19
+ end
20
+
21
+ def w00t
22
+ @boost_factor.times { super }
23
+ end
24
+ end
25
+
26
+ if __FILE__ == $0
27
+ clumsy = ClumsyPlayer.new("klutz")
28
+
29
+ hammer = Treasure.new(:hammer, 50)
30
+ clumsy.found_treasure(hammer)
31
+ clumsy.found_treasure(hammer)
32
+ clumsy.found_treasure(hammer)
33
+
34
+ crowbar = Treasure.new(:crowbar, 400)
35
+ clumsy.found_treasure(crowbar)
36
+
37
+ clumsy.each_found_treasure do |treasure|
38
+ puts "#{treasure.points} total #{treasure.name} points"
39
+ end
40
+ puts "#{clumsy.points} grand total points"
41
+ end
42
+ 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
+ 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,107 @@
1
+ # require 'csv'
2
+ require_relative 'player'
3
+ require_relative 'die'
4
+ require_relative 'game_turn'
5
+ require_relative 'treasure_trove'
6
+
7
+ module StudioGame
8
+ class Game
9
+ attr_reader :title
10
+ def initialize(title)
11
+ @title = title
12
+ @players = []
13
+ end
14
+
15
+ def add_player(player)
16
+ @players << player
17
+ end
18
+
19
+ def load_players(from_file)
20
+ File.readlines(from_file).each do |line|
21
+ add_player(Player.from_csv(line))
22
+ end
23
+ # CSV.foreach(from_file) do |row|
24
+ # player = Player.new(row[0], Integer(row[1]))
25
+ # add_player(player)
26
+ # end
27
+ end
28
+
29
+ def play(rounds)
30
+ puts "There are #{@players.size} players in #{@title}:"
31
+
32
+ @players.each do |player|
33
+ puts player
34
+ end
35
+
36
+ treasures = TreasureTrove::TREASURES
37
+ puts "\nThere are #{treasures.size} treasures to be found:"
38
+ treasures.each do |treasure|
39
+ puts "A #{treasure.name} is worth #{treasure.points} points"
40
+ end
41
+
42
+ 1.upto(rounds) do |round_num|
43
+ if block_given?
44
+ break if yield
45
+ end
46
+ puts "\nRound #{round_num}:"
47
+
48
+ @players.each do |player|
49
+ GameTurn.take_turn(player)
50
+ puts player
51
+ end
52
+ end
53
+ end
54
+
55
+ def total_points
56
+ @players.reduce(0) { |sum, player| sum += player.points }
57
+ end
58
+
59
+ def print_players_stats(strength, players)
60
+ puts "\n#{players.size} #{strength} players:"
61
+ players.each do |player|
62
+ puts "#{player.name} (#{player.health})"
63
+ end
64
+ end
65
+
66
+ def print_stats
67
+ sorted_players = @players.sort
68
+ # sorted_players = @players.sort { |a, b| b.score <=> a.score }
69
+ strongs, wimpys = sorted_players.partition { |p| p.strong? }
70
+
71
+ puts "\n#{@title.capitalize} Statistics:"
72
+
73
+ print_players_stats('strong', strongs)
74
+ print_players_stats('wimpy', wimpys)
75
+
76
+ sorted_players.each do |player|
77
+ puts "\n#{player.name}'s point totals:"
78
+ player.each_found_treasure do |treasure|
79
+ puts "#{treasure.points} total #{treasure.name} points"
80
+ end
81
+ puts "#{player.points} grand total points"
82
+ end
83
+
84
+ puts "\n#{title.capitalize} High Scores"
85
+ sorted_players.each do |player|
86
+ puts high_score_entry(player)
87
+ end
88
+
89
+ puts "\n#{total_points} total points from treasures found"
90
+ end
91
+
92
+ def save_high_scores(to_file="high_scores.txt")
93
+ sorted_players = @players.sort
94
+ File.open(to_file, "w") do |file|
95
+ file.puts "#{@title} High Scores:"
96
+ sorted_players.each do |player|
97
+ file.puts high_score_entry(player)
98
+ end
99
+ end
100
+ end
101
+
102
+ def high_score_entry(player)
103
+ "#{player.name.ljust(20, '.')} #{player.score}"
104
+ end
105
+
106
+ end
107
+ end
@@ -0,0 +1,24 @@
1
+ require_relative 'die'
2
+ require_relative 'loaded_die'
3
+ require_relative 'player'
4
+ require_relative 'treasure_trove'
5
+
6
+ module StudioGame
7
+ module GameTurn
8
+ def self.take_turn(player)
9
+ die = Die.new
10
+ # die = LoadedDie.new
11
+ number_rolled = die.roll
12
+
13
+ case number_rolled
14
+ when 5..6
15
+ player.w00t
16
+ when 3..4
17
+ puts "#{player.name} was skipped."
18
+ when 1..2
19
+ player.blam
20
+ end
21
+ player.found_treasure(TreasureTrove.random)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,15 @@
1
+ require_relative 'auditable'
2
+
3
+ module StudioGame
4
+ class LoadedDie
5
+ include Auditable
6
+ attr_reader :number
7
+
8
+ def roll
9
+ numbers = [1, 1, 2, 5, 6, 6]
10
+ @number = numbers.sample
11
+ audit
12
+ @number
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,18 @@
1
+
2
+ module StudioGame
3
+ module Playable
4
+ def blam
5
+ self.health -= 10
6
+ puts "#{name} got blammed!"
7
+ end
8
+
9
+ def w00t
10
+ self.health += 15
11
+ puts "#{name} got w00ted!"
12
+ end
13
+
14
+ def strong?
15
+ health > 100
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,63 @@
1
+ require_relative 'treasure_trove'
2
+ require_relative 'playable'
3
+
4
+ module StudioGame
5
+ class Player
6
+ include Playable
7
+ attr_accessor :name, :health
8
+ # attr_reader :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 score
17
+ points + @health
18
+ end
19
+
20
+ def name=(new_name)
21
+ @name = new_name.capitalize
22
+ end
23
+
24
+ def to_s
25
+ "I'm #{@name} with health = #{@health}, points = #{points} and score = #{score}."
26
+ end
27
+
28
+ def <=>(other)
29
+ other.score <=> score
30
+ end
31
+
32
+ def found_treasure(treasure)
33
+ @found_treasures[treasure.name] += treasure.points
34
+ puts "#{@name} found a #{treasure.name} worth #{treasure.points} points."
35
+ puts "#{@name}'s treasures: #{@found_treasures}"
36
+ end
37
+
38
+ def points
39
+ @found_treasures.values.reduce(0, :+)
40
+ end
41
+
42
+ def each_found_treasure
43
+ @found_treasures.each do |name, points|
44
+ yield Treasure.new(name, points)
45
+ end
46
+ end
47
+
48
+ def self.from_csv(line)
49
+ name, health = line.split(',')
50
+ Player.new(name, Integer(health))
51
+ end
52
+ end
53
+
54
+ if __FILE__ == $0
55
+ player = Player.new('moe')
56
+ puts player.name
57
+ puts player.health
58
+ player.w00t
59
+ puts player.health
60
+ player.blam
61
+ puts player.health
62
+ end
63
+ end
@@ -0,0 +1,18 @@
1
+ module StudioGame
2
+ Treasure = Struct.new(:name, :points)
3
+
4
+ module TreasureTrove
5
+ TREASURES = [
6
+ Treasure.new(:pie, 5),
7
+ Treasure.new(:bottle, 25),
8
+ Treasure.new(:hammer, 50),
9
+ Treasure.new(:skillet, 100),
10
+ Treasure.new(:broomstick, 200),
11
+ Treasure.new(:crowbar, 400)
12
+ ]
13
+
14
+ def self.random
15
+ TREASURES.sample
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,38 @@
1
+ require_relative 'spec_helper'
2
+ require 'studio_game/berserk_player'
3
+
4
+ module StudioGame
5
+ describe BerserkPlayer do
6
+
7
+ before do
8
+ @initial_health = 50
9
+ @player = BerserkPlayer.new("berserker", @initial_health)
10
+ end
11
+
12
+ it "does not go berserk when w00ted up to 5 times" do
13
+ 1.upto(5) { @player.w00t }
14
+
15
+ @player.berserk?.should be_falsey
16
+
17
+ # or if using Rspec 3.0:
18
+ # @player.berserk?.should be_falsey
19
+ end
20
+
21
+ it "goes berserk when w00ted more than 5 times" do
22
+ 1.upto(6) { @player.w00t }
23
+
24
+ @player.berserk?.should be_truthy
25
+
26
+ # or if using Rspec 3.0:
27
+ # @player.berserk?.should be_truthy
28
+ end
29
+
30
+ it "gets w00ted instead of blammed when it's gone berserk" do
31
+ 1.upto(6) { @player.w00t }
32
+ 1.upto(2) { @player.blam }
33
+
34
+ @player.health.should == @initial_health + (8 * 15)
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,52 @@
1
+ require_relative 'spec_helper'
2
+ require 'studio_game/clumsy_player'
3
+
4
+ module StudioGame
5
+ describe ClumsyPlayer do
6
+ before do
7
+ @player = ClumsyPlayer.new("klutz")
8
+ end
9
+
10
+ it "only gets half the point value for each treasure" do
11
+ @player.points.should == 0
12
+
13
+ hammer = Treasure.new(:hammer, 50)
14
+ @player.found_treasure(hammer)
15
+ @player.found_treasure(hammer)
16
+ @player.found_treasure(hammer)
17
+
18
+ @player.points.should == 75
19
+
20
+ crowbar = Treasure.new(:crowbar, 400)
21
+ @player.found_treasure(crowbar)
22
+
23
+ @player.points.should == 275
24
+
25
+ yielded = []
26
+ @player.each_found_treasure do |treasure|
27
+ yielded << treasure
28
+ end
29
+
30
+ yielded.should == [Treasure.new(:hammer, 75), Treasure.new(:crowbar, 200)]
31
+ end
32
+
33
+ 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
+ @player.boost_factor.should == 5
42
+ end
43
+
44
+ it "gets boost factor number of w00ts when w00ted" do
45
+ @player.w00t
46
+
47
+ @player.health.should == @initial_health + (15 * @boost_factor)
48
+ end
49
+ end
50
+
51
+ end
52
+ end
@@ -0,0 +1,59 @@
1
+ require_relative 'spec_helper'
2
+ require 'studio_game/game'
3
+ require 'studio_game/game_turn'
4
+
5
+ module StudioGame
6
+ describe Game do
7
+
8
+ before do
9
+ @game = Game.new("Knuckleheads")
10
+
11
+ @initial_health = 100
12
+ @player = Player.new("moe", @initial_health)
13
+
14
+ @game.add_player(@player)
15
+ end
16
+
17
+ it "increases health with a high roll(5 or 6)" do
18
+ allow_any_instance_of(Die).to receive(:roll).and_return(5)
19
+ @game.play(2)
20
+ @player.health.should == @initial_health + (15 * 2)
21
+ end
22
+
23
+ it "skips health modification with a medium roll(3 or 4)" do
24
+ allow_any_instance_of(Die).to receive(:roll).and_return(3)
25
+ @game.play(2)
26
+ @player.health.should == @initial_health
27
+ end
28
+
29
+ it "decreases health with a low roll(1 or 2)" do
30
+ allow_any_instance_of(Die).to receive(:roll).and_return(1)
31
+ @game.play(2)
32
+ @player.health.should == @initial_health - (10 * 2)
33
+ end
34
+
35
+ it "assigns a treasure for points during a player's turn" do
36
+ game = Game.new("Knuckleheads")
37
+ player = Player.new("moe")
38
+ game.add_player(player)
39
+ game.play(1)
40
+ player.points.should_not be_zero
41
+ end
42
+
43
+ it "computes total points as the sum of all player points" do
44
+ game = Game.new("Knuckleheads")
45
+
46
+ player1 = Player.new("moe")
47
+ player2 = Player.new("larry")
48
+
49
+ game.add_player(player1)
50
+ game.add_player(player2)
51
+
52
+ player1.found_treasure(Treasure.new(:hammer, 50))
53
+ player1.found_treasure(Treasure.new(:hammer, 50))
54
+ player2.found_treasure(Treasure.new(:crowbar, 400))
55
+
56
+ game.total_points.should == 500
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,126 @@
1
+ require_relative 'spec_helper'
2
+ require 'studio_game/player'
3
+ require 'studio_game/treasure_trove'
4
+
5
+ module StudioGame
6
+ describe Player do
7
+ before do
8
+ $stdout = StringIO.new
9
+ @initial_health = 150
10
+ @player = Player.new("larry", @initial_health)
11
+ end
12
+
13
+ it "has a capitalized name" do
14
+ @player.name.should == "Larry"
15
+ end
16
+
17
+ it "has an initial health" do
18
+ @player.health.should == 150
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
+ @player.to_s.should == "I'm Larry with health = 150, points = 100 and score = 250."
25
+ end
26
+
27
+ it "computes a score as the sum of its health and points" do
28
+ @player.found_treasure(Treasure.new(:hammer, 50))
29
+ @player.found_treasure(Treasure.new(:hammer, 50))
30
+
31
+ @player.score.should == 250
32
+ end
33
+
34
+ it "increases health by 15 when w00ted" do
35
+ @player.w00t
36
+ @player.health.should == @initial_health + 15
37
+ end
38
+
39
+ it "decreases health by 10 when blammed" do
40
+ @player.blam
41
+ @player.health.should == @initial_health - 10
42
+ end
43
+
44
+ it "computes points as the sum of all treasure points" do
45
+ @player.points.should == 0
46
+
47
+ @player.found_treasure(Treasure.new(:hammer, 50))
48
+
49
+ @player.points.should == 50
50
+
51
+ @player.found_treasure(Treasure.new(:crowbar, 400))
52
+
53
+ @player.points.should == 450
54
+
55
+ @player.found_treasure(Treasure.new(:hammer, 50))
56
+
57
+ @player.points.should == 500
58
+ end
59
+
60
+ it "yields each found treasure and its total points" do
61
+ @player.found_treasure(Treasure.new(:skillet, 100))
62
+ @player.found_treasure(Treasure.new(:skillet, 100))
63
+ @player.found_treasure(Treasure.new(:hammer, 50))
64
+ @player.found_treasure(Treasure.new(:bottle, 5))
65
+ @player.found_treasure(Treasure.new(:bottle, 5))
66
+ @player.found_treasure(Treasure.new(:bottle, 5))
67
+ @player.found_treasure(Treasure.new(:bottle, 5))
68
+ @player.found_treasure(Treasure.new(:bottle, 5))
69
+
70
+ yielded = []
71
+ @player.each_found_treasure do |treasure|
72
+ yielded << treasure
73
+ end
74
+
75
+ yielded.should == [
76
+ Treasure.new(:skillet, 200),
77
+ Treasure.new(:hammer, 50),
78
+ Treasure.new(:bottle, 25)
79
+ ]
80
+ end
81
+
82
+ it "can be created from a CSV string" do
83
+ player = Player.from_csv("larry,150")
84
+
85
+ player.name.should == "Larry"
86
+ player.health.should == 150
87
+ end
88
+
89
+ context "with a health greater than 100" do
90
+ before do
91
+ @initial_health = 150
92
+ @player = Player.new('larry', @initial_health)
93
+ end
94
+
95
+ it "is strong" do
96
+ # @player.strong?.should be_truthy
97
+ @player.should be_strong
98
+ end
99
+ end
100
+
101
+ context "with a health less than or equal to 100" do
102
+ before do
103
+ @initial_health = 100
104
+ @player = Player.new('moe', @initial_health)
105
+ end
106
+
107
+ it "is wimpy" do
108
+ @player.should_not be_strong
109
+ end
110
+ end
111
+
112
+ context "in a collection of players" do
113
+ before do
114
+ @player1 = Player.new("moe", 100)
115
+ @player2 = Player.new("larry", 200)
116
+ @player3 = Player.new("curly", 300)
117
+
118
+ @players = [@player1, @player2, @player3]
119
+ end
120
+
121
+ it "is sorted by decreasing score" do
122
+ @players.sort.should == [@player3, @player2, @player1]
123
+ end
124
+ end
125
+ end
126
+ 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,54 @@
1
+ require_relative 'spec_helper'
2
+ require 'studio_game/treasure_trove'
3
+
4
+ module StudioGame
5
+ describe Treasure do
6
+ before do
7
+ @treasure = Treasure.new(:hammer, 50)
8
+ end
9
+
10
+ it "has a name attribute" do
11
+ @treasure.name.should == :hammer
12
+ end
13
+
14
+ it "has a points attribute" do
15
+ @treasure.points.should == 50
16
+ end
17
+ end
18
+
19
+ describe Treasure do
20
+ it "has six treasures" do
21
+ TreasureTrove::TREASURES.size.should == 6
22
+ end
23
+
24
+ it "has a pie worth 5 points" do
25
+ TreasureTrove::TREASURES[0].should == Treasure.new(:pie, 5)
26
+ end
27
+
28
+ it "has a bottle worth 25 points" do
29
+ TreasureTrove::TREASURES[1].should == Treasure.new(:bottle, 25)
30
+ end
31
+
32
+ it "has a hammer worth 50 points" do
33
+ TreasureTrove::TREASURES[2].should == Treasure.new(:hammer, 50)
34
+ end
35
+
36
+ it "has a skillet worth 100 points" do
37
+ TreasureTrove::TREASURES[3].should == Treasure.new(:skillet, 100)
38
+ end
39
+
40
+ it "has a broomstick worth 200 points" do
41
+ TreasureTrove::TREASURES[4].should == Treasure.new(:broomstick, 200)
42
+ end
43
+
44
+ it "has a crowbar worth 400 points" do
45
+ TreasureTrove::TREASURES[5].should == Treasure.new(:crowbar, 400)
46
+ end
47
+
48
+ it "returns a random treasure" do
49
+ treasure = TreasureTrove.random
50
+
51
+ TreasureTrove::TREASURES.should include(treasure)
52
+ end
53
+ end
54
+ end
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: studio_game_trevlore
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Trevor Storey
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-11-12 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: 2.8.0
20
+ - - "~>"
21
+ - !ruby/object:Gem::Version
22
+ version: '2.8'
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 2.8.0
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '2.8'
33
+ description: A simple random game, made from The Pragmatic Studio's Ruby course
34
+ email: trevorstorey23@gmail.com
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/berserk_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/berserk_player_spec.rb
56
+ - spec/studio_game/clumsy_player_spec.rb
57
+ - spec/studio_game/game_spec.rb
58
+ - spec/studio_game/player_spec.rb
59
+ - spec/studio_game/spec_helper.rb
60
+ - spec/studio_game/treasure_trove_spec.rb
61
+ homepage: https://www.linkedin.com/in/trevorstorey/
62
+ licenses:
63
+ - MIT
64
+ metadata: {}
65
+ post_install_message:
66
+ rdoc_options: []
67
+ require_paths:
68
+ - lib
69
+ required_ruby_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '1.9'
74
+ required_rubygems_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ requirements: []
80
+ rubygems_version: 3.0.6
81
+ signing_key:
82
+ specification_version: 4
83
+ summary: A simple random game
84
+ test_files:
85
+ - spec/studio_game/spec_helper.rb
86
+ - spec/studio_game/clumsy_player_spec.rb
87
+ - spec/studio_game/treasure_trove_spec.rb
88
+ - spec/studio_game/berserk_player_spec.rb
89
+ - spec/studio_game/player_spec.rb
90
+ - spec/studio_game/game_spec.rb