studio_game_constantine 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 +7 -0
- data/LICENSE +0 -0
- data/README +1 -0
- data/bin/high_scores.txt +6 -0
- data/bin/my_favourite_players.csv +3 -0
- data/bin/players.csv +3 -0
- data/bin/studio_game +49 -0
- data/lib/studio_game/auditable.rb +5 -0
- data/lib/studio_game/berserk_player.rb +38 -0
- data/lib/studio_game/clumsy_player.rb +30 -0
- data/lib/studio_game/die.rb +10 -0
- data/lib/studio_game/game.rb +96 -0
- data/lib/studio_game/game_turn.rb +25 -0
- data/lib/studio_game/loaded_die.rb +14 -0
- data/lib/studio_game/playable.rb +15 -0
- data/lib/studio_game/player.rb +57 -0
- data/lib/studio_game/treasure_trove.rb +21 -0
- data/spec/studio_game/berserk_player_spec.rb +29 -0
- data/spec/studio_game/clumsy_player_spec.rb +36 -0
- data/spec/studio_game/game_spec.rb +43 -0
- data/spec/studio_game/player_spec.rb +97 -0
- data/spec/studio_game/treasure_trove_spec.rb +56 -0
- metadata +84 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ff52bbfd02e1a466071eb80a0b92463e8da5acde
|
4
|
+
data.tar.gz: 21fdd844da1786eaef2dd48d49785777cccb4535
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 96adc1fa2038a08286ac4676979e30d97156f5242a2426c403a20f61b6b1a448e4a2f448ac9d58ab8cfb757697b72d38352ebb492a71a18884389fd41c696998
|
7
|
+
data.tar.gz: 81c42b2a1c6c2a0edd8974d5642a4c82509d83c40b040eb91f251e94c62cd38f4f340de9405671e78925f3e3b6018a816721a730ed186c043cc50388657db5ca
|
data/LICENSE
ADDED
File without changes
|
data/README
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Thank you Mike and Nicole on your awesome tutorial on ruby!
|
data/bin/high_scores.txt
ADDED
data/bin/players.csv
ADDED
data/bin/studio_game
ADDED
@@ -0,0 +1,49 @@
|
|
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
|
+
klutz = StudioGame::ClumsyPlayer.new("klutz",105)
|
8
|
+
berserker = StudioGame::BerserkPlayer.new("berserker",50)
|
9
|
+
|
10
|
+
knuckleheads = StudioGame::Game.new("knuckleheads")
|
11
|
+
default_player_file = File.join(File.dirname(__FILE__), 'players.csv')
|
12
|
+
knuckleheads.load_players(ARGV.shift || default_player_file)
|
13
|
+
knuckleheads.add_players(klutz)
|
14
|
+
knuckleheads.add_players(berserker)
|
15
|
+
|
16
|
+
|
17
|
+
puts "How many game rounds? ( 'quit'to exit )"
|
18
|
+
loop do
|
19
|
+
|
20
|
+
answer = gets.chomp
|
21
|
+
|
22
|
+
case answer
|
23
|
+
when /^\d+$/
|
24
|
+
knuckleheads.play(answer.to_i)
|
25
|
+
puts "How many game rounds? ( 'quit'to exit )"
|
26
|
+
when 'quit'
|
27
|
+
puts "\n"
|
28
|
+
puts "Exiting the game..."
|
29
|
+
knuckleheads.print_stats
|
30
|
+
knuckleheads.save_high_score
|
31
|
+
break
|
32
|
+
else
|
33
|
+
puts "Please enter a valid number to indicate rounds of game (Type 'quit' to exit)"
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
|
46
|
+
#puts "There are #{players.size} players as of #{Time.new.strftime("%A, %b %e %Y at %I:%M %p")}"
|
47
|
+
|
48
|
+
|
49
|
+
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require_relative "player"
|
2
|
+
|
3
|
+
module StudioGame
|
4
|
+
class BerserkPlayer < Player
|
5
|
+
def initialize(name,health)
|
6
|
+
super(name,health)
|
7
|
+
@woot_count = 0
|
8
|
+
end
|
9
|
+
|
10
|
+
def woot
|
11
|
+
super()
|
12
|
+
@woot_count += 1
|
13
|
+
|
14
|
+
puts "#{@name} is in berserker mode!" if berserk?
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
def blam
|
19
|
+
berserk? ? woot : super
|
20
|
+
end
|
21
|
+
|
22
|
+
def berserk?
|
23
|
+
if @woot_count > 5
|
24
|
+
return true
|
25
|
+
else
|
26
|
+
return false
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
if __FILE__ == $0
|
33
|
+
berserker = BerserkPlayer.new("berserker", 50)
|
34
|
+
6.times { berserker.woot }
|
35
|
+
2.times { berserker.blam }
|
36
|
+
puts berserker.health
|
37
|
+
end
|
38
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require_relative "player"
|
2
|
+
|
3
|
+
module StudioGame
|
4
|
+
|
5
|
+
class ClumsyPlayer < Player
|
6
|
+
|
7
|
+
def found_treasure(treasure)
|
8
|
+
damaged_treasure = Treasure.new(treasure.name,treasure.points/2)
|
9
|
+
super(damaged_treasure)
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
if __FILE__ == $0
|
15
|
+
clumsy = ClumsyPlayer.new("klutz")
|
16
|
+
|
17
|
+
hammer = Treasure.new(:hammer, 50)
|
18
|
+
clumsy.found_treasure(hammer)
|
19
|
+
clumsy.found_treasure(hammer)
|
20
|
+
clumsy.found_treasure(hammer)
|
21
|
+
|
22
|
+
crowbar = Treasure.new(:crowbar, 400)
|
23
|
+
clumsy.found_treasure(crowbar)
|
24
|
+
|
25
|
+
clumsy.each_treasure do |treasure|
|
26
|
+
puts "#{treasure.points} total #{treasure.name} points"
|
27
|
+
end
|
28
|
+
puts "#{clumsy.points} grand total points"
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
require_relative "player"
|
2
|
+
require_relative "die"
|
3
|
+
require_relative "game_turn"
|
4
|
+
require_relative "treasure_trove"
|
5
|
+
|
6
|
+
module StudioGame
|
7
|
+
class Game
|
8
|
+
|
9
|
+
def initialize(name)
|
10
|
+
@name = name.capitalize
|
11
|
+
@players = []
|
12
|
+
end
|
13
|
+
|
14
|
+
def add_players(players)
|
15
|
+
@players.push(players)
|
16
|
+
end
|
17
|
+
|
18
|
+
def load_players(from_file)
|
19
|
+
File.readlines(from_file).each do |line|
|
20
|
+
name,health = line.split(',')
|
21
|
+
player = Player.new(name,Integer(health))
|
22
|
+
add_players(player)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def save_high_score(to_file = "high_scores.txt")
|
27
|
+
File.open(to_file, "w") do |file|
|
28
|
+
puts "Saving high score to file to #{to_file}"
|
29
|
+
file.puts "#{@name} High Scores: "
|
30
|
+
@players.each do |player|
|
31
|
+
formatted_name = player.name.ljust(20,'.')
|
32
|
+
file.puts "#{formatted_name} #{player.score}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def play(rounds)
|
38
|
+
treasures = TreasureTrove::TREASURES
|
39
|
+
puts "There are #{treasures.size} treasures to be found:"
|
40
|
+
treasures.each do |treasure|
|
41
|
+
puts "Treasure: #{treasure.name}\t Points: #{treasure.points}"
|
42
|
+
end
|
43
|
+
1.upto(rounds) do |round|
|
44
|
+
puts "\n"
|
45
|
+
puts "Round: #{round}"
|
46
|
+
@players.each do |player|
|
47
|
+
GameTurn.take_turn(player)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def print_name_and_health(player)
|
53
|
+
puts "Player: #{player.name}\t Health:#{player.health}"
|
54
|
+
end
|
55
|
+
|
56
|
+
def print_stats
|
57
|
+
|
58
|
+
strong_players, weak_players = @players.partition {|p| p.strong?}
|
59
|
+
#weak_players = @players.reject {|p| p.strong?}
|
60
|
+
|
61
|
+
puts "\n"
|
62
|
+
puts "Strong Players:"
|
63
|
+
strong_players.each do |player|
|
64
|
+
print_name_and_health(player)
|
65
|
+
end
|
66
|
+
|
67
|
+
|
68
|
+
puts "\n"
|
69
|
+
puts "Weak Players"
|
70
|
+
weak_players.each do |player|
|
71
|
+
print_name_and_health(player)
|
72
|
+
end
|
73
|
+
|
74
|
+
sorted_players = @players.sort
|
75
|
+
|
76
|
+
puts "Knuckleheads High Score:"
|
77
|
+
sorted_players.each do |player|
|
78
|
+
puts "#{player.name}....................#{player.score} "
|
79
|
+
end
|
80
|
+
|
81
|
+
puts "\n"
|
82
|
+
|
83
|
+
@players.each do |player|
|
84
|
+
|
85
|
+
player.each_treasure do |treasure|
|
86
|
+
puts "#{treasure.points} total #{treasure.name} points"
|
87
|
+
end
|
88
|
+
|
89
|
+
puts "#{player.name}'s grand total points: #{player.points}"
|
90
|
+
puts "\n"
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require_relative "die"
|
2
|
+
require_relative "loaded_die"
|
3
|
+
require_relative "player"
|
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 3..4
|
12
|
+
puts "Player: #{player.name.capitalize} was skipped"
|
13
|
+
when 1..2
|
14
|
+
player.blam
|
15
|
+
puts player
|
16
|
+
when 5..6
|
17
|
+
player.woot
|
18
|
+
puts player
|
19
|
+
end
|
20
|
+
treasure = TreasureTrove.random
|
21
|
+
player.found_treasure(treasure)
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require_relative "treasure_trove"
|
2
|
+
require_relative "playable"
|
3
|
+
|
4
|
+
module StudioGame
|
5
|
+
class Player
|
6
|
+
include Playable
|
7
|
+
attr_reader :name
|
8
|
+
attr_accessor :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 name=(name)
|
17
|
+
@name = name.capitalize
|
18
|
+
end
|
19
|
+
|
20
|
+
def <=>(other)
|
21
|
+
other.score <=> score
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_s
|
25
|
+
"I am #{@name.capitalize} with health of #{@health} and a score of #{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}"
|
31
|
+
puts "#{@name}'s Treasure: #{@found_treasures}"
|
32
|
+
end
|
33
|
+
|
34
|
+
def each_treasure
|
35
|
+
@found_treasures.each do |name,points|
|
36
|
+
yield Treasure.new(name,points)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def points
|
41
|
+
@found_treasures.values.reduce(0, :+)
|
42
|
+
end
|
43
|
+
|
44
|
+
def score
|
45
|
+
@score = @health + points
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
if __FILE__ == $0
|
54
|
+
player1 = Player.new("sandy")
|
55
|
+
puts player1
|
56
|
+
player1.woot
|
57
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module StudioGame
|
2
|
+
|
3
|
+
Treasure = Struct.new(:name,:points)
|
4
|
+
|
5
|
+
module TreasureTrove
|
6
|
+
pie = Treasure.new(:pie,5)
|
7
|
+
bottle = Treasure.new(:bottle,25)
|
8
|
+
hammer = Treasure.new(:hammer,50)
|
9
|
+
skillet = Treasure.new(:skillet,100)
|
10
|
+
broomstick = Treasure.new(:broomstick,200)
|
11
|
+
crowbar = Treasure.new(:crowbar,400)
|
12
|
+
|
13
|
+
TREASURES = [pie,bottle,hammer,skillet,broomstick,crowbar]
|
14
|
+
|
15
|
+
def self.random
|
16
|
+
TREASURES.sample
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require "studio_game/berserk_player"
|
2
|
+
|
3
|
+
module StudioGame
|
4
|
+
describe BerserkPlayer do
|
5
|
+
|
6
|
+
before do
|
7
|
+
@initial_health = 50
|
8
|
+
@player = BerserkPlayer.new("berserker", @initial_health)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "does not go to berserk when woot up to 5" do
|
12
|
+
1.upto(5) { @player.woot}
|
13
|
+
expect(@player.berserk?).to eq(false)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "goes into berserk mode when woot more than 5" do
|
17
|
+
1.upto(6) {@player.woot}
|
18
|
+
expect(@player.berserk?).to eq(true)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "gets wooted instead of blam when woot is more than 5" do
|
22
|
+
1.upto(6) {@player.woot}
|
23
|
+
1.upto(2) {@player.blam}
|
24
|
+
|
25
|
+
expect(@player.health).to eq(@initial_health + 8*15)
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require "studio_game/clumsy_player"
|
2
|
+
|
3
|
+
module StudioGame
|
4
|
+
|
5
|
+
describe ClumsyPlayer do
|
6
|
+
before do
|
7
|
+
@player = ClumsyPlayer.new("klutz")
|
8
|
+
end
|
9
|
+
|
10
|
+
it "only gets half points for each treasure it obtains" do
|
11
|
+
expect(@player.points).to eq(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
|
+
expect(@player.points).to eq(75)
|
19
|
+
|
20
|
+
crowbar = Treasure.new(:crowbar,400)
|
21
|
+
@player.found_treasure(crowbar)
|
22
|
+
|
23
|
+
expect(@player.points).to eq(275)
|
24
|
+
|
25
|
+
yielded = []
|
26
|
+
|
27
|
+
@player.each_treasure do |treasure|
|
28
|
+
yielded << treasure
|
29
|
+
end
|
30
|
+
|
31
|
+
yielded.should == [Treasure.new(:hammer,75),Treasure.new(:crowbar,200)]
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require "studio_game/game"
|
2
|
+
|
3
|
+
module StudioGame
|
4
|
+
describe Game do
|
5
|
+
|
6
|
+
before do
|
7
|
+
@game = Game.new("knuckleheads")
|
8
|
+
@initial_health = 100
|
9
|
+
@player = Player.new("moe",@initial_health)
|
10
|
+
@game.add_players(@player)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "w00t the player when high number is rolled" do
|
14
|
+
allow_any_instance_of(Die).to receive(:roll).and_return(5)
|
15
|
+
@game.play(2)
|
16
|
+
expect(@player.health).to eq(@initial_health + 30)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "skips the player when medium number is rolled" do
|
20
|
+
allow_any_instance_of(Die).to receive(:roll).and_return(3)
|
21
|
+
@game.play(2)
|
22
|
+
expect(@player.health).to eq(@initial_health)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "blams the player when low number is rolled" do
|
26
|
+
allow_any_instance_of(Die).to receive(:roll).and_return(2)
|
27
|
+
@game.play(2)
|
28
|
+
expect(@player.health).to eq(@initial_health - 20)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "assigns a treasure for points during a player's turn" do
|
32
|
+
game = Game.new("Knuckleheads")
|
33
|
+
player = Player.new("moe")
|
34
|
+
|
35
|
+
game.add_players(player)
|
36
|
+
|
37
|
+
game.play(1)
|
38
|
+
|
39
|
+
expect(player.points).not_to be_zero
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
require "studio_game/player"
|
2
|
+
|
3
|
+
module StudioGame
|
4
|
+
describe Player do
|
5
|
+
|
6
|
+
before do
|
7
|
+
@initial_health = 150
|
8
|
+
@player = Player.new("larry",@initial_health)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "has a capitalize name" do
|
12
|
+
|
13
|
+
expect(@player.name).to eq("Larry")
|
14
|
+
end
|
15
|
+
|
16
|
+
it "has an initial health" do
|
17
|
+
expect(@player.health).to eq(150)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "has a string representation" do
|
21
|
+
expect(@player.to_s).to eq("I am Larry with health of 150 and a score of 150")
|
22
|
+
end
|
23
|
+
it "computes a score of the sum of the health and length of the name" do
|
24
|
+
@player.found_treasure(Treasure.new(:hammer,50))
|
25
|
+
@player.found_treasure(Treasure.new(:hammer,50))
|
26
|
+
expect(@player.to_s).to eq("I am Larry with health of 150 and a score of 250")
|
27
|
+
end
|
28
|
+
it "increases health by 15 when woot" do
|
29
|
+
@player.woot
|
30
|
+
expect(@player.health).to eq(165)
|
31
|
+
end
|
32
|
+
it "decreaes health by 10 when blam" do
|
33
|
+
@player.blam
|
34
|
+
expect(@player.health).to eq(140)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "computes points as the sum of all treasure points" do
|
38
|
+
expect(@player.points).to eq(0)
|
39
|
+
|
40
|
+
@player.found_treasure(Treasure.new(:hammer,50))
|
41
|
+
expect(@player.points).to eq(50)
|
42
|
+
|
43
|
+
@player.found_treasure(Treasure.new(:crowbar,400))
|
44
|
+
expect(@player.points).to eq(450)
|
45
|
+
|
46
|
+
@player.found_treasure(Treasure.new(:hammer,50))
|
47
|
+
expect(@player.points).to eq(500)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "yields each treasure found and it's total points" do
|
51
|
+
|
52
|
+
@player.found_treasure(Treasure.new(:hammer,50))
|
53
|
+
@player.found_treasure(Treasure.new(:crowbar,400))
|
54
|
+
@player.found_treasure(Treasure.new(:bow,100))
|
55
|
+
@player.found_treasure(Treasure.new(:crowbar,400))
|
56
|
+
@player.found_treasure(Treasure.new(:crowbar,400))
|
57
|
+
@player.found_treasure(Treasure.new(:bow,100))
|
58
|
+
|
59
|
+
yielded = []
|
60
|
+
@player.each_treasure do |treasure|
|
61
|
+
yielded << treasure
|
62
|
+
end
|
63
|
+
|
64
|
+
yielded.should == [
|
65
|
+
Treasure.new(:hammer, 50),
|
66
|
+
Treasure.new(:crowbar, 1200),
|
67
|
+
Treasure.new(:bow, 200)
|
68
|
+
]
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
|
73
|
+
context "Player has a health above 150" do
|
74
|
+
|
75
|
+
before do
|
76
|
+
@player = Player.new("moe",150)
|
77
|
+
end
|
78
|
+
|
79
|
+
it "player is strong when health is 150" do
|
80
|
+
expect(@player).to be_strong
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
context "Player has a health above 100" do
|
86
|
+
|
87
|
+
before do
|
88
|
+
@player = Player.new("moe",100)
|
89
|
+
end
|
90
|
+
|
91
|
+
it "player is not strong when health is below 100" do
|
92
|
+
expect(@player).to_not be_strong
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
end
|
97
|
+
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 "should have a name attribute" do
|
11
|
+
expect(@treasure.name).to eq(:hammer)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should have points attribute" do
|
15
|
+
expect(@treasure.points).to eq(50)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
describe TreasureTrove do
|
21
|
+
|
22
|
+
it "has six trophies" do
|
23
|
+
expect(TreasureTrove::TREASURES.size).to eq(6)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "has a pie worth 5 points" do
|
27
|
+
expect(TreasureTrove::TREASURES[0]).to eq(Treasure.new(:pie,5))
|
28
|
+
end
|
29
|
+
|
30
|
+
it "has a bottle worth 25 points" do
|
31
|
+
expect(TreasureTrove::TREASURES[1]).to eq(Treasure.new(:bottle,25))
|
32
|
+
end
|
33
|
+
|
34
|
+
it "has a hammer worth 50 points" do
|
35
|
+
expect(TreasureTrove::TREASURES[2]).to eq(Treasure.new(:hammer,50))
|
36
|
+
end
|
37
|
+
|
38
|
+
it "has a skillet worth 100 points"do
|
39
|
+
expect(TreasureTrove::TREASURES[3]).to eq(Treasure.new(:skillet,100))
|
40
|
+
end
|
41
|
+
|
42
|
+
it "has a broomstick worth 200 points"do
|
43
|
+
expect(TreasureTrove::TREASURES[4]).to eq(Treasure.new(:broomstick,200))
|
44
|
+
end
|
45
|
+
|
46
|
+
it "has a crowbar worth 400 points" do
|
47
|
+
expect(TreasureTrove::TREASURES[5]).to eq(Treasure.new(:crowbar,400))
|
48
|
+
end
|
49
|
+
|
50
|
+
it "returns a random treasure" do
|
51
|
+
treasure = TreasureTrove.random
|
52
|
+
expect(TreasureTrove::TREASURES).to include(treasure)
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
metadata
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: studio_game_constantine
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Gabriel Su Mi Ren
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-01-30 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: Thank you Mike and Nicole on your awesome tutorial on ruby!
|
28
|
+
email: constantine92@example.com
|
29
|
+
executables:
|
30
|
+
- studio_game
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- LICENSE
|
35
|
+
- README
|
36
|
+
- bin/high_scores.txt
|
37
|
+
- bin/my_favourite_players.csv
|
38
|
+
- bin/players.csv
|
39
|
+
- bin/studio_game
|
40
|
+
- lib/studio_game/auditable.rb
|
41
|
+
- lib/studio_game/berserk_player.rb
|
42
|
+
- lib/studio_game/clumsy_player.rb
|
43
|
+
- lib/studio_game/die.rb
|
44
|
+
- lib/studio_game/game.rb
|
45
|
+
- lib/studio_game/game_turn.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
|
+
homepage: https://www.youtube.com/
|
56
|
+
licenses:
|
57
|
+
- MIT
|
58
|
+
metadata: {}
|
59
|
+
post_install_message:
|
60
|
+
rdoc_options: []
|
61
|
+
require_paths:
|
62
|
+
- lib
|
63
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '1.9'
|
68
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '0'
|
73
|
+
requirements: []
|
74
|
+
rubyforge_project:
|
75
|
+
rubygems_version: 2.5.1
|
76
|
+
signing_key:
|
77
|
+
specification_version: 4
|
78
|
+
summary: Simple ruby game tutorial from Pragmatic Studio
|
79
|
+
test_files:
|
80
|
+
- spec/studio_game/player_spec.rb
|
81
|
+
- spec/studio_game/berserk_player_spec.rb
|
82
|
+
- spec/studio_game/treasure_trove_spec.rb
|
83
|
+
- spec/studio_game/game_spec.rb
|
84
|
+
- spec/studio_game/clumsy_player_spec.rb
|