vic_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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 286f9a5ad2d334e716dae0bec8983091a5cfa37649d4f8481444906ab92b5d22
4
+ data.tar.gz: 8a55b17a2f8caaf8be6b44d9170d531d2449bfa1836122de05af21c19966b3b0
5
+ SHA512:
6
+ metadata.gz: e3ec77cc862d7e8b6d7b9155aa4288adc3a5176b1cae53447ff50725b1e9637ab707f942b33595629435ca74ebd33771bd672159ab60d9778214d825ab7f309b
7
+ data.tar.gz: b6fdf1360301a8ffb42f58a367c7bb689f9721768b3d50bc9195ef0702c4d934dbcc131f0a02643a3ed4adb5cbe5bb474176e786b50ccc06ab7e9c5f93f08f8c
data/LICENCE ADDED
@@ -0,0 +1 @@
1
+ Just use it!
data/README ADDED
@@ -0,0 +1 @@
1
+ Game implemented as part of the PragmaticStudio Ruby course.
@@ -0,0 +1,3 @@
1
+ Alex,100
2
+ Vic,60
3
+ Pestunia,125
data/bin/players.csv ADDED
@@ -0,0 +1,3 @@
1
+ Alvin,100
2
+ Simon,60
3
+ Theo,125
data/bin/studio_game ADDED
@@ -0,0 +1,32 @@
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
+ knuckleheads = StudioGame::Game.new("Knuckleheads")
8
+
9
+ default_players_file = File.join(File.dirname(__FILE__), "players.csv")
10
+ knuckleheads.load_players(ARGV.shift || default_players_file)
11
+
12
+ klutz = StudioGame::ClumsyPlayer.new("klutz", 105)
13
+ knuckleheads.add_player(klutz)
14
+
15
+ berserker = StudioGame::BerserkPlayer.new("berserker", 50)
16
+ knuckleheads.add_player(berserker)
17
+
18
+ loop do
19
+ puts "\nHow many game rounds? ('quit' to exit)"
20
+ answer = gets.chomp.downcase
21
+ case answer
22
+ when /^\d+$/
23
+ knuckleheads.play(answer.to_i)
24
+ when 'quit', 'exit', 'q', 'e'
25
+ knuckleheads.print_stats
26
+ break
27
+ else
28
+ puts "Please enter a number or 'quit'"
29
+ end
30
+ end
31
+
32
+ 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,31 @@
1
+ require_relative 'player'
2
+
3
+ module StudioGame
4
+ class BerserkPlayer < Player
5
+ def initialize(name, health=100)
6
+ super(name, health)
7
+ @w00t_count = 0
8
+ end
9
+
10
+ def berserk?
11
+ @w00t_count > 5
12
+ end
13
+
14
+ def w00t
15
+ super
16
+ @w00t_count +=1
17
+ puts "#{@name} is berserk!" if berserk?
18
+ end
19
+
20
+ def blam
21
+ berserk? ? w00t : super
22
+ end
23
+ end
24
+
25
+ if __FILE__ == $0
26
+ berserker = BerserkPlayer.new("berserker", 50)
27
+ 6.times { berserker.w00t }
28
+ 2.times { berserker.blam }
29
+ puts berserker.health
30
+ end
31
+ end
@@ -0,0 +1,40 @@
1
+ require_relative 'player'
2
+ require_relative 'treasure_trove'
3
+
4
+ module StudioGame
5
+ class ClumsyPlayer < Player
6
+
7
+ attr_accessor :boost_factor
8
+
9
+ def initialize(name, health=100, boost_factor=1)
10
+ super(name, health)
11
+ @boost_factor = boost_factor
12
+ end
13
+
14
+ def found_treasure(treasure)
15
+ damaged_treasure = Treasure.new(treasure.name, treasure.points / 2.0)
16
+ super(damaged_treasure)
17
+ end
18
+
19
+ def w00t
20
+ @boost_factor.times { super }
21
+ end
22
+ end
23
+
24
+ if __FILE__ == $0
25
+ clumsy = ClumsyPlayer.new("klutz", 105)
26
+
27
+ hammer = Treasure.new(:hammer, 50)
28
+ clumsy.found_treasure(hammer)
29
+ clumsy.found_treasure(hammer)
30
+ clumsy.found_treasure(hammer)
31
+
32
+ crowbar = Treasure.new(:crowbar, 400)
33
+ clumsy.found_treasure(crowbar)
34
+
35
+ clumsy.each_found_treasure do |treasure|
36
+ puts "#{treasure.points} total #{treasure.name} points"
37
+ end
38
+ puts "#{clumsy.points} grand total points"
39
+ end
40
+ end
@@ -0,0 +1,19 @@
1
+ require_relative "auditable"
2
+
3
+ module StudioGame
4
+ class Die
5
+ include Auditable
6
+
7
+ attr_reader :number
8
+
9
+ def initialize
10
+ roll
11
+ end
12
+
13
+ def roll
14
+ @number = rand(1..6)
15
+ audit
16
+ @number
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,128 @@
1
+ require_relative 'player'
2
+ require_relative 'die'
3
+ require_relative 'game_turn'
4
+ require_relative 'treasure_trove'
5
+ require 'csv'
6
+
7
+ module StudioGame
8
+ class Game
9
+ attr_reader :name
10
+
11
+ def initialize(title)
12
+ @title = title
13
+ @players = []
14
+ end
15
+
16
+ def add_player(player)
17
+ @players << player
18
+ end
19
+
20
+ def play(rounds)
21
+ puts "There are #{@players.size} players in #{@title}: "
22
+
23
+ @players.each do |player|
24
+ puts player
25
+ end
26
+
27
+ treasures = TreasureTrove::TREASURES
28
+ puts "\nThere are #{treasures.size} treasures to be found:"
29
+ treasures.each do |treasure|
30
+ puts "A #{treasure.name} is worth #{treasure.points} points"
31
+ end
32
+
33
+ 1.upto(rounds) do |round|
34
+
35
+ if block_given?
36
+ break if yield
37
+ end
38
+
39
+ puts "\nRound #{round}:"
40
+ @players.each do |player|
41
+ GameTurn.take_turn(player)
42
+ puts player
43
+ end
44
+ end
45
+
46
+ end
47
+
48
+ def print_stats
49
+ strong_players, wimpy_players = @players.partition { |player| player.strong? }
50
+
51
+ puts "\n#{@title} Statistics:"
52
+
53
+ puts "\n#{strong_players.size} strong players:"
54
+ strong_players.each do |player|
55
+ print_name_and_health(player)
56
+ end
57
+
58
+ puts "\n#{wimpy_players.size} wimpy players:"
59
+ wimpy_players.each do |player|
60
+ print_name_and_health(player)
61
+ end
62
+
63
+ @players.sort.each do |player|
64
+ puts "\n#{player.name}'s point totals:"
65
+ player.each_found_treasure do |treasure|
66
+ puts "#{treasure.points} total #{treasure.name} points"
67
+ end
68
+ puts "#{player.points} grand total points"
69
+ end
70
+
71
+ puts "\n#{@title} High Scores:"
72
+ @players.sort.each do |player|
73
+ puts high_score_entry(player)
74
+ end
75
+ end
76
+
77
+ def to_s
78
+ "Game - #{@title}\n" +
79
+ "Players:\n" +
80
+ @players.join("\n")
81
+ end
82
+
83
+ def print_name_and_health(player)
84
+ puts "#{player.name} (#{player.health})"
85
+ end
86
+
87
+ def total_points
88
+ @players.reduce(0) { |sum, player| sum + player.points }
89
+ end
90
+
91
+ def load_players(from_file)
92
+ CSV.foreach(from_file) do |row|
93
+ player = Player.new(row[0], row[1].to_i)
94
+ add_player(player)
95
+ end
96
+ end
97
+
98
+ def save_high_scores(to_file="high_scores.txt")
99
+ File.open(to_file, "w") do |file|
100
+ file.puts "\n#{@title} High Scores:"
101
+ @players.sort.each do |player|
102
+ file.puts high_score_entry(player)
103
+ end
104
+ end
105
+ end
106
+
107
+ def high_score_entry(player)
108
+ formatted_name = player.name.ljust(20, '.')
109
+ "#{formatted_name} #{player.score}"
110
+ end
111
+
112
+ end
113
+
114
+ if __FILE__ == $0
115
+
116
+ game = Game.new("Boxingring")
117
+
118
+ player1 = Player.new("moe")
119
+ player2 = Player.new("larry", 60)
120
+ player3 = Player.new("curly", 125)
121
+
122
+ game.add_player(player1)
123
+ game.add_player(player2)
124
+ game.add_player(player3)
125
+
126
+ puts game
127
+ end
128
+ end
@@ -0,0 +1,22 @@
1
+ require_relative 'player'
2
+ require_relative 'die'
3
+ require_relative 'treasure_trove'
4
+
5
+ module StudioGame
6
+ module GameTurn
7
+ def self.take_turn(player)
8
+ die = Die.new
9
+ case die.roll
10
+ when 1..2
11
+ player.blam
12
+ when 3..4
13
+ puts "#{player.name} was skipped."
14
+ else
15
+ player.w00t
16
+ end
17
+
18
+ player.found_treasure(TreasureTrove.random)
19
+
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,16 @@
1
+ require_relative "auditable"
2
+
3
+ module StudioGame
4
+ class LoadedDie
5
+ include Auditable
6
+
7
+ attr_reader :number
8
+
9
+ def roll
10
+ numbers = [1, 1, 2, 5, 6, 6]
11
+ @number = numbers.sample
12
+ audit
13
+ @number
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ module StudioGame
2
+ module Playable
3
+ def w00t
4
+ self.health += 15
5
+ puts "#{self.name} got w00ted!"
6
+ end
7
+
8
+ def blam
9
+ self.health -= 10
10
+ puts "#{self.name} got blammed!"
11
+ end
12
+
13
+ def strong?
14
+ self.health > 100
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,59 @@
1
+ require_relative "playable"
2
+
3
+ module StudioGame
4
+ class Player
5
+
6
+ include Playable
7
+
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'm #{@name} with health = #{@health}, points = #{points}, and score = #{score}."
18
+ end
19
+
20
+ def score
21
+ @health + points
22
+ end
23
+
24
+ def <=>(other)
25
+ other.score <=> self.score
26
+ end
27
+
28
+ def found_treasure(treasure)
29
+ @found_treasures[treasure.name] += treasure.points
30
+ puts "#{@name} found a #{treasure.name} worth #{treasure.points} points."
31
+ end
32
+
33
+ def points
34
+ @found_treasures.values.reduce(0, :+)
35
+ end
36
+
37
+ def each_found_treasure
38
+ @found_treasures.each do |name, points|
39
+ yield Treasure.new(name, points)
40
+ end
41
+ end
42
+
43
+ def self.from_csv(player_data)
44
+ name, health = player_data
45
+ player = Player.new(name, Integer(health))
46
+ end
47
+
48
+ end
49
+
50
+ if __FILE__ == $0
51
+ player = Player.new("moe")
52
+ puts player.name
53
+ puts player.health
54
+ player.w00t
55
+ puts player.health
56
+ player.blam
57
+ puts player.health
58
+ end
59
+ 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,46 @@
1
+ require "studio_game/berserk_player"
2
+
3
+ module StudioGame
4
+ describe BerserkPlayer do
5
+
6
+ before do
7
+ $stdout = StringIO.new
8
+ @initial_health = 100
9
+ @player = BerserkPlayer.new("boris", @initial_health)
10
+ end
11
+
12
+ it "should not be berserk when created" do
13
+ @player.berserk?.should be_false
14
+ end
15
+
16
+ it "should not go berserk when w00t-ed 5 times or less" do
17
+ 5.times do
18
+ @player.w00t
19
+ @player.berserk?.should be_false
20
+ end
21
+ end
22
+
23
+ it "should go berserk when w00t-ed the 6th time" do
24
+ 6.times { @player.w00t }
25
+
26
+ @player.berserk?.should be_true
27
+ end
28
+
29
+ it "should remain berserk when w00t-ed more than 6 times" do
30
+ 8.times { @player.w00t }
31
+
32
+ @player.berserk?.should be_true
33
+ end
34
+
35
+ it "should w00t instead of blam he's gone berserk" do
36
+ # given the player has gone berserk
37
+ 6.times { @player.w00t }
38
+
39
+ # when
40
+ 2.times { @player.blam }
41
+
42
+ # then
43
+ @player.health.should == @initial_health + (8 * 15)
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,57 @@
1
+ require 'studio_game/clumsy_player'
2
+
3
+ module StudioGame
4
+ describe ClumsyPlayer do
5
+
6
+ context "when finds a new treasure" do
7
+
8
+ before do
9
+ $stdout = StringIO.new
10
+ @player = ClumsyPlayer.new("klutz")
11
+ end
12
+
13
+ it "only gets half of its points" do
14
+ @player.points.should == 0
15
+
16
+ hammer = Treasure.new(:hammer, 50)
17
+ @player.found_treasure(hammer)
18
+ @player.found_treasure(hammer)
19
+ @player.found_treasure(hammer)
20
+
21
+ @player.points.should == 75
22
+
23
+ crowbar = Treasure.new(:crowbar, 400)
24
+ @player.found_treasure(crowbar)
25
+
26
+ @player.points.should == 275
27
+
28
+ yielded = []
29
+ @player.each_found_treasure do |treasure|
30
+ yielded << treasure
31
+ end
32
+
33
+ yielded.should == [Treasure.new(:hammer, 75), Treasure.new(:crowbar, 200)]
34
+ end
35
+
36
+ end
37
+
38
+ context "with a boost factor" do
39
+ before do
40
+ @initial_health = 100
41
+ @boost_factor = 5
42
+ @player = ClumsyPlayer.new("klutz", @initial_health, @boost_factor)
43
+ end
44
+
45
+ it "has a boost factor" do
46
+ @player.boost_factor.should == 5
47
+ end
48
+
49
+ it "gets boost factor number of w00ts when w00ted" do
50
+ @player.w00t
51
+
52
+ @player.health.should == @initial_health + (15 * @boost_factor)
53
+ end
54
+ end
55
+
56
+ end
57
+ end
@@ -0,0 +1,68 @@
1
+ require 'studio_game/game'
2
+
3
+ module StudioGame
4
+ describe Game do
5
+
6
+ before do
7
+
8
+ $stdout = StringIO.new
9
+
10
+ @game = Game.new("Knuckleheads")
11
+
12
+ @initial_health = 100
13
+
14
+ @player = Player.new("moe", @initial_health)
15
+
16
+ @game.add_player(@player)
17
+ end
18
+
19
+ it "w00ts the player if a high number is rolled" do
20
+ Die.any_instance.stub(:roll).and_return(5)
21
+
22
+ # when
23
+ @game.play(2)
24
+
25
+ # then
26
+ @player.health.should == @initial_health + (15 * 2)
27
+ end
28
+
29
+ it "skips the player if a medium number is rolled" do
30
+ Die.any_instance.stub(:roll).and_return(3)
31
+
32
+ @game.play(2)
33
+
34
+ @player.health.should == @initial_health
35
+ end
36
+
37
+ it "blams the player if a low number is rolled" do
38
+ Die.any_instance.stub(:roll).and_return(1)
39
+
40
+ @game.play(2)
41
+
42
+ @player.health.should == @initial_health - (10 * 2)
43
+ end
44
+
45
+ it "assigns a treasure for points during a player's turn" do
46
+ @game.play(1)
47
+
48
+ @player.points.should_not be_zero
49
+ end
50
+
51
+ it "computes total points as the sum of all player points" do
52
+ game = Game.new("Knuckleheads")
53
+
54
+ player1 = Player.new("moe")
55
+ player2 = Player.new("larry")
56
+
57
+ game.add_player(player1)
58
+ game.add_player(player2)
59
+
60
+ player1.found_treasure(Treasure.new(:hammer, 50))
61
+ player1.found_treasure(Treasure.new(:hammer, 50))
62
+ player2.found_treasure(Treasure.new(:crowbar, 400))
63
+
64
+ game.total_points.should == 500
65
+ end
66
+
67
+ end
68
+ end
@@ -0,0 +1,117 @@
1
+ require 'studio_game/player'
2
+ require 'studio_game/treasure_trove'
3
+
4
+ module StudioGame
5
+ describe Player do
6
+
7
+ before do
8
+ $stdout = StringIO.new
9
+ @player = Player.new("larry", 150)
10
+ @initial_health = 150
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
+
25
+ @player.to_s.should == "I'm Larry with health = 150, points = 100, and score = 250."
26
+ end
27
+
28
+ it "increases health by 15 when w00ted" do
29
+ @player.w00t
30
+ @player.health.should == @initial_health + 15
31
+ end
32
+
33
+ it "decreases health by 10 when blammed" do
34
+ @player.blam
35
+ @player.health.should == @initial_health - 10
36
+ end
37
+
38
+ context "with a health greater than 100" do
39
+ before do
40
+ @player = Player.new("larry", 150)
41
+ end
42
+
43
+ it "is strong" do
44
+ @player.should be_strong
45
+ end
46
+ end
47
+
48
+ context "with a health of 100 or less" do
49
+ before do
50
+ @player = Player.new("larry", 100)
51
+ end
52
+
53
+ it "is wimpy" do
54
+ @player.should_not be_strong
55
+ end
56
+ end
57
+
58
+ context "in a collection of players" do
59
+ before do
60
+ @player1 = Player.new("moe", 100)
61
+ @player2 = Player.new("larry", 200)
62
+ @player3 = Player.new("curly", 300)
63
+
64
+ @players = [@player1, @player2, @player3]
65
+ end
66
+
67
+ it "is sorted by decreasing score" do
68
+ @players.sort.should == [@player3, @player2, @player1]
69
+ end
70
+ end
71
+
72
+ it "computes points as the sum of all treasure points" do
73
+ @player.points.should == 0
74
+
75
+ @player.found_treasure(Treasure.new(:hammer, 50))
76
+
77
+ @player.points.should == 50
78
+
79
+ @player.found_treasure(Treasure.new(:crowbar, 400))
80
+
81
+ @player.points.should == 450
82
+
83
+ @player.found_treasure(Treasure.new(:hammer, 50))
84
+
85
+ @player.points.should == 500
86
+ end
87
+
88
+ it "computes a score as the sum of its health and points" do
89
+ @player.found_treasure(Treasure.new(:hammer, 50))
90
+ @player.found_treasure(Treasure.new(:hammer, 50))
91
+
92
+ @player.score.should == 250
93
+ end
94
+
95
+ it "yields each found treasure and its total points" do
96
+ @player.found_treasure(Treasure.new(:skillet, 100))
97
+ @player.found_treasure(Treasure.new(:skillet, 100))
98
+ @player.found_treasure(Treasure.new(:hammer, 50))
99
+ @player.found_treasure(Treasure.new(:bottle, 5))
100
+ @player.found_treasure(Treasure.new(:bottle, 5))
101
+ @player.found_treasure(Treasure.new(:bottle, 5))
102
+ @player.found_treasure(Treasure.new(:bottle, 5))
103
+ @player.found_treasure(Treasure.new(:bottle, 5))
104
+
105
+ yielded = []
106
+ @player.each_found_treasure do |treasure|
107
+ yielded << treasure
108
+ end
109
+
110
+ yielded.should == [
111
+ Treasure.new(:skillet, 200),
112
+ Treasure.new(:hammer, 50),
113
+ Treasure.new(:bottle, 25)
114
+ ]
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,59 @@
1
+ require 'studio_game/treasure_trove'
2
+
3
+ module StudioGame
4
+ describe Treasure do
5
+
6
+ before do
7
+ @treasure = Treasure.new(:hammer, 50)
8
+ end
9
+
10
+ it "has a name attribute" do
11
+ @treasure.name.should == :hammer
12
+ end
13
+
14
+ it "has a points attribute" do
15
+ @treasure.points.should == 50
16
+ end
17
+
18
+ end
19
+
20
+ describe TreasureTrove do
21
+
22
+ it "has six treasures" do
23
+ TreasureTrove::TREASURES.size.should == 6
24
+ end
25
+
26
+ it "has a pie worth 5 points" do
27
+ TreasureTrove::TREASURES[0].should == Treasure.new(:pie, 5)
28
+ end
29
+
30
+ it "has a bottle worth 25 points" do
31
+ TreasureTrove::TREASURES[1].should == Treasure.new(:bottle, 25)
32
+ end
33
+
34
+ it "has a hammer worth 50 points" do
35
+ TreasureTrove::TREASURES[2].should == Treasure.new(:hammer, 50)
36
+ end
37
+
38
+ it "has a skillet worth 100 points" do
39
+ TreasureTrove::TREASURES[3].should == Treasure.new(:skillet, 100)
40
+ end
41
+
42
+ it "has a broomstick worth 200 points" do
43
+ TreasureTrove::TREASURES[4].should == Treasure.new(:broomstick, 200)
44
+ end
45
+
46
+ it "has a crowbar worth 400 points" do
47
+ TreasureTrove::TREASURES[5].should == Treasure.new(:crowbar, 400)
48
+ end
49
+
50
+ it "returns a random treasure" do
51
+ treasure = TreasureTrove.random
52
+
53
+ TreasureTrove::TREASURES.should include(treasure)
54
+
55
+ # or use alternate expectation syntax:
56
+ # expect(TreasureTrove::TREASURES).to include(treasure)
57
+ end
58
+ end
59
+ end
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vic_studio_game
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - vic
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-06-21 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'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 2.8.0
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'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 2.8.0
33
+ description: 'Game implemented as part of the PragmaticStudio Ruby course.
34
+
35
+ '
36
+ email: vic@vic.com
37
+ executables:
38
+ - studio_game
39
+ extensions: []
40
+ extra_rdoc_files: []
41
+ files:
42
+ - LICENCE
43
+ - README
44
+ - bin/my_favorite_players.csv
45
+ - bin/players.csv
46
+ - bin/studio_game
47
+ - lib/studio_game/auditable.rb
48
+ - lib/studio_game/berserk_player.rb
49
+ - lib/studio_game/clumsy_player.rb
50
+ - lib/studio_game/die.rb
51
+ - lib/studio_game/game.rb
52
+ - lib/studio_game/game_turn.rb
53
+ - lib/studio_game/loaded_die.rb
54
+ - lib/studio_game/playable.rb
55
+ - lib/studio_game/player.rb
56
+ - lib/studio_game/treasure_trove.rb
57
+ - spec/studio_game/berserk_player_spec.rb
58
+ - spec/studio_game/clumsy_player_spec.rb
59
+ - spec/studio_game/game_spec.rb
60
+ - spec/studio_game/player_spec.rb
61
+ - spec/studio_game/treasure_trove_spec.rb
62
+ homepage: https://vic.vic.com
63
+ licenses:
64
+ - MIT
65
+ metadata: {}
66
+ post_install_message:
67
+ rdoc_options: []
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '1.9'
75
+ required_rubygems_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ requirements: []
81
+ rubygems_version: 3.2.3
82
+ signing_key:
83
+ specification_version: 4
84
+ summary: Pragmatic Studio Game Implementation
85
+ test_files:
86
+ - spec/studio_game/berserk_player_spec.rb
87
+ - spec/studio_game/clumsy_player_spec.rb
88
+ - spec/studio_game/game_spec.rb
89
+ - spec/studio_game/player_spec.rb
90
+ - spec/studio_game/treasure_trove_spec.rb