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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8b75f6192f6a4e6fd12743a3cb723fbaeb1f89cc49e8be02efb5837be127fecf
4
- data.tar.gz: 826ad54ed58f21c515e086387a8c3eceb94fcd1d8e08d83bbc6986a51a112513
3
+ metadata.gz: fd5809297e263857801bd4718a7ae81e286e48b29d55661a48e8f962977f4ebf
4
+ data.tar.gz: b1b317bcc5646676415e7ab2f4516f6150c0832e56925461521066ed354cff6e
5
5
  SHA512:
6
- metadata.gz: c4da1e46f91f59315c72d4ab0788e85b1427b172c26d395f94975408f73b21cac9eb08d816ba74be9d19f46f2f1f2bbb64399f539b6f077ac63db91eaa66a8c6
7
- data.tar.gz: '05803e28e89961782a6ed54a96826224adc1819aedf23640f8ecf643e5cc298f5880124463c8e0c85d23ee339dda1623803ff81be9fe7fcd10d17789f57d5573'
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
- puts "#{home.emoji} #{home.name} vs #{away.name} #{away.emoji}"
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.name)
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.name, defender.name,
56
- try_take_puck(defender), 0, :defense)
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(shooter,
82
+ @stream << Messages.Shoot(@puck_holder,
64
83
  nil, false,
65
84
  @home.name, @away.name,
66
85
  *@score.values)
67
86
 
68
- @shooting_chance = 0
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
- sender_name = @puck_holder.name
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 << Message.Pass(sender_name, receiver.name, interceptor)
116
+ @stream << Messages.Pass(sender, receiver, interceptor)
119
117
  return
120
118
  end
121
119
 
122
- @stream << Message.Pass(sender_name, receiver.name)
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 << Message.Shoot(@puck_holder, blocker, try_take_puck(blocker))
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
- return if @champion_team
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 &:copy
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 do |game| game.in_progress end
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
- data_fields.zip data do |(f, d)|
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
- [:StartOfGame, :title],
13
- [:EndOfGame, :winning_team],
14
- [:StartOfPeriod, :period],
15
- [:EndOfPeriod, :period, :home, :away, :home_score, :away_score],
16
- [:FaceOff, :winning_player],
17
- [:Hit, :puck_holder, :defender, :puck_taken],
18
- [:Pass, :sender, :receiver, :interceptor],
19
- [:Shoot, :shooter, :blocker, :puck_taken, :home, :away, :home_score, :away_score]
20
- ].each do |event, *fields|
21
- define_method event do |*data|
22
- new event, fields, data
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 + " wins the faceoff!"
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 :name, :stats
4
+ attr_reader :stats, :to_s
5
5
 
6
6
  @@prng = Random.new 8010897121101114 # This never changes
7
7
 
8
8
  def initialize
9
- @name = random_name + " " + random_name
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.name}"
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| a.wins - a.losses <=> b.wins - b.losses end
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-21 00:00:00.000000000 Z
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: []