sarge_gam 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/Agam19_input.csv +3 -0
- data/bin/Agam19_save.csv +1 -0
- data/bin/sarge_gam +60 -0
- data/lib/GamalielPelino/Agam11_split1.rb +58 -0
- data/lib/GamalielPelino/Agam11_split2.rb +114 -0
- data/lib/GamalielPelino/Agam13_Die.rb +12 -0
- data/lib/GamalielPelino/Agam16_symbol.rb +16 -0
- data/lib/GamalielPelino/Agam19_file.rb +4 -0
- data/lib/GamalielPelino/Agam20_1.rb +37 -0
- data/lib/GamalielPelino/Agam20_2.rb +31 -0
- data/lib/GamalielPelino/Agam21_audit.rb +5 -0
- data/lib/GamalielPelino/Agam21_loadedDie.rb +16 -0
- data/lib/GamalielPelino/Agam21_mix.rb +18 -0
- data/lib/GamalielPelino/agam14_module.rb +30 -0
- metadata +57 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 6638162a2825a230516042e8938e690cfc9684987ae27564e7a0ed54f3d202bc
|
|
4
|
+
data.tar.gz: 56f902f9547aa362aa209c44510aac8f58c4e1e059c4973bdbc04923ee89447f
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: a5b50409a9dcc0d984b35cc46a7d9b96c0cf09693727b3c4d63f4d8522f83d9500add6960c5e57d9394a5cbeccd46d4150b3057a692c56de1324fcc4da451488
|
|
7
|
+
data.tar.gz: eb290656849f244c636d13c160a19391980dd403414e109e7b297af28eb2ae7408b3f69c829f719dcddeb27f07dcdf3cb3ce8ee0f71df50120334edd8bc84629
|
data/bin/Agam19_save.csv
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
High Scores:
|
data/bin/sarge_gam
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require_relative '../lib/GamalielPelino/Agam11_split1'
|
|
4
|
+
require_relative '../lib/GamalielPelino/Agam11_split2'
|
|
5
|
+
require_relative '../lib/GamalielPelino/agam14_module'
|
|
6
|
+
require_relative '../lib/GamalielPelino/Agam16_symbol'
|
|
7
|
+
require_relative '../lib/GamalielPelino/Agam20_1'
|
|
8
|
+
require_relative '../lib/GamalielPelino/Agam20_2'
|
|
9
|
+
require_relative '../lib/GamalielPelino/Agam21_mix'
|
|
10
|
+
|
|
11
|
+
player1 = GamalielPelino::Player.new("moe")
|
|
12
|
+
player2 = GamalielPelino::Player.new("larry", 60)
|
|
13
|
+
player3 = GamalielPelino::Player.new("curly", 125)
|
|
14
|
+
|
|
15
|
+
knuckleheads = GamalielPelino::Game.new("knuckleheads")
|
|
16
|
+
default_player_file = File.join(File.dirname(__FILE__), 'Agam19_input.csv')
|
|
17
|
+
knuckleheads.load_players(ARGV.shift ||default_player_file)
|
|
18
|
+
|
|
19
|
+
# klutz = ClumsyPlayer.new("klutz", 105)
|
|
20
|
+
# knuckleheads.add_player(klutz)
|
|
21
|
+
|
|
22
|
+
# clumsy = ClumsyPlayer.new("klutz")
|
|
23
|
+
# hammer = Piece.new(:hammer, 50)
|
|
24
|
+
# clumsy.found_piece(hammer)
|
|
25
|
+
# clumsy.found_piece(hammer)
|
|
26
|
+
# clumsy.found_piece(hammer)
|
|
27
|
+
# crowbar = Piece.new(:crowbar, 400)
|
|
28
|
+
# clumsy.found_piece(crowbar)
|
|
29
|
+
# clumsy.each_found_piece do |itemss|
|
|
30
|
+
# puts "#{itemss.points} total #{itemss.item} points"
|
|
31
|
+
# end
|
|
32
|
+
# puts "#{clumsy.points} grand total points"
|
|
33
|
+
|
|
34
|
+
# berserker = BerserkerPLayer.new("Berserk", 50)
|
|
35
|
+
# knuckleheads.add_player(berserker)
|
|
36
|
+
|
|
37
|
+
# 6.times { berserker.w00t }
|
|
38
|
+
|
|
39
|
+
puts knuckleheads.title
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
loop do
|
|
43
|
+
puts" How many viewings? or ('exit' or 'quit') "
|
|
44
|
+
answer = gets.chomp.downcase
|
|
45
|
+
case answer
|
|
46
|
+
when /^\d+$/
|
|
47
|
+
knuckleheads.play(answer.to_i)
|
|
48
|
+
when 'quit' , 'exit'
|
|
49
|
+
knuckleheads.print_stats
|
|
50
|
+
knuckleheads.call_items
|
|
51
|
+
break
|
|
52
|
+
else
|
|
53
|
+
puts " Please enter a number or quit idiot"
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# knuckleheads.save_high_scores
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
require_relative 'Agam11_split2'
|
|
2
|
+
require_relative 'Agam16_symbol'
|
|
3
|
+
require_relative 'Agam21_mix'
|
|
4
|
+
|
|
5
|
+
module GamalielPelino
|
|
6
|
+
class Player
|
|
7
|
+
include Playable
|
|
8
|
+
|
|
9
|
+
attr_accessor :name, :health
|
|
10
|
+
def initialize(name, health=100)
|
|
11
|
+
@name = name.capitalize
|
|
12
|
+
@health = health
|
|
13
|
+
@found_pieces = Hash.new(0)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def name
|
|
17
|
+
"#{@name}"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def found_piece(itemss)
|
|
21
|
+
@found_pieces[itemss.item] += itemss.points
|
|
22
|
+
puts "#{@name}'s treasures: #{@found_pieces}"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def each_found_piece
|
|
27
|
+
@found_pieces.each do |item, points|
|
|
28
|
+
yield Piece.new(item, points)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def points
|
|
33
|
+
@found_pieces.values.reduce(0, :+)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def health
|
|
37
|
+
"#{@health}"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def score
|
|
41
|
+
halt = @health
|
|
42
|
+
halt += @name.length
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def self.from_csv(string)
|
|
46
|
+
name, health = string.split(',')
|
|
47
|
+
Player.new(name, Integer(health))
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def to_csv
|
|
51
|
+
"#{@name},#{@health}"
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def to_s
|
|
55
|
+
"I'm #{@name} with a health of #{@health} and my score is #{score}"
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
require_relative 'Agam11_split1'
|
|
2
|
+
require_relative 'agam14_module'
|
|
3
|
+
require_relative 'Agam16_symbol'
|
|
4
|
+
|
|
5
|
+
require_relative 'Agam21_audit'
|
|
6
|
+
|
|
7
|
+
module GamalielPelino
|
|
8
|
+
class Die
|
|
9
|
+
include Auditable
|
|
10
|
+
attr_reader :number
|
|
11
|
+
|
|
12
|
+
def initialize
|
|
13
|
+
roll
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def roll
|
|
17
|
+
@number = rand(1..6)
|
|
18
|
+
audit
|
|
19
|
+
@number
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
module GamalielPelino
|
|
25
|
+
class Game
|
|
26
|
+
|
|
27
|
+
def initialize(playlist)
|
|
28
|
+
@playlist = playlist
|
|
29
|
+
@players = []
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def add_player(player)
|
|
33
|
+
@players << player
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def play(rounds)
|
|
37
|
+
puts "There are #{@players.size} players in #{@playlist}:"
|
|
38
|
+
|
|
39
|
+
@players.each do |player|
|
|
40
|
+
puts player
|
|
41
|
+
end
|
|
42
|
+
1.upto(rounds) do |count|
|
|
43
|
+
puts "\n rounds #{count}"
|
|
44
|
+
@players.each do |player|
|
|
45
|
+
GameTurn.take_turn(player)
|
|
46
|
+
puts player
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def load_players(default_player_file)
|
|
53
|
+
File.readlines(default_player_file).each do |line|
|
|
54
|
+
add_player(Player.from_csv(line))
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# def save_high_scores(to_file="Agam19_save.csv")
|
|
59
|
+
# File.open(to_file, "w") do |file|
|
|
60
|
+
# file.puts "#{@title} High Scores:"
|
|
61
|
+
# @players.sort.each do |player|
|
|
62
|
+
# file.puts player.to_csv
|
|
63
|
+
# end
|
|
64
|
+
# end
|
|
65
|
+
# end
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def print_stats
|
|
69
|
+
strong_players, wimpy_players = @players.partition { |player| player.strong? }
|
|
70
|
+
|
|
71
|
+
puts "\n#{@title} Statistics:"
|
|
72
|
+
|
|
73
|
+
puts "#{strong_players.size} strong players:"
|
|
74
|
+
|
|
75
|
+
strong_players.each do |player|
|
|
76
|
+
puts "#{player.name} (#{player.health})"
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
puts "\n#{wimpy_players.size} wimpy players:"
|
|
80
|
+
|
|
81
|
+
wimpy_players.each do |player|
|
|
82
|
+
puts "#{player.name} (#{player.health})"
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
sorted_players = @players.sort { |a, b| b.score <=> a.score }
|
|
86
|
+
|
|
87
|
+
puts "\n#{@title} High Scores:"
|
|
88
|
+
|
|
89
|
+
sorted_players.each do |player|
|
|
90
|
+
formatted_name = player.name.ljust(20, '.')
|
|
91
|
+
puts "#{formatted_name} #{player.score}"
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# puts "\n#{@title} High Scores:"
|
|
95
|
+
# @players.sort.each do |player|
|
|
96
|
+
# puts high_score_entry(player)
|
|
97
|
+
# end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def title
|
|
101
|
+
"==#{@playlist}=="
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def call_items
|
|
105
|
+
items = Item::PIECE
|
|
106
|
+
puts "\n There are #{items.size} treasure to be found:"
|
|
107
|
+
|
|
108
|
+
items.each do |call|
|
|
109
|
+
puts "A #{call.item} is worth #{call.points} points"
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
|
|
2
|
+
Piece = Struct.new(:item, :points)
|
|
3
|
+
|
|
4
|
+
module Item
|
|
5
|
+
PIECE = [
|
|
6
|
+
Piece.new(:pie, 5),
|
|
7
|
+
Piece.new(:bottle,25),
|
|
8
|
+
Piece.new(:hammer,50),
|
|
9
|
+
Piece.new(:skillet,50),
|
|
10
|
+
Piece.new(:broomstick,200),
|
|
11
|
+
Piece.new(:crowbar,400)
|
|
12
|
+
]
|
|
13
|
+
def self.random
|
|
14
|
+
PIECE.sample
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require_relative 'Agam11_split1'
|
|
2
|
+
require_relative 'agam14_module'
|
|
3
|
+
|
|
4
|
+
module GamalielPelino
|
|
5
|
+
class ClumsyPlayer < Player
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
# def found_piece(itemss)
|
|
9
|
+
# Piece.new(itemss.item, itemss.points / 2.0)
|
|
10
|
+
# damaged_piece = Piece.new(itemss.item, itemss.points / 2.0)
|
|
11
|
+
# super(damaged_piece)
|
|
12
|
+
# end
|
|
13
|
+
|
|
14
|
+
def found_piece(itemss)
|
|
15
|
+
points = itemss.points / 2.0
|
|
16
|
+
@found_pieces[itemss.item] += points
|
|
17
|
+
puts "#{@name} found a #{itemss.item} worth #{points} points."
|
|
18
|
+
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
# if __FILE__ == $0
|
|
24
|
+
# clumsy = ClumsyPlayer.new("klutz")
|
|
25
|
+
# hammer = Piece.new(:hammer, 50)
|
|
26
|
+
# clumsy.found_piece(hammer)
|
|
27
|
+
# clumsy.found_piece(hammer)
|
|
28
|
+
# clumsy.found_piece(hammer)
|
|
29
|
+
# crowbar = Piece.new(:crowbar, 400)
|
|
30
|
+
# clumsy.found_piece(crowbar)
|
|
31
|
+
# clumsy.each_found_piece do |itemss|
|
|
32
|
+
# puts "#{itemss.points} total #{itemss.item} points"
|
|
33
|
+
# end
|
|
34
|
+
# puts "#{clumsy.points} grand total points"
|
|
35
|
+
|
|
36
|
+
# end
|
|
37
|
+
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require_relative 'Agam11_split1'
|
|
2
|
+
require_relative 'Agam11_split2'
|
|
3
|
+
module GamalielPelino
|
|
4
|
+
class BerserkerPLayer < Player
|
|
5
|
+
|
|
6
|
+
def initialize(name, health=100)
|
|
7
|
+
super(name, health)
|
|
8
|
+
@w00t_count = 0
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def berserk?
|
|
12
|
+
@w00t_count > 5
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def w00t
|
|
16
|
+
super
|
|
17
|
+
@w00t_count +=1
|
|
18
|
+
puts "#{@name} is berserk!" if berserk?
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def blam
|
|
22
|
+
berserk? ? w00t : super
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
# if __FILE__ == $0
|
|
28
|
+
# berserker = BerserkerPLayer.new("berserker", 50)
|
|
29
|
+
# 6.times { berserker.w00t }
|
|
30
|
+
# end
|
|
31
|
+
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require_relative 'Agam11_split2'
|
|
2
|
+
require_relative 'Agam11_split1'
|
|
3
|
+
require_relative 'Agam16_symbol'
|
|
4
|
+
require_relative 'Agam21_loadedDie'
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
module GameTurn
|
|
9
|
+
def self.take_turn(player)
|
|
10
|
+
die = GamalielPelino::Loaded_Die.new
|
|
11
|
+
case die.roll
|
|
12
|
+
when 1..2
|
|
13
|
+
player.blam
|
|
14
|
+
when 3..4
|
|
15
|
+
puts "#{player.name} was skipped."
|
|
16
|
+
else
|
|
17
|
+
player.w00t
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
itemss = Item.random
|
|
21
|
+
puts "#{player.name} found a #{itemss.item} worth #{itemss.points} points."
|
|
22
|
+
puts player.found_piece(itemss)
|
|
23
|
+
|
|
24
|
+
puts "\n#{player.name}'s total points:"
|
|
25
|
+
player.each_found_piece do |itemss|
|
|
26
|
+
puts "#{itemss.points} total #{itemss.item} points"
|
|
27
|
+
end
|
|
28
|
+
puts "#{player.points} grand total points \n "
|
|
29
|
+
end
|
|
30
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: sarge_gam
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Gamaliel B. Pelino
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2022-02-01 00:00:00.000000000 Z
|
|
12
|
+
dependencies: []
|
|
13
|
+
description:
|
|
14
|
+
email: gampelinoo1@gmail.com
|
|
15
|
+
executables:
|
|
16
|
+
- sarge_gam
|
|
17
|
+
extensions: []
|
|
18
|
+
extra_rdoc_files: []
|
|
19
|
+
files:
|
|
20
|
+
- bin/Agam19_input.csv
|
|
21
|
+
- bin/Agam19_save.csv
|
|
22
|
+
- bin/sarge_gam
|
|
23
|
+
- lib/GamalielPelino/Agam11_split1.rb
|
|
24
|
+
- lib/GamalielPelino/Agam11_split2.rb
|
|
25
|
+
- lib/GamalielPelino/Agam13_Die.rb
|
|
26
|
+
- lib/GamalielPelino/Agam16_symbol.rb
|
|
27
|
+
- lib/GamalielPelino/Agam19_file.rb
|
|
28
|
+
- lib/GamalielPelino/Agam20_1.rb
|
|
29
|
+
- lib/GamalielPelino/Agam20_2.rb
|
|
30
|
+
- lib/GamalielPelino/Agam21_audit.rb
|
|
31
|
+
- lib/GamalielPelino/Agam21_loadedDie.rb
|
|
32
|
+
- lib/GamalielPelino/Agam21_mix.rb
|
|
33
|
+
- lib/GamalielPelino/agam14_module.rb
|
|
34
|
+
homepage: http://pragmaticstudio.com
|
|
35
|
+
licenses:
|
|
36
|
+
- MIT
|
|
37
|
+
metadata: {}
|
|
38
|
+
post_install_message:
|
|
39
|
+
rdoc_options: []
|
|
40
|
+
require_paths:
|
|
41
|
+
- lib
|
|
42
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - ">="
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '1.9'
|
|
47
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
48
|
+
requirements:
|
|
49
|
+
- - ">="
|
|
50
|
+
- !ruby/object:Gem::Version
|
|
51
|
+
version: '0'
|
|
52
|
+
requirements: []
|
|
53
|
+
rubygems_version: 3.0.3
|
|
54
|
+
signing_key:
|
|
55
|
+
specification_version: 4
|
|
56
|
+
summary: Training Ruby _GAMALIEL
|
|
57
|
+
test_files: []
|