hlockey 0 → 0.1
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 +4 -4
- data/bin/hlockey +2 -2
- data/lib/game.rb +37 -39
- data/lib/league.rb +4 -4
- data/lib/messages.rb +18 -16
- data/lib/player.rb +2 -2
- data/lib/team.rb +2 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fd5809297e263857801bd4718a7ae81e286e48b29d55661a48e8f962977f4ebf
|
4
|
+
data.tar.gz: b1b317bcc5646676415e7ab2f4516f6150c0832e56925461521066ed354cff6e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 02bea157d0ffe8caf3dcdc8cc151deb530c637db571c1c3812585766c91df9ef0acba073fa0baf7ec3fe8558042c911f4d243d36123eb488d1402ef32ac37f46
|
7
|
+
data.tar.gz: c18f4122bf5ccfacd2ee25d3bc7afc41ecc7f8116e674d1be3c3014e95394ab02d8eb45d4c380affd4060dfc235eadc023cf849c1e53f81bc2f0a9f4fd208972
|
data/bin/hlockey
CHANGED
@@ -21,7 +21,7 @@ def menu_input_elem default, choices
|
|
21
21
|
choices[i] unless i < 0
|
22
22
|
end
|
23
23
|
|
24
|
-
season = 0
|
24
|
+
season = 0.1
|
25
25
|
start_time = Time.utc(2022, 6, 27, 17).localtime
|
26
26
|
league = League.new season, start_time
|
27
27
|
|
@@ -56,7 +56,7 @@ loop do
|
|
56
56
|
end
|
57
57
|
when 1 # Standings
|
58
58
|
if league.champion_team
|
59
|
-
puts "Your season #{season} champions are the #{champion_team.name}!"
|
59
|
+
puts "Your season #{season} champions are the #{league.champion_team.name}!"
|
60
60
|
elsif league.playoff_teams
|
61
61
|
puts "Playoffs"
|
62
62
|
league.playoff_teams.each &:print_win_loss
|
data/lib/game.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
require_relative "./messages"
|
2
2
|
|
3
3
|
class Game
|
4
|
-
attr_reader :stream, :in_progress
|
4
|
+
attr_reader :home, :away, :stream, :in_progress
|
5
5
|
|
6
6
|
def initialize home, away, prng
|
7
|
+
@home, @away, @prng = [home, away, prng]
|
7
8
|
@stream = [Messages.StartOfGame(to_s)]
|
8
9
|
@in_progress = true
|
9
|
-
@home, @away, @prng = [home, away, prng]
|
10
10
|
@score = {
|
11
11
|
:home => 0,
|
12
12
|
:away => 0
|
@@ -21,7 +21,7 @@ class Game
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def to_s
|
24
|
-
|
24
|
+
"#{@home.emoji} #{@home.name} vs #{@away.name} #{@away.emoji}"
|
25
25
|
end
|
26
26
|
|
27
27
|
def update
|
@@ -30,6 +30,25 @@ class Game
|
|
30
30
|
@stream << Messages.StartOfPeriod(@period) if @actions == 0
|
31
31
|
@actions += 1
|
32
32
|
|
33
|
+
if @actions == 60
|
34
|
+
@stream << Messages.EndOfPeriod(@period, @home.name, @away.name, *@score.values)
|
35
|
+
@actions = 0
|
36
|
+
@period += 1
|
37
|
+
start_faceoff
|
38
|
+
|
39
|
+
if @period > 3 and not(@score[:home] == @score[:away] and @period < 12)
|
40
|
+
# Game is over
|
41
|
+
@in_progress = false
|
42
|
+
|
43
|
+
winner, loser = @score[:away] > @score[:home] ? [@away, @home] : [@home, @away]
|
44
|
+
|
45
|
+
@stream << Messages.EndOfGame(winner.name)
|
46
|
+
winner.wins += 1
|
47
|
+
loser.losses += 1
|
48
|
+
end
|
49
|
+
return
|
50
|
+
end
|
51
|
+
|
33
52
|
if @face_off
|
34
53
|
if @puck_holder == nil
|
35
54
|
# Pass opposite team to who wins the puck to switch_team_with_puck,
|
@@ -39,7 +58,7 @@ class Game
|
|
39
58
|
@away.roster[:center].stats[:offense]) ? @away : @home)
|
40
59
|
|
41
60
|
@puck_holder = @team_with_puck.roster[:center]
|
42
|
-
@stream << Messages.FaceOff(@puck_holder
|
61
|
+
@stream << Messages.FaceOff(@puck_holder)
|
43
62
|
else
|
44
63
|
pass
|
45
64
|
@face_off = false
|
@@ -52,50 +71,23 @@ class Game
|
|
52
71
|
pass
|
53
72
|
when 5..6 # Check
|
54
73
|
defender = puckless_non_goalie
|
55
|
-
@stream << Messages.Hit(@puck_holder
|
56
|
-
try_take_puck(defender
|
74
|
+
@stream << Messages.Hit(@puck_holder, defender,
|
75
|
+
try_take_puck(defender, 0, :defense))
|
57
76
|
else # Shoot
|
58
77
|
unless @shooting_chance < 5 and
|
59
78
|
try_block_shot @puckless_team.roster[@prng.rand(2) == 0 ? :ldef : :rdef] or
|
60
79
|
try_block_shot @puckless_team.roster[:goalie]
|
61
80
|
@score[@team_with_puck == @home ? :home : :away] += 1
|
62
81
|
|
63
|
-
@stream << Messages.Shoot(
|
82
|
+
@stream << Messages.Shoot(@puck_holder,
|
64
83
|
nil, false,
|
65
84
|
@home.name, @away.name,
|
66
85
|
*@score.values)
|
67
86
|
|
68
|
-
|
69
|
-
@face_off = true
|
87
|
+
start_faceoff
|
70
88
|
@actions = 60 if @period > 3 # Sudden death overtime
|
71
89
|
end
|
72
90
|
end
|
73
|
-
|
74
|
-
if @actions == 60
|
75
|
-
@stream << Messages.EndOfPeriod(@period, @home.name, @away.name, *@score.values)
|
76
|
-
@actions = 0
|
77
|
-
@period += 1
|
78
|
-
if @period > 3 and not(@score[:home] == @score[:away] and @period < 12)
|
79
|
-
# Game is over
|
80
|
-
@in_progress = false
|
81
|
-
|
82
|
-
winner, loser = case @score[:home] <=> @score[:away]
|
83
|
-
when 1
|
84
|
-
[@home, @away]
|
85
|
-
when -1
|
86
|
-
[@away, @home]
|
87
|
-
else # Tie
|
88
|
-
@stream << Messages.EndOfGame
|
89
|
-
@home.losses += 1
|
90
|
-
@away.losses += 1
|
91
|
-
return
|
92
|
-
end
|
93
|
-
|
94
|
-
@stream << Messages.EndOfGame(winner.name)
|
95
|
-
winner.wins += 1
|
96
|
-
loser.losses += 1
|
97
|
-
end
|
98
|
-
end
|
99
91
|
end
|
100
92
|
|
101
93
|
private
|
@@ -103,6 +95,12 @@ class Game
|
|
103
95
|
@prng.rand(10) + helping_stat - hindering_stat > 4
|
104
96
|
end
|
105
97
|
|
98
|
+
def start_faceoff
|
99
|
+
@shooting_chance = 0
|
100
|
+
@face_off = true
|
101
|
+
@puck_holder = nil
|
102
|
+
end
|
103
|
+
|
106
104
|
def switch_team_with_puck team_with_puck = @team_with_puck
|
107
105
|
@team_with_puck, @puckless_team = team_with_puck == @home ?
|
108
106
|
[@away, @home] : [@home, @away]
|
@@ -110,16 +108,16 @@ class Game
|
|
110
108
|
end
|
111
109
|
|
112
110
|
def pass
|
113
|
-
|
111
|
+
sender = @puck_holder
|
114
112
|
receiver = puckless_non_goalie(@team_with_puck)
|
115
113
|
interceptor = puckless_non_goalie
|
116
114
|
|
117
115
|
if not @face_off and try_take_puck interceptor, 2 # Pass intercepted
|
118
|
-
@stream <<
|
116
|
+
@stream << Messages.Pass(sender, receiver, interceptor)
|
119
117
|
return
|
120
118
|
end
|
121
119
|
|
122
|
-
@stream <<
|
120
|
+
@stream << Messages.Pass(sender, receiver)
|
123
121
|
@puck_holder = receiver
|
124
122
|
@shooting_chance += 1
|
125
123
|
end
|
@@ -139,7 +137,7 @@ class Game
|
|
139
137
|
@puck_holder.stats[:offense])
|
140
138
|
|
141
139
|
@shooting_chance += 1
|
142
|
-
@stream <<
|
140
|
+
@stream << Messages.Shoot(@puck_holder, blocker, try_take_puck(blocker))
|
143
141
|
|
144
142
|
true
|
145
143
|
end
|
data/lib/league.rb
CHANGED
@@ -61,7 +61,7 @@ class League
|
|
61
61
|
update_games
|
62
62
|
end
|
63
63
|
|
64
|
-
|
64
|
+
break if @champion_team
|
65
65
|
end
|
66
66
|
|
67
67
|
@last_update_time = now
|
@@ -86,7 +86,7 @@ class League
|
|
86
86
|
case @day <=> 39
|
87
87
|
when -1
|
88
88
|
(@shuffled_teams.length / 2).times do |i|
|
89
|
-
pair = [@shuffled_teams[i], @shuffled_teams[-i]]
|
89
|
+
pair = [@shuffled_teams[i], @shuffled_teams[-i - 1]]
|
90
90
|
@games << Game.new(*(@day > 19 ? pair : pair.reverse), @prng)
|
91
91
|
end
|
92
92
|
|
@@ -95,7 +95,7 @@ class League
|
|
95
95
|
@playoff_teams = Team.sort_teams(
|
96
96
|
@divisions.values.map do |teams|
|
97
97
|
Team.sort_teams(teams).first(2)
|
98
|
-
end.reduce(:+).map &:
|
98
|
+
end.reduce(:+).map &:clone
|
99
99
|
)
|
100
100
|
|
101
101
|
new_playoff_matchups
|
@@ -112,7 +112,7 @@ class League
|
|
112
112
|
end
|
113
113
|
|
114
114
|
def update_games
|
115
|
-
@games_in_progress = @games.select
|
115
|
+
@games_in_progress = @games.select &:in_progress
|
116
116
|
@games_in_progress.each do |game| game.update end
|
117
117
|
end
|
118
118
|
|
data/lib/messages.rb
CHANGED
@@ -1,25 +1,27 @@
|
|
1
1
|
class Messages
|
2
2
|
def initialize event, fields, data
|
3
3
|
@event = event
|
4
|
-
|
5
|
-
instance_variable_set "@" + f, d
|
4
|
+
fields.zip data do |(f, d)|
|
5
|
+
instance_variable_set "@" + f.to_s, d
|
6
6
|
end
|
7
7
|
end
|
8
8
|
|
9
9
|
private_class_method :new
|
10
10
|
|
11
|
-
|
12
|
-
[
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
11
|
+
class << self
|
12
|
+
[
|
13
|
+
[:StartOfGame, :title],
|
14
|
+
[:EndOfGame, :winning_team],
|
15
|
+
[:StartOfPeriod, :period],
|
16
|
+
[:EndOfPeriod, :period, :home, :away, :home_score, :away_score],
|
17
|
+
[:FaceOff, :winning_player],
|
18
|
+
[:Hit, :puck_holder, :defender, :puck_taken],
|
19
|
+
[:Pass, :sender, :receiver, :interceptor],
|
20
|
+
[:Shoot, :shooter, :blocker, :puck_taken, :home, :away, :home_score, :away_score]
|
21
|
+
].each do |event, *fields|
|
22
|
+
define_method event do |*data|
|
23
|
+
new event, fields, data
|
24
|
+
end
|
23
25
|
end
|
24
26
|
end
|
25
27
|
|
@@ -34,9 +36,9 @@ class Messages
|
|
34
36
|
when :EndOfPeriod
|
35
37
|
"End" + of_period + score
|
36
38
|
when :FaceOff
|
37
|
-
@winning_player
|
39
|
+
"#{@winning_player} wins the faceoff!"
|
38
40
|
when :Hit
|
39
|
-
"#{@defender} hits #{@puck_holder + takes}!"
|
41
|
+
"#{@defender} hits #{@puck_holder.to_s + takes}!"
|
40
42
|
when :Pass
|
41
43
|
"#{@sender} passes to #{@receiver}#{@interceptor ?
|
42
44
|
"... intercepted by #{@interceptor}!" : "."}"
|
data/lib/player.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
require_relative "./data/names_markov_chain"
|
2
2
|
|
3
3
|
class Player
|
4
|
-
attr_reader :
|
4
|
+
attr_reader :stats, :to_s
|
5
5
|
|
6
6
|
@@prng = Random.new 8010897121101114 # This never changes
|
7
7
|
|
8
8
|
def initialize
|
9
|
-
@
|
9
|
+
@to_s = random_name + " " + random_name
|
10
10
|
@stats = [:offense, :defense, :agility].each_with_object Hash.new do |stat, hash|
|
11
11
|
hash[stat] = @@prng.rand * 5
|
12
12
|
end
|
data/lib/team.rb
CHANGED
@@ -32,7 +32,7 @@ class Team
|
|
32
32
|
def print_roster
|
33
33
|
puts to_s
|
34
34
|
@roster.each do |pos, player|
|
35
|
-
puts " #{pos.to_s.ljust 6}: #{player
|
35
|
+
puts " #{pos.to_s.ljust 6}: #{player}"
|
36
36
|
player.stats.each do |stat, value|
|
37
37
|
puts " #{stat}: #{value.round 1}"
|
38
38
|
end
|
@@ -40,7 +40,7 @@ class Team
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def self.sort_teams teams
|
43
|
-
teams.sort do |a, b|
|
43
|
+
teams.sort do |a, b| b.wins - b.losses <=> a.wins - a.losses end
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hlockey
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0'
|
4
|
+
version: '0.1'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lavender Perry
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-06-
|
11
|
+
date: 2022-06-26 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Hockey sports sim.
|
14
14
|
email: endie2@protonmail.com
|
@@ -47,5 +47,5 @@ requirements: []
|
|
47
47
|
rubygems_version: 3.3.7
|
48
48
|
signing_key:
|
49
49
|
specification_version: 4
|
50
|
-
summary: Hlockey season 0.
|
50
|
+
summary: Hlockey season 0.1.
|
51
51
|
test_files: []
|