studio_game_abegbg 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,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ Y2M1ZTRjMDAzMDQyZWU3M2ZlZGZkNGMxODNhNDgxYzNiYjQ5NDk0YQ==
5
+ data.tar.gz: !binary |-
6
+ MmU0NjkzN2M4Nzc5MjQ1MmEyM2JjZWUzOGIyNDNhNzgzMjk5OTJmOA==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ YzI2ZTUzYjhiMzk5ODc4MWI0NjIwMGNhZTVjNmRhOGQyMTRkZWQxZjI3Yzk1
10
+ MjMxOGI1OTM1ZWZkNmQ0NDI0YmZkYjc3MmJhMWY0OWRkMjY0MDc0ZTM5ZTRi
11
+ ZmVhNzkxZmZiZTJiNWZlMDgxYWVkYTYwMDE3MTYzOTMwYjZhZmE=
12
+ data.tar.gz: !binary |-
13
+ NzIwYjNlMjMyY2JkOTQ1YzFkMmY4NzRjOGNmMzc0NDBiYjZlNTU3ZjA4Mjc3
14
+ MTY3ZDhjMjU5NDE3M2FiZjJiNWVmNmQ1NDgyOWIxNTA0ODgzMTNjYWJmZGZk
15
+ YWY0NTUxNjU5ZWJlZGUwODk0ZWNjNjE1NDJhMWU5Mzc3NGVjNmU=
data/LICENSE ADDED
File without changes
data/README ADDED
File without changes
data/bin/players.csv ADDED
@@ -0,0 +1,4 @@
1
+ Carl,100
2
+ Linn,100
3
+ Ester,100
4
+ Klara,100
data/bin/players2.csv ADDED
@@ -0,0 +1,4 @@
1
+ Carl2,100
2
+ Linn2,100
3
+ Ester2,100
4
+ Klara2,100
data/bin/studio_game ADDED
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env ruby
2
+ require_relative '../lib/studio_game/player'
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_player_file = File.join(File.dirname(__FILE__), 'players.csv')
10
+ knuckleheads.load_players(ARGV.shift || default_player_file)
11
+
12
+ klutz = StudioGame::ClumsyPlayer.new("klutz", 105, 5)
13
+ knuckleheads.add_player(klutz)
14
+
15
+ berserk = StudioGame::BerserkPlayer.new("berserker", 50)
16
+ knuckleheads.add_player(berserk)
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'
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("high_scores.txt")
33
+
34
+ # knuckleheads.play(10) do
35
+ # knuckleheads.total_points >= 2000
36
+ # end
@@ -0,0 +1,39 @@
1
+ puts "The game started on #{Time.new.strftime("%A %m/%d/%Y at %I:%M%p")}"
2
+
3
+ def say_hello
4
+
5
+ end
6
+
7
+
8
+ name1 = "larry"
9
+ name2 = "curly"
10
+ name3 = "moe"
11
+ name4 = "shemp"
12
+
13
+ health1 = 60
14
+ health2 = 125
15
+ health3 = 100
16
+ health4 = 90
17
+
18
+
19
+ puts "#{name1.capitalize} has a health of #{health1}"
20
+ puts "#{name2.upcase} has a health of #{health2}"
21
+
22
+ health2 = health1
23
+ puts "#{name2.upcase} has a health of #{health2}"
24
+
25
+ health1 = 30
26
+ puts "#{name1.capitalize} has a health of #{health1}"
27
+ puts "#{name2.upcase} has a health of #{health2}"
28
+
29
+ puts "#{name3.capitalize} has a health of #{health3}".center(50,'*')
30
+
31
+ puts "#{name4.capitalize.ljust(40,'.')} #{health4} health"
32
+
33
+
34
+
35
+
36
+
37
+ ##puts "Players: \n\t#{name1}\n\t#{name2}\n\t#{name3}"
38
+
39
+
@@ -0,0 +1,12 @@
1
+ def say_hello(name, health=100)
2
+ "I'm #{name.capitalize} with a health of #{health} as of #{time}"
3
+ end
4
+
5
+ def time
6
+ Time.new.strftime("%I:%M:%S")
7
+ end
8
+
9
+ puts say_hello("larry", 60)
10
+ puts say_hello("mOe", 125)
11
+ puts say_hello("curly")
12
+ puts say_hello("shemp", 90)
@@ -0,0 +1,8 @@
1
+ module StudioGame
2
+
3
+ module Auditable
4
+ def audit
5
+ puts "Rolled a #{self.number} (#{self.class})"
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,40 @@
1
+ require_relative 'player'
2
+ module StudioGame
3
+
4
+ class BerserkPlayer < Player
5
+
6
+ def initialize(name, health=100)
7
+ super(name, health)
8
+ @w00t_count = 0
9
+ end
10
+
11
+ def berserker?
12
+ @w00t_count > 5
13
+ end
14
+
15
+ def w00t
16
+ super
17
+ @w00t_count += 1
18
+ puts "#{name} is BERSERK!" if berserker?
19
+ end
20
+
21
+ def blam
22
+ if berserker?
23
+ w00t
24
+ else
25
+ super
26
+ end
27
+ end
28
+
29
+ end
30
+
31
+ if __FILE__ == $0
32
+ berserker = BerserkPlayer.new("berserker", 50)
33
+ 3.times { berserker.w00t }
34
+ 2.times { berserker.blam }
35
+
36
+ 3.times { berserker.w00t }
37
+ 2.times { berserker.blam }
38
+ puts berserker.health
39
+ end
40
+ end
@@ -0,0 +1,40 @@
1
+ require_relative 'player'
2
+ module StudioGame
3
+
4
+ class ClumsyPlayer < Player
5
+
6
+ def initialize(name, health=100, boost_factor)
7
+ super(name, health)
8
+ @boost_factor = boost_factor
9
+ end
10
+
11
+ def found_treasure(treasure)
12
+ damaged_treasure = Treasure.new(treasure.name, treasure.points / 2.0)
13
+ super(damaged_treasure)
14
+ end
15
+
16
+ def w00t
17
+ @boost_factor.times {super}
18
+ end
19
+
20
+ end
21
+
22
+
23
+
24
+ if __FILE__ == $0
25
+ clumsy = ClumsyPlayer.new("klutz")
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,21 @@
1
+ require_relative 'auditable'
2
+
3
+ module StudioGame
4
+
5
+ class Die
6
+ include Auditable
7
+
8
+ attr_reader :number
9
+
10
+ def initialize
11
+ roll
12
+ end
13
+
14
+ def roll
15
+ @number = rand(1..6)
16
+ audit
17
+ @number
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,114 @@
1
+ require_relative 'player'
2
+ require_relative 'die'
3
+ require_relative 'game_turn'
4
+ require_relative 'treasure_trove'
5
+ require_relative 'clumsy_player'
6
+
7
+ module StudioGame
8
+
9
+ class Game
10
+ attr_reader :title
11
+
12
+ def initialize(title)
13
+ @title = title
14
+ @players = []
15
+ end
16
+
17
+ def load_players(from_file)
18
+ File.readlines(from_file).each do |line|
19
+ add_player(Player.from_csv(line))
20
+ end
21
+ end
22
+
23
+ def player_highscore(player)
24
+ "#{player.name.ljust(20, '.')} #{player.score}"
25
+ end
26
+
27
+ def save_high_scores(to_file="high_scores.txt")
28
+ File.open(to_file, "w") do |file|
29
+ file.puts "#{title} High Scores:"
30
+ @players.sort.each do |player|
31
+ file.puts player_highscore(player)
32
+ end
33
+ end
34
+ end
35
+
36
+ def add_player(a_player)
37
+ @players << a_player
38
+ end
39
+
40
+ def play(rounds)
41
+ puts "There are #{@players.size} players in the game:"
42
+ @players.each do |player|
43
+ puts player
44
+ end
45
+
46
+ treasures = TreasureTrove::TREASURES
47
+ puts "\nThere are #{treasures.size} treasures to be found:"
48
+ treasures.each do |treasure|
49
+ puts "A #{treasure.name} is worth #{treasure.points} points"
50
+ end
51
+
52
+ 1.upto(rounds) do |round|
53
+ if block_given?
54
+ break if yield
55
+ end
56
+
57
+
58
+ puts "\nRound: #{round}"
59
+
60
+ @players.each do |player|
61
+ GameTurn.take_turn(player)
62
+ # puts player
63
+ end
64
+ end
65
+ end
66
+
67
+ def print_stats
68
+ puts "\n#{@title} statistics:"
69
+
70
+ strong_players, wimpy_players = @players.partition { |player| player.strong? }
71
+ puts "#{strong_players.size} strong players:"
72
+
73
+ strong_players.each do |player|
74
+ print_name_and_health(player)
75
+ end
76
+
77
+ puts "\n#{wimpy_players.size} wimpy players:"
78
+
79
+ wimpy_players.each do |player|
80
+ print_name_and_health(player)
81
+ end
82
+
83
+ puts "\n#{title} High Score:"
84
+ @players.sort.each do |player|
85
+ puts player_highscore(player)
86
+ end
87
+
88
+ puts "\nTotal points in game: #{total_points}"
89
+
90
+ @players.each do |player|
91
+ puts "\n#{player.name}'s point totals:"
92
+ player.each_found_treasure do |treasure|
93
+ puts "#{treasure.points} total #{treasure.name} points"
94
+ end
95
+ puts "#{player.points} grand total points"
96
+ end
97
+
98
+ puts "\nEnd of game.\n\n"
99
+ end
100
+
101
+ def print_name_and_health(player)
102
+ puts "#{player.name} (#{player.health})"
103
+ end
104
+
105
+ def total_points
106
+ @players.reduce(0) { |sum, player| sum + player.points}
107
+ end
108
+
109
+ end
110
+
111
+ if __FILE__ == $0
112
+
113
+ end
114
+ end
@@ -0,0 +1,38 @@
1
+ require_relative 'player'
2
+ require_relative 'die'
3
+ require_relative 'loaded_die'
4
+ require_relative 'treasure_trove'
5
+
6
+ module StudioGame
7
+ module GameTurn
8
+
9
+ def self.take_turn(player)
10
+ die = Die.new
11
+
12
+ case die.roll
13
+ when 1..2
14
+ player.blam
15
+ when 3..4
16
+ puts "#{player.name} was skipped."
17
+ when 5..6
18
+ player.w00t
19
+ end
20
+ treasure = TreasureTrove.random
21
+ player.found_treasure(treasure)
22
+ end
23
+
24
+
25
+ # module ClassMethods
26
+
27
+ # end
28
+
29
+ # module InstanceMethods
30
+
31
+ # end
32
+
33
+ # def self.included(receiver)
34
+ # receiver.extend ClassMethods
35
+ # receiver.send :include, InstanceMethods
36
+ # end
37
+ end
38
+ end
@@ -0,0 +1,14 @@
1
+ module StudioGame
2
+
3
+ def five_times number
4
+ 1.upto(number) do |count|
5
+ yield count
6
+ end
7
+ end
8
+
9
+ five_times(4) do |n|
10
+ puts "#{n} situps"
11
+ puts "#{n} pushups"
12
+ puts "#{n} chinups"
13
+ end
14
+ end
@@ -0,0 +1,18 @@
1
+ require_relative 'auditable'
2
+
3
+ module StudioGame
4
+
5
+ class LoadedDie
6
+ include Auditable
7
+
8
+ attr_reader :number
9
+
10
+ def roll
11
+ numbers = [1,1,2,5,6,6]
12
+ @number = numbers.sample
13
+ audit
14
+ @number
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ module StudioGame
2
+ module Playable
3
+ def blam
4
+ self.health -= 10
5
+ puts "#{self.name} got blammed!"
6
+ end
7
+
8
+ def w00t
9
+ self.health += 15
10
+ puts "#{self.name} got w00ted!"
11
+ end
12
+
13
+ def strong?
14
+ self.health > 100
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,66 @@
1
+ require_relative 'playable'
2
+ require_relative 'treasure_trove'
3
+
4
+ module StudioGame
5
+
6
+ class Player
7
+ include Playable
8
+
9
+ attr_accessor :health
10
+ attr_accessor :name
11
+
12
+ def initialize(name, health=100)
13
+ @name = name.capitalize
14
+ @health = health
15
+ @found_treasures = Hash.new(0)
16
+ end
17
+
18
+ def name=(new_name)
19
+ @name = new_name.capitalize
20
+ end
21
+
22
+ def to_s
23
+ "I'm #{@name.capitalize} with a health of #{@health}, points = #{points} and score = #{score}."
24
+ end
25
+
26
+ def score
27
+ @health + points
28
+ end
29
+
30
+ def <=>(other)
31
+ other.score <=> score
32
+ end
33
+
34
+ def found_treasure(treasure)
35
+ @found_treasures[treasure.name] += treasure.points
36
+ puts "#{@name} found a #{treasure.name} worth #{treasure.points} points."
37
+ puts "#{@name}'s treasures: #{@found_treasures}"
38
+ end
39
+
40
+ def each_found_treasure
41
+ @found_treasures.each do |name, points|
42
+ yield Treasure.new(name, points)
43
+ end
44
+ end
45
+
46
+ def points
47
+ @found_treasures.values.reduce(0, :+)
48
+ end
49
+
50
+ def self.from_csv(csv_string)
51
+ name, health = csv_string.split(',')
52
+ Player.new(name, Integer(health))
53
+ end
54
+
55
+ end
56
+
57
+ if __FILE__ == $0
58
+ player = Player.new("moe")
59
+ puts player.name
60
+ puts player.health
61
+ player.w00t
62
+ puts player.health
63
+ player.blam
64
+ puts player.health
65
+ end
66
+ end
@@ -0,0 +1,20 @@
1
+ module StudioGame
2
+
3
+ Treasure = Struct.new(:name, :points)
4
+
5
+ module TreasureTrove
6
+ def self.random
7
+ TREASURES.sample
8
+ end
9
+
10
+ TREASURES = [
11
+ Treasure.new(:pie, 5),
12
+ Treasure.new(:bottle, 25),
13
+ Treasure.new(:hammer, 50),
14
+ Treasure.new(:skillet, 100),
15
+ Treasure.new(:broomstick, 200),
16
+ Treasure.new(:crowbar, 400),
17
+ ]
18
+ end
19
+
20
+ end
@@ -0,0 +1,38 @@
1
+ require 'studio_game/berserk_player'
2
+
3
+ module StudioGame
4
+
5
+ describe BerserkPlayer do
6
+
7
+ before do
8
+ $stdout = StringIO.new ## För att inte skriva ut i terminalen.
9
+
10
+ @initial_health = 100
11
+ @player = BerserkPlayer.new('gaah', @initial_health)
12
+ end
13
+
14
+ it "does not go berserk when w00ted up to 5 times" do
15
+ 1.upto(5) { @player.w00t }
16
+
17
+ @player.berserker?.should be_false
18
+ end
19
+
20
+ it "goes berserk when w00ted mote than 5 times" do
21
+ 1.upto(6) { @player.w00t }
22
+
23
+ @player.berserker?.should be_true
24
+ end
25
+
26
+
27
+
28
+ it "turns blams into w00ts when it is berserk" do
29
+ @player.health.should == 100
30
+
31
+ 6.times { @player.w00t}
32
+ 2.times { @player.blam}
33
+
34
+ @player.health.should == @initial_health + (8 * 15)
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,47 @@
1
+ require 'studio_game/clumsy_player'
2
+ require 'studio_game/treasure_trove'
3
+
4
+ module StudioGame
5
+
6
+ describe ClumsyPlayer do
7
+
8
+ before do
9
+ $stdout = StringIO.new ## För att inte skriva ut i terminalen.
10
+
11
+ @initial_health = 50
12
+ @boost_factor = 5
13
+ @player = ClumsyPlayer.new("klutz", @initial_health, @boost_factor)
14
+ end
15
+
16
+ it "only receives half the points for treasures" do
17
+ @player.points.should == 0
18
+
19
+ hammer = Treasure.new(:hammer, 50)
20
+ @player.found_treasure(hammer)
21
+ @player.found_treasure(hammer)
22
+ @player.found_treasure(hammer)
23
+
24
+ crowbar = Treasure.new(:crowbar, 400)
25
+ @player.found_treasure(crowbar)
26
+
27
+ @player.points.should == 275
28
+
29
+ yielded = []
30
+ @player.each_found_treasure do |treasure|
31
+ yielded << treasure
32
+ end
33
+
34
+ yielded.should == [Treasure.new(:hammer, 75), Treasure.new(:crowbar, 200)]
35
+ end
36
+
37
+ it "when w00ted clumsy players get extra health" do
38
+ @player.health.should == @initial_health
39
+
40
+ @player.w00t
41
+
42
+ @player.health.should == @initial_health + (15 * @boost_factor)
43
+ end
44
+
45
+
46
+ end
47
+ end
@@ -0,0 +1,71 @@
1
+ require 'studio_game/game'
2
+
3
+ module StudioGame
4
+
5
+ describe Game do
6
+
7
+ before do
8
+ $stdout = StringIO.new
9
+
10
+ @game = Game.new("Knuckleheads")
11
+
12
+ @initial_health = 100
13
+ @player = Player.new("moe", @initial_health)
14
+
15
+ @game.add_player(@player)
16
+ end
17
+
18
+ it "w00ts the player if a high number is rolled" do
19
+ Die.any_instance.stub(:roll).and_return(5)
20
+
21
+ @game.play(2)
22
+
23
+ @player.health.should == @initial_health + (15 * 2)
24
+ end
25
+
26
+ it "skips the player if a medium number is rolled" do
27
+ Die.any_instance.stub(:roll).and_return(3)
28
+
29
+ @game.play(2)
30
+
31
+ @player.health.should == @initial_health
32
+ end
33
+
34
+ it "blammes the player if a low number is rolled" do
35
+ Die.any_instance.stub(:roll).and_return(2)
36
+
37
+ @game.play(2)
38
+
39
+ @player.health.should == @initial_health - (10 *2)
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
+
48
+ game.play(1)
49
+
50
+ player.points.should_not be_zero
51
+ end
52
+
53
+ it "computes total points as the sum of all player points" do
54
+ game = Game.new("Knuckleheads")
55
+
56
+ player1 = Player.new("moe")
57
+ player2 = Player.new("larry")
58
+
59
+ game.add_player(player1)
60
+ game.add_player(player2)
61
+
62
+ player1.found_treasure(Treasure.new(:hammer, 50))
63
+ player1.found_treasure(Treasure.new(:hammer, 50))
64
+ player2.found_treasure(Treasure.new(:crowbar, 400))
65
+
66
+ game.total_points.should == 500
67
+ end
68
+
69
+
70
+ end
71
+ end
@@ -0,0 +1,138 @@
1
+ require 'studio_game/player'
2
+ require 'studio_game/treasure_trove'
3
+
4
+ module StudioGame
5
+
6
+ describe "A Player" do
7
+
8
+ before do
9
+ $stdout = StringIO.new ## För att inte skriva ut i terminalen.
10
+
11
+ @initial_health = 150
12
+ @player = Player.new("larry", @initial_health)
13
+ end
14
+
15
+ it "has a capitalized name" do
16
+ @player.name.should == "Larry"
17
+ end
18
+
19
+ it "has an initial health" do
20
+ @player.health.should == 150
21
+ end
22
+
23
+ it "has a string representation" do
24
+ @player.found_treasure(Treasure.new(:hammer, 50))
25
+ @player.found_treasure(Treasure.new(:hammer, 50))
26
+
27
+ @player.to_s.should == "I'm Larry with a health of 150, points = 100 and score = 250."
28
+ end
29
+
30
+ it "computes a score as the sum of its health and points" do
31
+ @player.found_treasure(Treasure.new(:hammer, 50))
32
+ @player.found_treasure(Treasure.new(:hammer, 50))
33
+
34
+ @player.score.should == 250
35
+ end
36
+
37
+
38
+ it "increases health by 15 when w00ted" do
39
+ @player.w00t
40
+
41
+ @player.health.should == @initial_health + 15
42
+ end
43
+
44
+ it "decreases health by 10 when blammed" do
45
+ @player.blam
46
+
47
+ @player.health.should == @initial_health - 10
48
+ end
49
+
50
+ context "with a health greater than 100" do
51
+ before do
52
+ @player = Player.new("larry", 150)
53
+ end
54
+
55
+ it "is strong" do
56
+ @player.should be_strong
57
+ end
58
+ end
59
+
60
+ context "with a health less or equal to 100" do
61
+ before do
62
+ @player = Player.new("larry", 100)
63
+ end
64
+
65
+ it "is wimpy" do
66
+ @player.should_not be_strong
67
+ end
68
+ end
69
+
70
+ context "in a collection of players" do
71
+ before do
72
+ @player1 = Player.new("moe", 100)
73
+ @player2 = Player.new("larry", 200)
74
+ @player3 = Player.new("curly", 300)
75
+
76
+ @players = [@player1, @player2, @player3]
77
+ end
78
+
79
+ it "is sorted by decreasing score" do
80
+ @players.sort.should == [@player3, @player2, @player1]
81
+ end
82
+ end
83
+
84
+ it "computes points as the sum of all treasure points" do
85
+ @player.points.should == 0
86
+
87
+ @player.found_treasure(Treasure.new(:hammer, 50))
88
+
89
+ @player.points.should == 50
90
+
91
+ @player.found_treasure(Treasure.new(:crowbar, 400))
92
+
93
+ @player.points.should == 450
94
+
95
+ @player.found_treasure(Treasure.new(:hammer, 50))
96
+
97
+ @player.points.should == 500
98
+ end
99
+
100
+ it "yields each found treasure and its total points" do
101
+ @player.found_treasure(Treasure.new(:skillet, 100))
102
+ @player.found_treasure(Treasure.new(:skillet, 100))
103
+ @player.found_treasure(Treasure.new(:hammer, 50))
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
+ @player.found_treasure(Treasure.new(:bottle, 5))
108
+ @player.found_treasure(Treasure.new(:bottle, 5))
109
+
110
+ yielded = []
111
+ @player.each_found_treasure do |treasure|
112
+ yielded << treasure
113
+ end
114
+
115
+ yielded.should == [
116
+ Treasure.new(:skillet, 200),
117
+ Treasure.new(:hammer, 50),
118
+ Treasure.new(:bottle, 25)
119
+ ]
120
+ end
121
+
122
+ it "returns a player when given a csv-string" do
123
+ csv_string = "carl,100"
124
+
125
+ Player.from_csv(csv_string).to_s.should == Player.new('carl',100).to_s
126
+
127
+ end
128
+
129
+ it "can be created from a CSV string" do
130
+ player = Player.from_csv("larry,150")
131
+
132
+ player.name.should == "Larry"
133
+ player.health.should == 150
134
+ end
135
+
136
+
137
+ end
138
+ end
@@ -0,0 +1,57 @@
1
+ require 'studio_game/treasure_trove'
2
+
3
+ module StudioGame
4
+
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
+ @treasure.name.should == :hammer
13
+ end
14
+
15
+ it "has a points attribute" do
16
+ @treasure.points.should == 50
17
+ end
18
+
19
+ end
20
+
21
+ describe TreasureTrove do
22
+
23
+ it "has six treasures" do
24
+ TreasureTrove::TREASURES.size.should == 6
25
+ end
26
+
27
+ it "has a pie worth 5 points" do
28
+ TreasureTrove::TREASURES[0].should == Treasure.new(:pie, 5)
29
+ end
30
+
31
+ it "has a bottle worth 25 points" do
32
+ TreasureTrove::TREASURES[1].should == Treasure.new(:bottle, 25)
33
+ end
34
+
35
+ it "has a hammer worth 50 points" do
36
+ TreasureTrove::TREASURES[2].should == Treasure.new(:hammer, 50)
37
+ end
38
+
39
+ it "has a skillet worth 100 points" do
40
+ TreasureTrove::TREASURES[3].should == Treasure.new(:skillet, 100)
41
+ end
42
+
43
+ it "has a broomstick worth 200 points" do
44
+ TreasureTrove::TREASURES[4].should == Treasure.new(:broomstick, 200)
45
+ end
46
+
47
+ it "has a crowbar worth 400 points" do
48
+ TreasureTrove::TREASURES[5].should == Treasure.new(:crowbar, 400)
49
+ end
50
+
51
+ it "returns a random treasure" do
52
+ treasure = TreasureTrove.random
53
+
54
+ TreasureTrove::TREASURES.should include(treasure)
55
+ end
56
+ end
57
+ end
metadata ADDED
@@ -0,0 +1,85 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: studio_game_abegbg
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Carl Abelin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-09-25 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
+ email: carl@capp.se
29
+ executables:
30
+ - studio_game
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - bin/players.csv
35
+ - bin/players2.csv
36
+ - bin/studio_game
37
+ - bin/studio_game_old.rb
38
+ - bin/studio_game_old_2.rb
39
+ - lib/studio_game/auditable.rb
40
+ - lib/studio_game/berserk_player.rb
41
+ - lib/studio_game/clumsy_player.rb
42
+ - lib/studio_game/die.rb
43
+ - lib/studio_game/game.rb
44
+ - lib/studio_game/game_turn.rb
45
+ - lib/studio_game/iterators.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/game_spec.rb
53
+ - spec/studio_game/player_spec.rb
54
+ - spec/studio_game/treasure_trove_spec.rb
55
+ - LICENSE
56
+ - README
57
+ homepage: ''
58
+ licenses: []
59
+ metadata: {}
60
+ post_install_message:
61
+ rdoc_options: []
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '1.9'
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ! '>='
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ requirements: []
75
+ rubyforge_project:
76
+ rubygems_version: 2.0.7
77
+ signing_key:
78
+ specification_version: 4
79
+ summary: Game from pragmaticstudios course
80
+ test_files:
81
+ - spec/studio_game/berserk_player_spec.rb
82
+ - spec/studio_game/clumsy_player_spec.rb
83
+ - spec/studio_game/game_spec.rb
84
+ - spec/studio_game/player_spec.rb
85
+ - spec/studio_game/treasure_trove_spec.rb