hlockey 0 → 0.1

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