hlockey 0 → 0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|