studio_game_3 1.0.0 → 1.1.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.
@@ -1,28 +1,26 @@
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
- def self.take_turn(player)
9
- die = Die.new
10
- case die.roll
11
- when 1..2
12
- player.blam
13
- when 3..4
14
- puts "#{player.name} was skipped."
15
- else
16
- player.w00t
17
- end
18
-
19
- treasure = TreasureTrove.random
20
- player.found_treasure(treasure)
21
- end
22
- end
23
- end
24
-
25
- if __FILE__ == $0
26
- player = StudioGame::Player.new("curly", 125)
27
- StudioGame::GameTurn.take_turn(player)
28
- end
1
+ require_relative 'die'
2
+ require_relative 'player'
3
+ require_relative 'treasure_trove'
4
+ require_relative 'loaded_die'
5
+
6
+ module StudioGame
7
+ module GameTurn
8
+ def self.take_turn(player)
9
+ d = Die.new
10
+ case d.roll
11
+ when 1..2
12
+ player.blam
13
+ when 3..4
14
+ puts "#{player.name} was skipped."
15
+ else
16
+ player.woot
17
+ end
18
+ treasure = TreasureTrove.random
19
+ player.found_treasure(treasure)
20
+ end
21
+ end
22
+ end
23
+
24
+
25
+
26
+
@@ -1,23 +1,18 @@
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
17
-
18
- if __FILE__ == $0
19
- die = StudioGame::LoadedDie.new
20
- puts die.roll
21
- puts die.roll
22
- puts die.roll
23
- end
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,2,5,6]
11
+ @number = numbers.sample
12
+ audit
13
+ @number
14
+ end
15
+ end
16
+ end
17
+
18
+
@@ -1,33 +1,16 @@
1
- # module Playable
2
- # def w00t
3
- # @health += 15
4
- # puts "#{@name} got w00ted!"
5
- # end
6
- #
7
- # def blam
8
- # @health -= 10
9
- # puts "#{@name} got blammed!"
10
- # end
11
- #
12
- # def strong?
13
- # @health > 100
14
- # end
15
- # end
16
-
17
- module StudioGame
18
- module Playable
19
- def w00t
20
- self.health += 15
21
- puts "#{name} got w00ted!"
22
- end
23
-
24
- def blam
25
- self.health -= 10
26
- puts "#{name} got blammed!"
27
- end
28
-
29
- def strong?
30
- self.health > 100
31
- end
32
- end
33
- end
1
+ module Playable
2
+ def blam
3
+ puts "#{name} got blammed."
4
+ self.health -= 10
5
+ end
6
+
7
+ def woot
8
+ puts "#{name} got wooted."
9
+ self.health += 15
10
+ end
11
+
12
+ def strong?
13
+ health > 100
14
+ end
15
+ end
16
+
@@ -1,59 +1,79 @@
1
- require_relative 'treasure_trove'
2
- require_relative 'playable'
3
-
4
- module StudioGame
5
- class Player
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 score
17
- @health + points
18
- end
19
-
20
- def points
21
- @found_treasures.values.reduce(0, :+)
22
- end
23
-
24
- def found_treasure(treasure)
25
- @found_treasures[treasure.name] += treasure.points
26
- puts "#{@name} found a #{treasure.name} worth #{treasure.points} points."
27
- end
28
-
29
- def each_found_treasure
30
- @found_treasures.each do |name, points|
31
- next_treasure = Treasure.new(name, points)
32
- yield next_treasure
33
- end
34
- end
35
-
36
- def <=>(other)
37
- other.score <=> score
38
- end
39
-
40
- def to_s
41
- "I'm #{@name} with health = #{@health}, points = #{points}, and score = #{score}."
42
- end
43
-
44
- def self.from_csv(string)
45
- name, health = string.split(',')
46
- new(name, Integer(health))
47
- end
48
- end
49
- end
50
-
51
- if __FILE__ == $0
52
- player = StudioGame::Player.new("moe")
53
- puts player.name
54
- puts player.health
55
- player.w00t
56
- puts player.health
57
- player.blam
58
- puts player.health
59
- end
1
+ require_relative 'treasure_trove'
2
+ require_relative 'playable'
3
+
4
+ module StudioGame
5
+ class Player
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 found_treasure(t)
17
+ @found_treasures[t.name] += t.points
18
+ puts "#{@name} found a #{t.name} worth #{t.points} points."
19
+ puts "#{@name}'s treasures: #{@found_treasures}"
20
+ end
21
+
22
+ def points
23
+ @found_treasures.values.reduce(0, :+)
24
+ end
25
+
26
+ def to_s
27
+ "I'm #{@name} with health = #{@health}, points = #{points} and score = #{score}."
28
+ end
29
+
30
+ def score
31
+ @health + points
32
+ end
33
+
34
+ def <=> other_player
35
+ other_player.score <=> score
36
+ end
37
+
38
+ def each_found_treasure
39
+ @found_treasures.each do |name, points|
40
+ yield(Treasure.new(name, points))
41
+ end
42
+ end
43
+
44
+ def self.from_csv(string)
45
+ name, health = string.split(',')
46
+ Player.new(name, Integer(health))
47
+ end
48
+
49
+
50
+
51
+ def self.from_csv(string)
52
+ name, health = string.split(',')
53
+ Player.new(name, Integer(health))
54
+ end
55
+ end
56
+ end
57
+
58
+ if __FILE__ ==$0
59
+ player = StudioGame::Player.new('moe')
60
+ puts player.name
61
+ puts player.health
62
+ player.woot
63
+ puts player.health
64
+ player.blam
65
+ puts player.health
66
+ puts player
67
+ end
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+
@@ -1,18 +1,19 @@
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
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
+
@@ -0,0 +1,33 @@
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 = 50
9
+ @player = BerserkPlayer.new("berserker", @initial_health)
10
+ end
11
+
12
+ it "does not go berserk when wooted up to 5 times" do
13
+ 1.upto(5) { @player.woot }
14
+
15
+ @player.should_not be_berserk
16
+ end
17
+
18
+ it "goes berserk when wooted more than 5 times" do
19
+ 1.upto(6) { @player.woot }
20
+
21
+ @player.should be_berserk
22
+ end
23
+
24
+ it "gets wooted instead of blammed when it's gone berserk" do
25
+ 1.upto(6) { @player.woot }
26
+ 1.upto(2) { @player.blam }
27
+
28
+ @player.health.should == @initial_health + (8 * 15)
29
+ end
30
+
31
+ end
32
+ end
33
+
@@ -1,32 +1,34 @@
1
- require 'studio_game/clumsy_player'
2
-
3
- module StudioGame
4
- describe ClumsyPlayer do
5
- before do
6
- @player = ClumsyPlayer.new("klutz")
7
- end
8
-
9
- it "only gets half the point value for each treasure" do
10
- @player.points.should == 0
11
-
12
- hammer = Treasure.new(:hammer, 50)
13
- @player.found_treasure(hammer)
14
- @player.found_treasure(hammer)
15
- @player.found_treasure(hammer)
16
-
17
- @player.points.should == 75
18
-
19
- crowbar = Treasure.new(:crowbar, 400)
20
- @player.found_treasure(crowbar)
21
-
22
- @player.points.should == 275
23
-
24
- yielded = []
25
- @player.each_found_treasure do |treasure|
26
- yielded << treasure
27
- end
28
-
29
- yielded.should == [Treasure.new(:hammer, 75), Treasure.new(:crowbar, 200)]
30
- end
31
- end
32
- end
1
+ require 'studio_game\clumsy_player'
2
+
3
+ module StudioGame
4
+ describe ClumsyPlayer do
5
+ before do
6
+ $stdout = StringIO.new
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
+ end
33
+ end
34
+
@@ -1,69 +1,63 @@
1
- require 'studio_game/game'
2
-
3
- module StudioGame
4
- describe Game do
5
- before do
6
- @game = Game.new("Knuckleheads")
7
-
8
- @initial_health = 100
9
- @player = Player.new("moe", @initial_health)
10
-
11
- @game.add_player(@player)
12
- end
13
-
14
- it "has a title" do
15
- @game.title.should == "Knuckleheads"
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 "blams the player if a low number is rolled" do
35
- Die.any_instance.stub(:roll).and_return(1)
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
- end
69
- end
1
+ require 'studio_game\game'
2
+
3
+ module StudioGame
4
+ describe Game do
5
+
6
+ before do
7
+ $stdout = StringIO.new
8
+ @game = Game.new("Knuckleheads")
9
+ @rounds = 3
10
+
11
+ @initial_health = 100
12
+ @player = Player.new("moe", @initial_health)
13
+
14
+ @game.add_player(@player)
15
+ end
16
+
17
+ it "woots a player when a high number is rolled" do
18
+ Die.any_instance.stub(:roll).and_return(5)
19
+
20
+ @game.play(@rounds)
21
+
22
+ @player.health.should == @initial_health + (15 * @rounds)
23
+ end
24
+
25
+ it "blams a player when a low number is rolled" do
26
+ Die.any_instance.stub(:roll).and_return(2)
27
+
28
+ @game.play(@rounds)
29
+
30
+ @player.health.should == @initial_health - (10 * @rounds)
31
+ end
32
+
33
+ it "skips a player when a medium number is rolled" do
34
+ Die.any_instance.stub(:roll).and_return(4)
35
+
36
+ @game.play(@rounds)
37
+
38
+ @player.health.should == @initial_health
39
+ end
40
+
41
+ it "assigns a treasure for points during a player's turn" do
42
+ game = Game.new("Knuckleheads")
43
+ player = Player.new("moe")
44
+
45
+ game.add_player(player)
46
+
47
+ game.play(1)
48
+
49
+ player.points.should_not be_zero
50
+ end
51
+ end
52
+ end
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+