studio_game_3 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
+