studio_gem 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/bin/studio_gem +2 -0
- data/files/players.csv +3 -0
- data/lib/auditable.rb +5 -0
- data/lib/berserkplayer.rb +36 -0
- data/lib/bonus.rb +12 -0
- data/lib/clumsy_player.rb +20 -0
- data/lib/die.rb +13 -0
- data/lib/game.rb +90 -0
- data/lib/game_turn.rb +16 -0
- data/lib/high_score.txt +12 -0
- data/lib/loaded_die.rb +13 -0
- data/lib/playable.rb +19 -0
- data/lib/player.rb +61 -0
- data/lib/studio_game.rb +22 -0
- data/lib/treasure_trove.rb +13 -0
- metadata +60 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 6b67fe71b9f679816ab3297b472e2822db66ae1c978c4a9d68112824fce04161
|
|
4
|
+
data.tar.gz: '089a062c1753f6828201d0dbde5eaaa8fe42351e6e5458a7dc32736309739364'
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: baa8520ea115d7d969230a0893827396bccea6cab281978c841de4399e204e3c8a355db15fb0e998f663e22f4a7f2407d0de75c2cf278bc4c1577f2624cfbc54
|
|
7
|
+
data.tar.gz: e8d20f12311159e9db5ea2d26070f37a16a49ea45f4279cbb10e4788c1c64f05ebbdab6e40424e17157e83ae6b44edad7f9846978aea42cf94f61b677b172eb6
|
data/bin/studio_gem
ADDED
data/files/players.csv
ADDED
data/lib/auditable.rb
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require_relative "./player"
|
|
2
|
+
class BerserkPlayer < Player
|
|
3
|
+
attr_reader :w00tcount
|
|
4
|
+
def initialize(name, health)
|
|
5
|
+
super(name, health)
|
|
6
|
+
@w00tcount = 0
|
|
7
|
+
end
|
|
8
|
+
def w00t
|
|
9
|
+
@w00tcount += 1
|
|
10
|
+
if @w00tcount > 5
|
|
11
|
+
puts "#{name} is berserk!!"
|
|
12
|
+
end
|
|
13
|
+
super()
|
|
14
|
+
end
|
|
15
|
+
def blam
|
|
16
|
+
if @w00tcount > 5
|
|
17
|
+
w00t
|
|
18
|
+
else
|
|
19
|
+
super()
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
def berserk?
|
|
23
|
+
if @w00tcount > 5
|
|
24
|
+
true
|
|
25
|
+
else
|
|
26
|
+
false
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
if __FILE__ == $0
|
|
31
|
+
berserker = BerserkPlayer.new("berserker", 50)
|
|
32
|
+
6.times{berserker.w00t}
|
|
33
|
+
2.times{berserker.blam}
|
|
34
|
+
puts berserker.health
|
|
35
|
+
puts berserker.berserk?
|
|
36
|
+
end
|
data/lib/bonus.rb
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require_relative "./player"
|
|
2
|
+
class ClumsyPlayer < Player
|
|
3
|
+
def found_treasure(treasure)
|
|
4
|
+
@found_treasures[treasure.name] += Integer(treasure.point/2.0)
|
|
5
|
+
puts "#{@name} found a treasure #{treasure.name} of worth #{treasure.point/2}"
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
if __FILE__ == $0
|
|
9
|
+
clumsy = ClumsyPlayer.new("klutz")
|
|
10
|
+
hammer = Treasure.new(:hammer,50)
|
|
11
|
+
clumsy.found_treasure(hammer)
|
|
12
|
+
clumsy.found_treasure(hammer)
|
|
13
|
+
clumsy.found_treasure(hammer)
|
|
14
|
+
crowbar = Treasure.new(:crowbar,400)
|
|
15
|
+
clumsy.found_treasure(crowbar)
|
|
16
|
+
clumsy.each_found_treasure do |treasure|
|
|
17
|
+
puts "#{treasure.point} total #{treasure.name} points"
|
|
18
|
+
end
|
|
19
|
+
puts "#{clumsy.points} grand total points"
|
|
20
|
+
end
|
data/lib/die.rb
ADDED
data/lib/game.rb
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
require_relative "./player"
|
|
2
|
+
require_relative "./die"
|
|
3
|
+
require_relative "./game_turn"
|
|
4
|
+
require_relative "./treasure_trove"
|
|
5
|
+
class Game
|
|
6
|
+
$total_points =0
|
|
7
|
+
attr_reader :title, :players
|
|
8
|
+
def initialize(title)
|
|
9
|
+
@title = title
|
|
10
|
+
@players = []
|
|
11
|
+
@strong = []
|
|
12
|
+
@wimpy = []
|
|
13
|
+
@files = []
|
|
14
|
+
end
|
|
15
|
+
def load_player(file_path)
|
|
16
|
+
File.open(file_path) do |aFile|
|
|
17
|
+
aFile.each_line do |line|
|
|
18
|
+
@files<<line
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
@files.each do |i|
|
|
22
|
+
add_player(Player.from_csv(i))
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
def add_player(player)
|
|
26
|
+
@players.push(player)
|
|
27
|
+
end
|
|
28
|
+
def print_name_and_health(player)
|
|
29
|
+
puts "#{player.name}(#{player.health})"
|
|
30
|
+
end
|
|
31
|
+
def print_stats
|
|
32
|
+
puts "#{@title} Statistatics :- \n\n"
|
|
33
|
+
@strong,@wimpy = @players.partition{|player| player.strong?}
|
|
34
|
+
puts "#{@strong.length} strong player:"
|
|
35
|
+
@strong.each do |player|
|
|
36
|
+
print_name_and_health(player)
|
|
37
|
+
end
|
|
38
|
+
puts "#{@wimpy.length} Wimpy player : "
|
|
39
|
+
@wimpy.each do |player|
|
|
40
|
+
print_name_and_health(player)
|
|
41
|
+
end
|
|
42
|
+
puts "#{@title} High Score : "
|
|
43
|
+
@players.sort.each do |player|
|
|
44
|
+
puts "#{player.name.ljust(10,".")}#{player.score}"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
puts "Points Table"
|
|
48
|
+
@players.each do |player|
|
|
49
|
+
puts "#{player.name} points table:"
|
|
50
|
+
puts "#{player.points} grand total !!"
|
|
51
|
+
|
|
52
|
+
end
|
|
53
|
+
puts total_points
|
|
54
|
+
@players.each do |player|
|
|
55
|
+
player.each_found_treasure do |treasure|
|
|
56
|
+
puts "#{treasure.name.ljust(10,".")}#{treasure.point}"
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
def play(count)
|
|
61
|
+
1.upto(count.to_i) do |time|
|
|
62
|
+
puts "Round #{time}"
|
|
63
|
+
@players.each do |player|
|
|
64
|
+
GameTurn.take_turn(player)
|
|
65
|
+
puts player
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
treasure = TreasureTrove::TREASURES
|
|
69
|
+
puts "There are #{treasure.size} treasures to be found"
|
|
70
|
+
treasure.each do |treasure|
|
|
71
|
+
puts "A #{treasure.name} is worth #{treasure.point} points"
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
def total_points
|
|
75
|
+
@players.each do |player|
|
|
76
|
+
player.found_treasures.each do |key,value|
|
|
77
|
+
$total_points += value
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
$total_points
|
|
81
|
+
end
|
|
82
|
+
def save_high_score(file_name = "high_score.txt")
|
|
83
|
+
file = File .open(file_name,"a")
|
|
84
|
+
file.puts "knucleheads high scores!!!!"
|
|
85
|
+
players.sort.each do |player|
|
|
86
|
+
file.puts "#{player.name.ljust(10,".")}#{player.score}"
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
data/lib/game_turn.rb
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module GameTurn
|
|
2
|
+
def self.take_turn(player)
|
|
3
|
+
die = Die.new
|
|
4
|
+
case die.roll
|
|
5
|
+
when 5..6
|
|
6
|
+
player.w00t
|
|
7
|
+
when 1..2
|
|
8
|
+
player.blam
|
|
9
|
+
when 3..4
|
|
10
|
+
puts "#{player.name} was skipped"
|
|
11
|
+
end
|
|
12
|
+
player.found_treasure(TreasureTrove.random)
|
|
13
|
+
puts "#{player.name} treasures: #{player.found_treasures}"
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
data/lib/high_score.txt
ADDED
data/lib/loaded_die.rb
ADDED
data/lib/playable.rb
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Playable
|
|
2
|
+
def blam
|
|
3
|
+
@health = @health - 10
|
|
4
|
+
puts "#{name} got blammed!"
|
|
5
|
+
health
|
|
6
|
+
end
|
|
7
|
+
def w00t
|
|
8
|
+
@health = @health + 15
|
|
9
|
+
puts "#{name} got w00ted!!"
|
|
10
|
+
@health
|
|
11
|
+
end
|
|
12
|
+
def strong?
|
|
13
|
+
if @health >100
|
|
14
|
+
return true
|
|
15
|
+
else
|
|
16
|
+
return false
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
data/lib/player.rb
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
require_relative "./treasure_trove.rb"
|
|
2
|
+
require_relative "./playable.rb"
|
|
3
|
+
class Player
|
|
4
|
+
include Playable
|
|
5
|
+
attr_accessor :hash, :found_treasures
|
|
6
|
+
attr_writer :health
|
|
7
|
+
def initialize(name,health=100)
|
|
8
|
+
@name = name.capitalize
|
|
9
|
+
@health = health
|
|
10
|
+
@found_treasures = Hash.new(0)
|
|
11
|
+
end
|
|
12
|
+
def self.from_csv(line)
|
|
13
|
+
name,health = line.split(",")
|
|
14
|
+
if health.nil?
|
|
15
|
+
health = "100"
|
|
16
|
+
end
|
|
17
|
+
Player.new(name,health.to_i)
|
|
18
|
+
end
|
|
19
|
+
def to_s
|
|
20
|
+
"I'm #{@name} with a health of #{@health} and a score of #{score}"
|
|
21
|
+
end
|
|
22
|
+
def health
|
|
23
|
+
@health
|
|
24
|
+
end
|
|
25
|
+
def name
|
|
26
|
+
@name
|
|
27
|
+
end
|
|
28
|
+
def name=(name)
|
|
29
|
+
@name = name.capitalize
|
|
30
|
+
end
|
|
31
|
+
def score
|
|
32
|
+
@health + self.points
|
|
33
|
+
end
|
|
34
|
+
def <=>(other_player)
|
|
35
|
+
other_player.score <=> score
|
|
36
|
+
end
|
|
37
|
+
def found_treasure(treasure)
|
|
38
|
+
@found_treasures[treasure.name] += Integer(treasure.point)
|
|
39
|
+
puts "#{name} found a treasure #{treasure.name} of worth #{treasure.point}"
|
|
40
|
+
end
|
|
41
|
+
def points
|
|
42
|
+
all_points = 0
|
|
43
|
+
@found_treasures.each do |treasure|
|
|
44
|
+
all_points += treasure.last
|
|
45
|
+
end
|
|
46
|
+
all_points
|
|
47
|
+
end
|
|
48
|
+
def each_found_treasure
|
|
49
|
+
@found_treasures.each do |treasure|
|
|
50
|
+
obj = Treasure.new(treasure.first,treasure.last)
|
|
51
|
+
yield obj
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
def to_csv
|
|
55
|
+
"#{name.ljust(10,".")} #{score}"
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
if __FILE__ == $0
|
|
59
|
+
player = Player.new("moe")
|
|
60
|
+
puts player.points
|
|
61
|
+
end
|
data/lib/studio_game.rb
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require_relative "./game"
|
|
2
|
+
require_relative "./clumsy_player"
|
|
3
|
+
require_relative "./berserkplayer"
|
|
4
|
+
clumsy = ClumsyPlayer.new("klutz",105)
|
|
5
|
+
berserker = BerserkPlayer.new("berserker",50)
|
|
6
|
+
knuckleheads = Game.new("Knuckleheads")
|
|
7
|
+
puts knuckleheads.title
|
|
8
|
+
knuckleheads.add_player(clumsy)
|
|
9
|
+
knuckleheads.add_player(berserker)
|
|
10
|
+
knuckleheads.load_player(File.expand_path("../../files/players.csv",__FILE__))
|
|
11
|
+
loop do
|
|
12
|
+
puts "Enter the number of times you want to run the code or exit"
|
|
13
|
+
n = gets
|
|
14
|
+
case n
|
|
15
|
+
when /^\d+/
|
|
16
|
+
knuckleheads.play(n)
|
|
17
|
+
knuckleheads.print_stats
|
|
18
|
+
knuckleheads.save_high_score
|
|
19
|
+
when exit
|
|
20
|
+
break
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
Treasure = Struct.new(:name, :point)
|
|
2
|
+
module TreasureTrove
|
|
3
|
+
TREASURES=Array.new
|
|
4
|
+
TREASURES<<Treasure.new("pie", 5)
|
|
5
|
+
TREASURES<<Treasure.new("bottle", 25)
|
|
6
|
+
TREASURES<<Treasure.new("hammer", 50)
|
|
7
|
+
TREASURES<<Treasure.new("skillet", 100)
|
|
8
|
+
TREASURES<<Treasure.new("broomstick", 200)
|
|
9
|
+
TREASURES<<Treasure.new("crowbar", 400)
|
|
10
|
+
def self.random
|
|
11
|
+
TreasureTrove::TREASURES.shuffle.first
|
|
12
|
+
end
|
|
13
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: studio_gem
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- triptibhangade
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2019-06-20 00:00:00.000000000 Z
|
|
12
|
+
dependencies: []
|
|
13
|
+
description:
|
|
14
|
+
email:
|
|
15
|
+
- tripti.bhangade@gemsessence.com
|
|
16
|
+
executables:
|
|
17
|
+
- studio_gem
|
|
18
|
+
extensions: []
|
|
19
|
+
extra_rdoc_files: []
|
|
20
|
+
files:
|
|
21
|
+
- bin/studio_gem
|
|
22
|
+
- files/players.csv
|
|
23
|
+
- lib/auditable.rb
|
|
24
|
+
- lib/berserkplayer.rb
|
|
25
|
+
- lib/bonus.rb
|
|
26
|
+
- lib/clumsy_player.rb
|
|
27
|
+
- lib/die.rb
|
|
28
|
+
- lib/game.rb
|
|
29
|
+
- lib/game_turn.rb
|
|
30
|
+
- lib/high_score.txt
|
|
31
|
+
- lib/loaded_die.rb
|
|
32
|
+
- lib/playable.rb
|
|
33
|
+
- lib/player.rb
|
|
34
|
+
- lib/studio_game.rb
|
|
35
|
+
- lib/treasure_trove.rb
|
|
36
|
+
homepage: http://gemsessence.com
|
|
37
|
+
licenses:
|
|
38
|
+
- Nonstandard
|
|
39
|
+
metadata: {}
|
|
40
|
+
post_install_message:
|
|
41
|
+
rdoc_options: []
|
|
42
|
+
require_paths:
|
|
43
|
+
- lib
|
|
44
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
45
|
+
requirements:
|
|
46
|
+
- - ">="
|
|
47
|
+
- !ruby/object:Gem::Version
|
|
48
|
+
version: '0'
|
|
49
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - ">="
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '0'
|
|
54
|
+
requirements: []
|
|
55
|
+
rubyforge_project:
|
|
56
|
+
rubygems_version: 2.7.6
|
|
57
|
+
signing_key:
|
|
58
|
+
specification_version: 4
|
|
59
|
+
summary: Players
|
|
60
|
+
test_files: []
|