sharts_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.
data/LICENSE ADDED
@@ -0,0 +1 @@
1
+ Have at it, ladies and gentleman.
data/README ADDED
@@ -0,0 +1 @@
1
+ A game that was created to practice Ruby.
data/bin/studio_game ADDED
@@ -0,0 +1,99 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # name1 = 'larry'
4
+ # health1 = 60
5
+ # name2 = 'curly'
6
+ # health2 = 125
7
+ # name3 = 'moe'
8
+ # health3 = '100'
9
+ # name4 = 'shemp'
10
+ # health4 = 90
11
+
12
+
13
+ # puts "#{name1.capitalize} has a health of #{health1}"
14
+ # puts "#{name2.upcase} has a health of #{health2}"
15
+
16
+ # health2 = health1
17
+ # puts "#{name2.upcase} has a health of #{health2}"
18
+
19
+ # health1 = 30
20
+ # puts "#{name1.capitalize} has a health of #{health1}"
21
+ # puts "#{name2.upcase} has a health of #{health2}"
22
+
23
+ # puts "#{name3.capitalize} has a health of #{health3}".center(60, '*')
24
+
25
+ # text = "#{name3.capitalize} has a health of #{health3}"
26
+ # puts text.center(60, '*')
27
+
28
+
29
+ # puts "#{name4.capitalize.ljust(20, '.')} #{health4} health"
30
+
31
+ # text = name4.capitalize.ljust(20, '.')
32
+ # puts "#{text} #{health4} health"
33
+
34
+ # current_time = Time.new
35
+ # formatted_time = current_time.strftime("%A %m/%d/%y at %I:%M")
36
+ # puts "The game started on #{formatted_time}"
37
+
38
+ # METHODS
39
+
40
+ # def time
41
+ # current_time = Time.new
42
+ # current_time.strftime("%l:%M:%S")
43
+ # end
44
+
45
+ # def say_hello(name, health=100)
46
+ # "I'm #{name.capitalize} with a health of #{health} as of #{time}."
47
+ # end
48
+
49
+ # puts say_hello("larry", 60)
50
+ # puts say_hello("curly", 125)
51
+ # puts say_hello("moe")
52
+ # puts say_hello("shemp", 90)
53
+
54
+ require_relative '../lib/studio_game/Player'
55
+ require_relative '../lib/studio_game/Game'
56
+ require_relative '../lib/studio_game/Clumsy_player'
57
+ require_relative '../lib/studio_game/berserk_player'
58
+
59
+ # player1 = Player.new("Jon", 30)
60
+ # player2 = Player.new("Chris", 40)
61
+ # player3 = Player.new("rick", 50)
62
+ # player4 = Player.new("skeletor", 55)
63
+
64
+ game1 = StudioGame::Game.new("'Sharting: The Game'")
65
+
66
+ default_player_file = File.join(File.dirname(__FILE__),'villians.csv')
67
+ game1.load_players(ARGV.shift || default_player_file)
68
+
69
+ clumsyplayer1 = StudioGame::ClumsyPlayer.new("Ferguson", 105, 1)
70
+ berserkplayer1 = StudioGame::BerserkPlayer.new("Balrog", 100)
71
+ # game1.add_player(clumsyplayer1)
72
+ # game1.add_player(berserkplayer1)
73
+
74
+ loop do
75
+ puts "\nHow many rounds shall we play? (to exit, enter 'quit')"
76
+ answer = gets.chomp.downcase
77
+ case answer
78
+ when /^\d+$/
79
+ puts "#{answer} rounds comin' right up!"
80
+ game1.play(answer.to_i)
81
+ when 'quit', 'exit'
82
+ game1.print_stats
83
+ # loop do
84
+ # puts "Would you like to save this game? (yes, no)"
85
+ # case gets
86
+ # when 'yes'
87
+ # puts 'You got it.'
88
+ # game1.save_high_scores
89
+ # when 'no'
90
+ # puts 'Bye bye.'
91
+ # end
92
+ # end
93
+ break
94
+ else
95
+ puts "Wrong answer. Enter a number or 'quit'"
96
+ end
97
+ end
98
+
99
+ game1.save_high_scores
data/bin/villians.csv ADDED
@@ -0,0 +1,4 @@
1
+ Destro,100
2
+ Skeletor,110
3
+ Gargamel,90
4
+ Shredder,105
data/bin/wrestlers.csv ADDED
@@ -0,0 +1,4 @@
1
+ DDP,30
2
+ sting,40
3
+ juventud,50
4
+ xpac,55
@@ -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,60 @@
1
+ require_relative 'player'
2
+
3
+ module StudioGame
4
+ class ClumsyPlayer < Player
5
+
6
+ attr_reader :boost
7
+
8
+ def found_treasure(treasure)
9
+ # points = treasure.points / 2
10
+ # @found_treasures[treasure.name] += points
11
+ # puts "#{@name} found a #{treasure.name} worth #{points} points."
12
+ # puts "#{@name}'s treasures: #{@found_treasures}"
13
+ damaged_treasure = Treasure.new(treasure.name, treasure.points/2)
14
+ super(damaged_treasure)
15
+ end
16
+
17
+ def initialize (name, health=100, boost=1)
18
+ super(name, health)
19
+ @boost = boost
20
+ @times_sharted = 0
21
+ end
22
+
23
+ def high_five
24
+ @boost.times{super}
25
+ end
26
+
27
+ def rage?
28
+ @times_sharted > 5
29
+ end
30
+
31
+ def shart
32
+ @times_sharted += 1
33
+ if rage?
34
+ puts "#{@name} is raging!"
35
+ high_five
36
+ else
37
+ super
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ if __FILE__ == $0
44
+ clumsy = ClumsyPlayer.new("klutz",80,2)
45
+
46
+ hammer = Treasure.new(:hammer, 50)
47
+ clumsy.found_treasure(hammer)
48
+ clumsy.found_treasure(hammer)
49
+ clumsy.found_treasure(hammer)
50
+
51
+ crowbar = Treasure.new(:crowbar, 400)
52
+ clumsy.found_treasure(crowbar)
53
+ puts clumsy.health
54
+ clumsy.high_five
55
+ puts clumsy.health
56
+ clumsy.each_treasure_found do |treasure|
57
+ puts "#{treasure.points} total #{treasure.name} points"
58
+ end
59
+ puts "#{clumsy.points} grand total points"
60
+ end
@@ -0,0 +1,15 @@
1
+ require_relative 'Auditable'
2
+
3
+ module StudioGame
4
+ class Die
5
+ attr_reader :number
6
+
7
+ include Auditable
8
+
9
+ def roll
10
+ @number = rand(1..6)
11
+ audit
12
+ @number
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,121 @@
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
+
10
+ attr_reader :title
11
+
12
+ def initialize(title)
13
+ @title = title
14
+ @players = []
15
+ end
16
+
17
+ def load_players(from_file="bin/villians.csv")
18
+ CSV.foreach(ARGV.shift || from_file) do |row|
19
+ player = Player.new(row[0], row[1].to_i)
20
+ add_player(player)
21
+ end
22
+ end
23
+
24
+ def add_player (a_player)
25
+ @players.push(a_player)
26
+ end
27
+
28
+ def play(rounds)
29
+ 1.upto(rounds) do |round|
30
+ puts "\nROUND #{round}"
31
+ puts "\nThere are #{@players.count} lactose-intolerant players in #{@title}. \nLet's drink some milk!"
32
+ @players.each do |b|
33
+ puts b
34
+ end
35
+
36
+ treasures = TreasureTrove::TREASURES
37
+ puts "\nThere are #{treasures.size} treasures to be found:"
38
+ treasures.each do |t|
39
+ puts "A #{t.name} is worth #{t.points} points."
40
+ end
41
+
42
+ puts "\n"
43
+ @players.each do |b|
44
+ GameTurn.take_turn(b)
45
+ puts b.follow_up
46
+ end
47
+
48
+ end
49
+ end
50
+
51
+ def print_name_and_health(player)
52
+ puts "#{player.name} (#{player.health})"
53
+ end
54
+
55
+ def high_score_entry(player)
56
+ formatted_name = player.name.ljust(25,'.')
57
+ "#{formatted_name}#{player.score}"
58
+ end
59
+
60
+ def save_high_scores(to_file="high_scores.txt")
61
+ File.open(to_file, "w") do |file|
62
+ file.puts "#{@title} - High Scores:"
63
+ @players.sort.each do |b|
64
+ file.puts high_score_entry(b)
65
+ end
66
+ end
67
+ end
68
+
69
+ def print_stats
70
+ puts "\n#{@title} Statistics:"
71
+ puts "\n"
72
+ strong, wimpy = @players.partition { |p| p.strong? }
73
+
74
+ puts "There are #{strong.size} strong players that don't shart that often:"
75
+ strong.sort.each do |b|
76
+ print_name_and_health(b)
77
+ end
78
+
79
+ puts "\nThere are #{wimpy.size} wimpy players that shart on a regular basis:"
80
+ wimpy.sort.each do |b|
81
+ print_name_and_health(b)
82
+ end
83
+
84
+ puts "\n#{title} High Scores:"
85
+ @players.sort.each do |b|
86
+ high_score_entry(b)
87
+ end
88
+
89
+ @players.each do |b|
90
+ puts "\n#{b.name}'s point totals:"
91
+ b.each_treasure_found do |t|
92
+ puts "#{t.points} total #{t.name} points"
93
+ end
94
+ puts "#{b.points} grand total points"
95
+ end
96
+
97
+ puts "\nTotal Points Possible: #{total_points}"
98
+ end
99
+
100
+ def total_points
101
+ @players.reduce(0) { |sum, player| sum + player.points}
102
+ # all_points = @players.map { |player| player.points}
103
+ # @players.map(&:points).inject(&:+)
104
+ # @players.inject(0) { |sum, player| sum + player.points}
105
+ #& = Proc.new{}
106
+ end
107
+ end
108
+ end
109
+
110
+ if __FILE__ == $0
111
+ playera = Player.new("Sonic", 80)
112
+ playerb = Player.new("Tails", 70)
113
+ playerc = Player.new("Robotnik", 90)
114
+
115
+ game1 = Game.new("'Sharting: Sonic and Friends'")
116
+ game1.add_player(playera)
117
+ game1.add_player(playerb)
118
+ game1.add_player(playerc)
119
+ game1.play(2)
120
+ game1.print_stats
121
+ end
@@ -0,0 +1,23 @@
1
+ require_relative 'Player'
2
+ require_relative 'die'
3
+ require_relative 'treasure_trove'
4
+ require_relative 'loaded_die'
5
+
6
+ module StudioGame
7
+ module GameTurn
8
+ def self.take_turn(b)
9
+ die = Die.new
10
+ case die.roll
11
+ when 1..2
12
+ b.shart
13
+ when 3..4
14
+ puts "#{b.name} kept cool and didn't shart."
15
+ else
16
+ b.high_five
17
+ end
18
+
19
+ treasure = TreasureTrove.random
20
+ b.found_treasure(treasure)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,18 @@
1
+ module StudioGame
2
+ module Playable
3
+ def shart
4
+ puts "#{name} sharted! How embarassing!"
5
+ self.health -= 10
6
+ end
7
+
8
+ def high_five
9
+ puts "#{name} just got a high-five! Awesome!"
10
+ self.health += 15
11
+ end
12
+
13
+ def strong?
14
+ health > 100
15
+ end
16
+ end
17
+ end
18
+ # name was an instance variable (@name) that was changed to name. self.health is necessary because the attribute is assigned a value
@@ -0,0 +1,69 @@
1
+ require_relative 'treasure_trove'
2
+ require_relative 'Playable'
3
+
4
+ module StudioGame
5
+ class Player
6
+
7
+ attr_accessor :health, :name
8
+
9
+ include Playable
10
+
11
+ def score
12
+ @health + points
13
+ end
14
+
15
+ def self.from_csv(string)
16
+ name, health = string.split(",")
17
+ new(name, Integer(health))
18
+ end
19
+
20
+ def initialize(name, health=100)
21
+ @name = name.capitalize
22
+ @health = health
23
+ @found_treasures = Hash.new(0)
24
+ end
25
+
26
+ def found_treasure(treasure)
27
+ @found_treasures[treasure.name] += treasure.points
28
+ puts "#{@name} found a #{treasure.name} worth #{treasure.points} points."
29
+ puts "#{@name}'s treasures: #{@found_treasures}"
30
+ end
31
+
32
+ def points
33
+ @found_treasures.values.reduce(0, :+)
34
+ end
35
+
36
+ def to_s
37
+ "I'm #{@name} with a health of #{@health} and a score of #{score}."
38
+ end
39
+
40
+ def follow_up
41
+ "(Now #{@name} has a health of #{@health} and a score of #{score}.)"
42
+ end
43
+
44
+ def <=>(other)
45
+ other.score <=> score
46
+ end
47
+
48
+ def each_treasure_found
49
+ @found_treasures.each do |name, points|
50
+ yield Treasure.new(name, points)
51
+ end
52
+ end
53
+ end
54
+ end
55
+ if __FILE__ == $0
56
+
57
+ player1 = Player.new("Skeletor",1000)
58
+ puts player1.name
59
+ puts player1.health
60
+ player1.shart
61
+ player1.high_five
62
+ player1.high_five
63
+
64
+
65
+ end
66
+
67
+ # def status
68
+ # hit? ? "Hit" : "Flop"
69
+ # end
@@ -0,0 +1,41 @@
1
+ require_relative 'Player'
2
+ require_relative 'game'
3
+
4
+ module StudioGame
5
+ class BerserkPlayer < Player
6
+
7
+ def initialize (name, health=100)
8
+ super(name, health)
9
+ @high_fived = 0
10
+ end
11
+
12
+ def berserk?
13
+ @high_fived > 5
14
+ end
15
+
16
+ def high_five
17
+ super
18
+ @high_fived += 1
19
+ puts "Holy shit! #{@name} is in berserker mode!" if berserk?
20
+ end
21
+
22
+ def shart
23
+ if berserk?
24
+ high_five
25
+ else
26
+ super
27
+ end
28
+ end
29
+
30
+ end
31
+ end
32
+
33
+
34
+ if __FILE__ == $0
35
+ player1 = BerserkPlayer.new("Balrog", 100)
36
+ game1 = Game.new("Practice Game")
37
+ game1.add_player(player1)
38
+ 6.times {player1.high_five}
39
+ 3.times {player1.shart}
40
+ puts player1.health
41
+ 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,10 @@
1
+ require_relative 'game'
2
+
3
+ playera = Player.new("Sonic", 80)
4
+ playerb = Player.new("Tails", 70)
5
+ playerc = Player.new("Robotnik", 90)
6
+
7
+ players = [playera, playerb, playerc]
8
+
9
+ puts players.sort_by { |players| players.score }
10
+
@@ -0,0 +1,19 @@
1
+ module StudioGame
2
+ Treasure = Struct.new(:name, :points)
3
+
4
+ module TreasureTrove
5
+ TREASURES = [
6
+ Treasure.new(:sandpaper, 5),
7
+ Treasure.new(:leaf, 25),
8
+ Treasure.new("sqaure of TP", 50),
9
+ Treasure.new(:buttwipe, 100),
10
+ Treasure.new(:diaper, 200),
11
+ Treasure.new("clean pair of briefs", 500)
12
+ ]
13
+ def self.random
14
+ TREASURES.sample
15
+ end
16
+ end
17
+ end
18
+
19
+ #puts TreasureTrove.random
@@ -0,0 +1,65 @@
1
+ require 'studio_game/Game'
2
+
3
+ module StudioGame
4
+ describe Game do
5
+ before do
6
+ $stdout = StringIO.new
7
+ @game = Game.new("Sharting: Mario Bros. Edition")
8
+
9
+ @initial_health = 100
10
+ @player = Player.new("mario", @initial_health)
11
+
12
+ @game.add_player(@player)
13
+ end
14
+
15
+ it "high fives a player if 5 or 6 is rolled" do
16
+ Die.any_instance.stub(:roll).and_return(5)
17
+
18
+ @game.play(2)
19
+
20
+ @player.health.should == @initial_health + (15 * 2)
21
+ end
22
+ it "skips a player if a 3 or 4 is rolled" do
23
+ Die.any_instance.stub(:roll).and_return(3)
24
+
25
+ @game.play(2)
26
+
27
+ @player.health.should == @initial_health
28
+ end
29
+
30
+ it "sharts player if a 1 or 2 is rolled" do
31
+ Die.any_instance.stub(:roll).and_return(1)
32
+
33
+ @game.play(2)
34
+
35
+ @player.health.should == @initial_health - (10 * 2)
36
+ end
37
+
38
+ it "assigns a treasure for points during a player's turn" do
39
+ game = Game.new("Knuckleheads")
40
+ player = Player.new("moe")
41
+
42
+ game.add_player(player)
43
+
44
+ game.play(1)
45
+
46
+ player.points.should_not be_zero
47
+ end
48
+
49
+ it "computes total points as the sum of all player points" do
50
+ game = Game.new("Knuckleheads")
51
+
52
+ player1 = Player.new("moe")
53
+ player2 = Player.new("larry")
54
+
55
+ game.add_player(player1)
56
+ game.add_player(player2)
57
+
58
+ player1.found_treasure(Treasure.new(:hammer, 50))
59
+ player1.found_treasure(Treasure.new(:hammer, 50))
60
+ player2.found_treasure(Treasure.new(:crowbar, 400))
61
+
62
+ game.total_points.should == 500
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,137 @@
1
+ require 'studio_game/Player'
2
+ require 'studio_game/treasure_trove'
3
+
4
+ module StudioGame
5
+ describe Player do
6
+
7
+ before do
8
+ @initial_health = 100
9
+ @player = Player.new("goro", @initial_health)
10
+ $stdout = StringIO.new
11
+ end
12
+
13
+
14
+ it "has a capitalized name" do
15
+
16
+ @player.name.should == "Goro"
17
+ end
18
+ it "has an initial health" do
19
+
20
+ @player.health.should == 100
21
+ end
22
+ it "has a string representation" do
23
+
24
+ @player.to_s.should == "I'm Goro with a health of 100 and a score of 100."
25
+ end
26
+
27
+ it "computes a score by adding health and points" do
28
+ @player.found_treasure(Treasure.new(:hammer, 50))
29
+
30
+ @player.score.should == 150
31
+ end
32
+
33
+ it "subtracts 10 from health when player sharts" do
34
+
35
+ @player.shart
36
+
37
+ @player.health.should == @initial_health - 10
38
+ end
39
+
40
+ it "adds 15 to health when player gets high five" do
41
+
42
+ @player.high_five
43
+
44
+ @player.health.should == @initial_health + 15
45
+ end
46
+
47
+ context "player has health of more than 100" do
48
+
49
+ before do
50
+ @player = Player.new("rick", 150)
51
+ end
52
+
53
+ it "is strong" do
54
+
55
+ @player.should be_strong
56
+ end
57
+
58
+ end
59
+
60
+ context "player has health less than or equal to 100" do
61
+
62
+ before do
63
+
64
+ @player = Player.new("rick", 100)
65
+ end
66
+
67
+ it "is wimpy" do
68
+
69
+ @player.should_not be_strong
70
+ end
71
+
72
+ end
73
+
74
+ context "in a collection of players" do
75
+
76
+ before do
77
+
78
+ @player1 = Player.new("rick", 100)
79
+ @player2 = Player.new("chris", 90)
80
+ @player3 = Player.new("jon", 80)
81
+
82
+ @players = [@player1, @player2, @player3]
83
+ end
84
+
85
+ it "is sorted by decreasing order" do
86
+
87
+ @players.sort.should == [@player1, @player2, @player3]
88
+ end
89
+ end
90
+
91
+ it "computes points as the sum of all treasure points" do
92
+ @player.points.should == 0
93
+
94
+ @player.found_treasure(Treasure.new(:hammer, 50))
95
+
96
+ @player.points.should == 50
97
+
98
+ @player.found_treasure(Treasure.new(:crowbar, 400))
99
+
100
+ @player.points.should == 450
101
+
102
+ @player.found_treasure(Treasure.new(:hammer, 50))
103
+
104
+ @player.points.should == 500
105
+ end
106
+
107
+ it "yields each found treasure and its total points" do
108
+ @player.found_treasure(Treasure.new(:skillet, 100))
109
+ @player.found_treasure(Treasure.new(:skillet, 100))
110
+ @player.found_treasure(Treasure.new(:hammer, 50))
111
+ @player.found_treasure(Treasure.new(:bottle, 5))
112
+ @player.found_treasure(Treasure.new(:bottle, 5))
113
+ @player.found_treasure(Treasure.new(:bottle, 5))
114
+ @player.found_treasure(Treasure.new(:bottle, 5))
115
+ @player.found_treasure(Treasure.new(:bottle, 5))
116
+
117
+ yielded = []
118
+ @player.each_treasure_found do |treasure|
119
+ yielded << treasure
120
+ end
121
+
122
+ yielded.should == [
123
+ Treasure.new(:skillet, 200),
124
+ Treasure.new(:hammer, 50),
125
+ Treasure.new(:bottle, 25)
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
+ end
137
+ end
@@ -0,0 +1,32 @@
1
+ require 'studio_game/berserk_player'
2
+
3
+ $stdout = StringIO.new
4
+
5
+ module StudioGame
6
+ describe BerserkPlayer do
7
+
8
+ before do
9
+ @initial_health = 50
10
+ @player = BerserkPlayer.new("berserker", @initial_health)
11
+ end
12
+
13
+ it "does not go berserk when high fived up to 5 times" do
14
+ 1.upto(5) { @player.high_five }
15
+
16
+ @player.berserk?.should be_false
17
+ end
18
+
19
+ it "goes berserk when high fived more than 5 times" do
20
+ 1.upto(6) { @player.high_five }
21
+
22
+ @player.berserk?.should be_true
23
+ end
24
+
25
+ it "gets high fived instead of sharting when it's gone berserk" do
26
+ 1.upto(6) { @player.high_five }
27
+ 1.upto(2) { @player.shart }
28
+
29
+ @player.health.should == @initial_health + (8 * 15)
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,53 @@
1
+ require 'studio_game/clumsy_player'
2
+
3
+ module StudioGame
4
+ describe ClumsyPlayer do
5
+
6
+ before do
7
+ @player = ClumsyPlayer.new("klutz",100,2)
8
+ $stdout = StringIO.new
9
+ end
10
+
11
+ it "only gets half the point value for each treasure" do
12
+ @player.points.should == 0
13
+
14
+ hammer = Treasure.new(:hammer, 50)
15
+ @player.found_treasure(hammer)
16
+ @player.found_treasure(hammer)
17
+ @player.found_treasure(hammer)
18
+
19
+ @player.points.should == 75
20
+
21
+ crowbar = Treasure.new(:crowbar, 400)
22
+ @player.found_treasure(crowbar)
23
+
24
+ @player.points.should == 275
25
+
26
+ yielded = []
27
+ @player.each_treasure_found do |treasure|
28
+ yielded << treasure
29
+ end
30
+
31
+ yielded.should == [Treasure.new(:hammer, 75), Treasure.new(:crowbar, 200)]
32
+ end
33
+
34
+ it "multiplies the high fives by the boost number" do
35
+ @player.health.should == 100
36
+
37
+ @player.high_five
38
+
39
+ @player.health.should == 130
40
+ end
41
+
42
+ it "trades sharts for high fives if player gets more than 5 sharts (rage)" do
43
+ @player.shart
44
+ @player.shart
45
+ @player.shart
46
+ @player.shart
47
+ @player.shart
48
+ @player.shart
49
+
50
+ @player.rage?.should be_true
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,56 @@
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 sandpaper worth 5 points" do
27
+ TreasureTrove::TREASURES[0].should == Treasure.new(:sandpaper, 5)
28
+ end
29
+
30
+ it "has a leaf worth 25 points" do
31
+ TreasureTrove::TREASURES[1].should == Treasure.new(:leaf, 25)
32
+ end
33
+
34
+ it "has a TP worth 50 points" do
35
+ TreasureTrove::TREASURES[2].should == Treasure.new("sqaure of TP", 50)
36
+ end
37
+
38
+ it "has a buttwipe worth 100 points" do
39
+ TreasureTrove::TREASURES[3].should == Treasure.new(:buttwipe, 100)
40
+ end
41
+
42
+ it "has a diaper worth 200 points" do
43
+ TreasureTrove::TREASURES[4].should == Treasure.new(:diaper, 200)
44
+ end
45
+
46
+ it "has a Immodium worth 500 points" do
47
+ TreasureTrove::TREASURES[5].should == Treasure.new("clean pair of briefs", 500)
48
+ end
49
+
50
+ it "returns a random treasure" do
51
+ treasure = TreasureTrove.random
52
+
53
+ TreasureTrove::TREASURES.should include(treasure)
54
+ end
55
+ end
56
+ end
metadata ADDED
@@ -0,0 +1,82 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sharts_studio_game
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Rick Rieta
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-12-11 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: &26230848 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *26230848
25
+ description: A game that was created to practice Ruby.
26
+ email: rrieta@biddingforgood.com
27
+ executables:
28
+ - studio_game
29
+ extensions: []
30
+ extra_rdoc_files: []
31
+ files:
32
+ - bin/studio_game
33
+ - bin/villians.csv
34
+ - bin/wrestlers.csv
35
+ - lib/studio_game/Auditable.rb
36
+ - lib/studio_game/berserk_player.rb
37
+ - lib/studio_game/Clumsy_player.rb
38
+ - lib/studio_game/Die.rb
39
+ - lib/studio_game/Game.rb
40
+ - lib/studio_game/Game_turn.rb
41
+ - lib/studio_game/loaded_die.rb
42
+ - lib/studio_game/Playable.rb
43
+ - lib/studio_game/Player.rb
44
+ - lib/studio_game/sorting.rb
45
+ - lib/studio_game/treasure_trove.rb
46
+ - spec/studio_game/berserker_spec.rb
47
+ - spec/studio_game/clumsy_player_spec.rb
48
+ - spec/studio_game/Game_spec.rb
49
+ - spec/studio_game/Player_spec.rb
50
+ - spec/studio_game/treasure_trove_spec.rb
51
+ - LICENSE
52
+ - README
53
+ homepage: ''
54
+ licenses: []
55
+ post_install_message:
56
+ rdoc_options: []
57
+ require_paths:
58
+ - lib
59
+ required_ruby_version: !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ! '>='
63
+ - !ruby/object:Gem::Version
64
+ version: '1.9'
65
+ required_rubygems_version: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ requirements: []
72
+ rubyforge_project:
73
+ rubygems_version: 1.8.16
74
+ signing_key:
75
+ specification_version: 3
76
+ summary: Pragmatic Studios Ruby training game
77
+ test_files:
78
+ - spec/studio_game/berserker_spec.rb
79
+ - spec/studio_game/clumsy_player_spec.rb
80
+ - spec/studio_game/Game_spec.rb
81
+ - spec/studio_game/Player_spec.rb
82
+ - spec/studio_game/treasure_trove_spec.rb