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 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
+
@@ -0,0 +1,3 @@
1
+ Alvin,100
2
+ Simon,60
3
+ Theo,125
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,9 @@
1
+ require_relative 'exercise11play.rb'
2
+
3
+ module PAUL
4
+ File.readlines("exercise19nplayer.csv").each do |line|
5
+ name, health = line.split(',')
6
+ player = Player.new(name, health.to_i)
7
+ puts player
8
+ end
9
+ 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
@@ -0,0 +1,7 @@
1
+
2
+ module Auditable
3
+ def audit
4
+ puts "\nRolled a #{self.number} (#{self.class})\n"
5
+ end
6
+ end
7
+
@@ -0,0 +1,15 @@
1
+ require_relative 'exercise21audit'
2
+
3
+
4
+ module 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
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: []