salubre_sample_code311 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/SALUBRE +42 -0
- data/bin/exercise19nplayer.csv +3 -0
- data/lib/PAUL/die.rb +25 -0
- data/lib/PAUL/exercise11game.rb +123 -0
- data/lib/PAUL/exercise11play.rb +39 -0
- data/lib/PAUL/exercise16.rb +18 -0
- data/lib/PAUL/exercise19files.rb +9 -0
- data/lib/PAUL/exercise20.rb +35 -0
- data/lib/PAUL/exercise20ber.rb +39 -0
- data/lib/PAUL/exercise21.rb +25 -0
- data/lib/PAUL/exercise21audit.rb +7 -0
- data/lib/PAUL/exercise21load.rb +15 -0
- metadata +55 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: e8021063b9af97238477b256b58dc34cb170bd2489b3bdb021692ca5eec48268
|
4
|
+
data.tar.gz: 94c2469b95e63db0febd263f27afd35c0f7796d9834077b6ac5f311faf9ce242
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d53a307bef243a3f8c77060e708c4ed762b1707fc23fc46bb8e714ae5271d79285c1a206cdb4c58bda01f4982bce6d237d8b7e05ad8595722aa6c5ad00a73f6e
|
7
|
+
data.tar.gz: 4b9721ebeaf1b5f9c1ce1c73788d1cacab72f6ed880c7fa576118ac7497bac2654d6bbc092c1fa9f12dd1cf7c82f23268ec50a0dad98251a542aaf7de87705f2
|
data/bin/SALUBRE
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require_relative '../lib/PAUL/exercise11play'
|
3
|
+
require_relative '../lib/PAUL/exercise11game'
|
4
|
+
require_relative '../lib/PAUL/die'
|
5
|
+
require_relative '../lib/PAUL/exercise16'
|
6
|
+
# require_relative 'exercise19files'
|
7
|
+
require_relative '../lib/PAUL/exercise20'
|
8
|
+
require_relative '../lib/PAUL/exercise20ber'
|
9
|
+
|
10
|
+
|
11
|
+
# player1 = Player.new("moe")
|
12
|
+
# player2 = Player.new("larry", 60)
|
13
|
+
# player3 = Player.new("curly", 125)
|
14
|
+
|
15
|
+
knuckleheads = PAUL::Game.new("Knuckleheads")
|
16
|
+
default_player_file = File.join(File.dirname(__FILE__), 'exercise19nplayer.csv')
|
17
|
+
knuckleheads.load_players(ARGV.shift || default_player_file)
|
18
|
+
|
19
|
+
klutz = PAUL::ClumsyPlayer.new("\nklutz", 50)
|
20
|
+
knuckleheads.add_player(klutz)
|
21
|
+
berserker = PAUL::Berserk.new("Berserker", 50)
|
22
|
+
knuckleheads.add_player(berserker)
|
23
|
+
|
24
|
+
|
25
|
+
# knuckleheads.save_high_scores
|
26
|
+
|
27
|
+
loop do
|
28
|
+
puts "\nHow many game rounds? ('quit' to exit)"
|
29
|
+
answer = gets.chomp.downcase
|
30
|
+
|
31
|
+
case answer
|
32
|
+
when /^\d+$/
|
33
|
+
knuckleheads.play(answer.to_i)
|
34
|
+
when 'quit', 'exit'
|
35
|
+
knuckleheads.print_stats
|
36
|
+
break
|
37
|
+
else
|
38
|
+
puts "<<??// HTTP ERROR 401 (UNAUTHORIZED) ...//??>>\n <<??//HTTP ERROR 400 (BAD REQUEST) ...//??>>\n <<??//HTTP ERROR 403 (FORBIDDEN) ...//??>>\n <<??//HTTP ERROR 404 (NOT FOUND) ...//??>>\n <<??//HTTP ERROR 500 (INTERNAL SERVER ERROR)//??>>"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
|
data/lib/PAUL/die.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require_relative 'exercise11game'
|
2
|
+
require_relative 'exercise11play'
|
3
|
+
require_relative 'exercise16'
|
4
|
+
|
5
|
+
|
6
|
+
module PAUL
|
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
|
+
puts "#{player.name} found a #{treasure.name} worth #{treasure.points} points."
|
21
|
+
puts player.found_treasure(treasure)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
@@ -0,0 +1,123 @@
|
|
1
|
+
|
2
|
+
require_relative 'exercise11play'
|
3
|
+
require_relative 'die'
|
4
|
+
require_relative 'exercise16'
|
5
|
+
require_relative 'exercise21audit'
|
6
|
+
|
7
|
+
module PAUL
|
8
|
+
class Die
|
9
|
+
include Auditable
|
10
|
+
|
11
|
+
attr_reader :number
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
roll
|
15
|
+
end
|
16
|
+
|
17
|
+
def roll
|
18
|
+
@number = rand(1..6)
|
19
|
+
audit
|
20
|
+
@number
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
module PAUL
|
26
|
+
class Game
|
27
|
+
def initialize (name)
|
28
|
+
@name = name
|
29
|
+
@player = []
|
30
|
+
end
|
31
|
+
|
32
|
+
def add_player(player)
|
33
|
+
@player << player
|
34
|
+
end
|
35
|
+
|
36
|
+
def total_points
|
37
|
+
@player.reduce(0) { |sum, player| sum + player.points }
|
38
|
+
end
|
39
|
+
|
40
|
+
def load_players(default_player_file)
|
41
|
+
File.readlines(default_player_file).each do |line|
|
42
|
+
name, health = line.split(',')
|
43
|
+
player = PAUL::Player.new(name, Integer(health))
|
44
|
+
add_player(player)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# def save_high_scores(to_file="high_scores.txt")
|
49
|
+
# File.open(to_file, "w") do |file|
|
50
|
+
# file.puts "#{@title} High Scores:"
|
51
|
+
# # @player.sort.each do |player|
|
52
|
+
# # formatted_name = player.name.ljust(20, '.')
|
53
|
+
# # file.puts "#{formatted_name} #{player.score}"
|
54
|
+
# # end
|
55
|
+
# end
|
56
|
+
# end
|
57
|
+
|
58
|
+
|
59
|
+
|
60
|
+
def print_stats
|
61
|
+
strong_players, wimpy_players = @player.partition { |player| player.strong? }
|
62
|
+
puts "\n#{@name} Statistics:"
|
63
|
+
|
64
|
+
puts "\n#{strong_players.size} strong players:"
|
65
|
+
strong_players.each do |player|
|
66
|
+
puts "#{player.name} (#{player.health})"
|
67
|
+
end
|
68
|
+
|
69
|
+
puts "\n#{wimpy_players.size} wimpy players:"
|
70
|
+
wimpy_players.each do |player|
|
71
|
+
puts "#{player.name} (#{player.health})"
|
72
|
+
end
|
73
|
+
|
74
|
+
sorted_players = @player.sort { |a, b| b.score <=> a.score }
|
75
|
+
|
76
|
+
puts "\n#{@name} High Scores:"
|
77
|
+
sorted_players.each do |player|
|
78
|
+
formatted_name = player.name.ljust(20, '.')
|
79
|
+
puts "#{formatted_name} #{player.score}"
|
80
|
+
end
|
81
|
+
|
82
|
+
@player.each do |player|
|
83
|
+
puts "\n#{player.name}'s point totals:"
|
84
|
+
player.each_found_treasure do |treasure|
|
85
|
+
puts "#{treasure.points} total #{treasure.name} points."
|
86
|
+
end
|
87
|
+
puts "#{player.points} grand total points"
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
91
|
+
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
|
96
|
+
def play(rounds)
|
97
|
+
puts "There are #{@player.length} in #{@name}'s playlist: "
|
98
|
+
|
99
|
+
@player.each do |player|
|
100
|
+
puts player
|
101
|
+
end
|
102
|
+
|
103
|
+
treasures = TreasureTrove::TREASURES
|
104
|
+
puts "\nThere are #{treasures.size} treasures to be found:"
|
105
|
+
treasures.each do |treasure|
|
106
|
+
puts "A #{treasure.name} is worth #{treasure.points} points"
|
107
|
+
end
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
1.upto(rounds) do |count|
|
112
|
+
puts "\n round #{count}"
|
113
|
+
@player.each do |player|
|
114
|
+
GameTurn.take_turn(player)
|
115
|
+
puts player
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
|
121
|
+
|
122
|
+
end
|
123
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require_relative 'exercise11game'
|
2
|
+
require_relative 'die'
|
3
|
+
require_relative 'exercise16'
|
4
|
+
require_relative 'exercise21'
|
5
|
+
|
6
|
+
module PAUL
|
7
|
+
class Player
|
8
|
+
include Paul
|
9
|
+
|
10
|
+
attr_accessor :name, :health
|
11
|
+
|
12
|
+
def initialize(name, health=100)
|
13
|
+
@name = name.capitalize
|
14
|
+
@health = health
|
15
|
+
@found_treasures = Hash.new(0)
|
16
|
+
end
|
17
|
+
|
18
|
+
def each_found_treasure
|
19
|
+
@found_treasures.each do |name, points|
|
20
|
+
yield Treasure.new(name, points)
|
21
|
+
end
|
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
|
+
puts "#{@name}'s treasures: #{@found_treasures}"
|
28
|
+
end
|
29
|
+
|
30
|
+
def points
|
31
|
+
@found_treasures.values.reduce(0, :+)
|
32
|
+
end
|
33
|
+
|
34
|
+
def to_s
|
35
|
+
"I'm #{@name} with health of #{@health} and score of #{score}."
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
Treasure = Struct.new(:name, :points)
|
2
|
+
|
3
|
+
module PAUL
|
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
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require_relative 'exercise11play'
|
2
|
+
|
3
|
+
module PAUL
|
4
|
+
class ClumsyPlayer < Player
|
5
|
+
|
6
|
+
# def found_treasure(treasure)
|
7
|
+
# points = treasure.points / 2.0
|
8
|
+
# @found_treasures[treasure.name] += points
|
9
|
+
# puts "#{@name} found a #{treasure.name} worth #{points} points."
|
10
|
+
# end
|
11
|
+
|
12
|
+
def found_treasure(treasure)
|
13
|
+
damaged_treasure = Treasure.new(treasure.name, treasure.points / 2.0)
|
14
|
+
super(damaged_treasure)
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
# if __FILE__ == $0
|
20
|
+
# clumsy = ClumsyPlayer.new("klutz")
|
21
|
+
|
22
|
+
# hammer = Treasure.new(:hammer, 50)
|
23
|
+
# clumsy.found_treasure(hammer)
|
24
|
+
# clumsy.found_treasure(hammer)
|
25
|
+
# clumsy.found_treasure(hammer)
|
26
|
+
|
27
|
+
# crowbar = Treasure.new(:crowbar, 400)
|
28
|
+
# clumsy.found_treasure(crowbar)
|
29
|
+
|
30
|
+
# clumsy.each_found_treasure do |treasure|
|
31
|
+
# puts "#{treasure.points} total #{treasure.name} points"
|
32
|
+
# end
|
33
|
+
# puts "#{clumsy.points} grand total points"
|
34
|
+
# end
|
35
|
+
# end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require_relative 'exercise11play'
|
2
|
+
|
3
|
+
|
4
|
+
module PAUL
|
5
|
+
class Berserk < Player
|
6
|
+
|
7
|
+
def initialize(name, health=100)
|
8
|
+
super(name, health)
|
9
|
+
@w00t_count = 0
|
10
|
+
end
|
11
|
+
|
12
|
+
def berserk?
|
13
|
+
@w00t_count > 5
|
14
|
+
end
|
15
|
+
|
16
|
+
def w00t
|
17
|
+
super
|
18
|
+
@w00t_count += 1
|
19
|
+
puts "#{@name} is berserk!" if berserk?
|
20
|
+
end
|
21
|
+
|
22
|
+
def blam
|
23
|
+
if berserk?
|
24
|
+
w00t
|
25
|
+
else
|
26
|
+
super
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
# if __FILE__ == $0
|
33
|
+
# berserker = Berserk.new("berserker", 50)
|
34
|
+
# 6.times { berserker.w00t }
|
35
|
+
# 2.times { berserker.blam }
|
36
|
+
# puts berserker.health
|
37
|
+
# end
|
38
|
+
end
|
39
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Paul
|
2
|
+
|
3
|
+
def name
|
4
|
+
"#{@name}"
|
5
|
+
end
|
6
|
+
|
7
|
+
def score
|
8
|
+
@health + @name.length
|
9
|
+
end
|
10
|
+
|
11
|
+
def blam
|
12
|
+
@health -= 10
|
13
|
+
puts "#{@name} got blammed"
|
14
|
+
end
|
15
|
+
|
16
|
+
def w00t
|
17
|
+
@health += 15
|
18
|
+
puts "#{@name} got wooted"
|
19
|
+
end
|
20
|
+
|
21
|
+
def strong?
|
22
|
+
@health > 100
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: salubre_sample_code311
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Salubre, Paul Gabriel B.
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-02-01 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description:
|
14
|
+
email: paulgabrielsalubre2000@gmail.com
|
15
|
+
executables:
|
16
|
+
- SALUBRE
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- bin/SALUBRE
|
21
|
+
- bin/exercise19nplayer.csv
|
22
|
+
- lib/PAUL/die.rb
|
23
|
+
- lib/PAUL/exercise11game.rb
|
24
|
+
- lib/PAUL/exercise11play.rb
|
25
|
+
- lib/PAUL/exercise16.rb
|
26
|
+
- lib/PAUL/exercise19files.rb
|
27
|
+
- lib/PAUL/exercise20.rb
|
28
|
+
- lib/PAUL/exercise20ber.rb
|
29
|
+
- lib/PAUL/exercise21.rb
|
30
|
+
- lib/PAUL/exercise21audit.rb
|
31
|
+
- lib/PAUL/exercise21load.rb
|
32
|
+
homepage: http://pragmaticstudio.com
|
33
|
+
licenses:
|
34
|
+
- MIT
|
35
|
+
metadata: {}
|
36
|
+
post_install_message:
|
37
|
+
rdoc_options: []
|
38
|
+
require_paths:
|
39
|
+
- lib
|
40
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '1.9'
|
45
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
requirements: []
|
51
|
+
rubygems_version: 3.0.3
|
52
|
+
signing_key:
|
53
|
+
specification_version: 4
|
54
|
+
summary: dfsdfgsdg
|
55
|
+
test_files: []
|