rubygoal-core 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.
Files changed (54) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +18 -0
  3. data/README.md +85 -0
  4. data/bin/rubygoal +15 -0
  5. data/lib/rubygoal.rb +1 -0
  6. data/lib/rubygoal/ball.rb +60 -0
  7. data/lib/rubygoal/coach.rb +81 -0
  8. data/lib/rubygoal/coach_definition.rb +54 -0
  9. data/lib/rubygoal/coach_loader.rb +55 -0
  10. data/lib/rubygoal/coaches/coach_definition_away.rb +72 -0
  11. data/lib/rubygoal/coaches/coach_definition_home.rb +76 -0
  12. data/lib/rubygoal/configuration.rb +49 -0
  13. data/lib/rubygoal/coordinate.rb +33 -0
  14. data/lib/rubygoal/field.rb +134 -0
  15. data/lib/rubygoal/formation.rb +73 -0
  16. data/lib/rubygoal/formation/formation_dsl.rb +67 -0
  17. data/lib/rubygoal/game.rb +162 -0
  18. data/lib/rubygoal/goal.rb +26 -0
  19. data/lib/rubygoal/match_data.rb +130 -0
  20. data/lib/rubygoal/moveable.rb +67 -0
  21. data/lib/rubygoal/player.rb +87 -0
  22. data/lib/rubygoal/players/average.rb +16 -0
  23. data/lib/rubygoal/players/captain.rb +15 -0
  24. data/lib/rubygoal/players/fast.rb +16 -0
  25. data/lib/rubygoal/players/goalkeeper.rb +26 -0
  26. data/lib/rubygoal/players/player_movement.rb +98 -0
  27. data/lib/rubygoal/recorder.rb +56 -0
  28. data/lib/rubygoal/simulator.rb +33 -0
  29. data/lib/rubygoal/team.rb +198 -0
  30. data/lib/rubygoal/teams/away.rb +15 -0
  31. data/lib/rubygoal/teams/home.rb +15 -0
  32. data/lib/rubygoal/util.rb +36 -0
  33. data/lib/rubygoal/version.rb +3 -0
  34. data/test/ball_test.rb +56 -0
  35. data/test/coach_test.rb +49 -0
  36. data/test/field_test.rb +103 -0
  37. data/test/fixtures/four_fast_players_coach_definition.rb +27 -0
  38. data/test/fixtures/less_players_coach_definition.rb +25 -0
  39. data/test/fixtures/mirror_strategy_coach_definition.rb +42 -0
  40. data/test/fixtures/more_players_coach_definition.rb +27 -0
  41. data/test/fixtures/test_away_coach_definition.rb +34 -0
  42. data/test/fixtures/test_home_coach_definition.rb +34 -0
  43. data/test/fixtures/two_captains_coach_definition.rb +27 -0
  44. data/test/fixtures/valid_coach_definition.rb +26 -0
  45. data/test/formation_test.rb +81 -0
  46. data/test/game_test.rb +84 -0
  47. data/test/match_data_test.rb +149 -0
  48. data/test/player_test.rb +125 -0
  49. data/test/players/goalkeeper_test.rb +49 -0
  50. data/test/players/player_movement_test.rb +76 -0
  51. data/test/recorder_test.rb +118 -0
  52. data/test/team_test.rb +97 -0
  53. data/test/test_helper.rb +21 -0
  54. metadata +158 -0
data/test/team_test.rb ADDED
@@ -0,0 +1,97 @@
1
+ require 'test_helper'
2
+ require 'fixtures/mirror_strategy_coach_definition'
3
+
4
+ module Rubygoal
5
+ class TeamTest < Minitest::Test
6
+ def setup
7
+ home_coach = Coach.new(TestHomeCoachDefinition.new)
8
+ away_coach = Coach.new(TestAwayCoachDefinition.new)
9
+ game = Game.new(home_coach, away_coach)
10
+
11
+ @home_team = game.team_home
12
+ @away_team = game.team_away
13
+ end
14
+
15
+ def test_home_team_initial_positions_are_in_own_field
16
+ expected_positions = {
17
+ home_average1: Position.new(232 / 2, 156),
18
+ home_average2: Position.new(697 / 2, 156),
19
+ home_average3: Position.new(1162 / 2, 312),
20
+ home_average4: Position.new(1162 / 2, 625),
21
+ home_average5: Position.new(232 / 2, 782),
22
+ home_average6: Position.new(697 / 2, 782),
23
+ home_fast1: Position.new(232 / 2, 312),
24
+ home_fast2: Position.new(1162 / 2, 469),
25
+ home_fast3: Position.new(232 / 2, 625),
26
+ home_captain: Position.new(697 / 2, 469)
27
+ }
28
+
29
+ expected_positions.each do |name, pos|
30
+ assert_in_delta pos, @home_team.players_position[name], 1
31
+ end
32
+ end
33
+
34
+ def test_away_team_initial_positions_are_in_own_field
35
+ expected_positions = {
36
+ away_average1: Position.new(232 / 2, 156),
37
+ away_average2: Position.new(697 / 2, 156),
38
+ away_average3: Position.new(697 / 2, 312),
39
+ away_average4: Position.new(697 / 2, 625),
40
+ away_average5: Position.new(232 / 2, 782),
41
+ away_average6: Position.new(697 / 2, 782),
42
+ away_fast1: Position.new(232 / 2, 312),
43
+ away_fast2: Position.new(1162 / 2, 469),
44
+ away_fast3: Position.new(232 / 2, 625),
45
+ away_captain: Position.new(697 / 2, 469)
46
+ }
47
+
48
+ expected_positions.each do |name, pos|
49
+ assert_in_delta pos, @away_team.players_position[name], 1
50
+ end
51
+ end
52
+
53
+ def test_default_opponent_positions_for_initial_positions
54
+ home_coach = Coach.new(MirrorStrategyCoachDefinition.new)
55
+ away_coach = Coach.new(TestAwayCoachDefinition.new)
56
+ game = Game.new(home_coach, away_coach)
57
+
58
+ home_team = game.team_home
59
+
60
+ expected_positions = {
61
+ average1: Position.new(232 / 2, 750),
62
+ average2: Position.new(232 / 2, 563),
63
+ average3: Position.new(232 / 2, 375),
64
+ average4: Position.new(232 / 2, 187),
65
+ average5: Position.new(697 / 2, 750),
66
+ average6: Position.new(697 / 2, 563),
67
+ fast1: Position.new(697 / 2, 375),
68
+ fast2: Position.new(697 / 2, 187),
69
+ fast3: Position.new(1162 / 2, 625),
70
+ captain: Position.new(1162 / 2, 312)
71
+ }
72
+
73
+ expected_positions.each do |name, pos|
74
+ assert_in_delta pos, home_team.players_position[name], 1
75
+ end
76
+ end
77
+
78
+ def test_home_goalkeeper_position
79
+ goalkeeper = @home_team.players[:goalkeeper]
80
+
81
+ assert_equal Position.new(312, 581), goalkeeper.position
82
+ end
83
+
84
+ def test_away_goalkeeper_position
85
+ goalkeeper = @away_team.players[:goalkeeper]
86
+
87
+ assert_equal Position.new(1606, 581), goalkeeper.position
88
+ end
89
+
90
+ private
91
+
92
+ def players_positions(team)
93
+ team.players_list.map(&:position)
94
+ end
95
+ end
96
+ end
97
+
@@ -0,0 +1,21 @@
1
+ require 'minitest/autorun'
2
+ require "minitest/reporters"
3
+
4
+ require 'rubygoal/game'
5
+ require 'fixtures/test_home_coach_definition'
6
+ require 'fixtures/test_away_coach_definition'
7
+
8
+ # Ensure backward compatibility with Minitest 4
9
+ Minitest::Test = MiniTest::Unit::TestCase unless defined?(Minitest::Test)
10
+ Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
11
+
12
+ module Rubygoal
13
+ class Coordinate
14
+ # Needed to use assert_in_delta with Coordinate instances
15
+ alias_method :-, :distance
16
+ end
17
+ end
18
+
19
+ Rubygoal.configure do |config|
20
+ config.debug_output = false
21
+ end
metadata ADDED
@@ -0,0 +1,158 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rubygoal-core
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Jorge Bejar
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-09-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: timecop
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest-reporters
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: Rubygoal core
56
+ email:
57
+ - jorge@wyeworks.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - LICENSE
63
+ - README.md
64
+ - bin/rubygoal
65
+ - lib/rubygoal.rb
66
+ - lib/rubygoal/ball.rb
67
+ - lib/rubygoal/coach.rb
68
+ - lib/rubygoal/coach_definition.rb
69
+ - lib/rubygoal/coach_loader.rb
70
+ - lib/rubygoal/coaches/coach_definition_away.rb
71
+ - lib/rubygoal/coaches/coach_definition_home.rb
72
+ - lib/rubygoal/configuration.rb
73
+ - lib/rubygoal/coordinate.rb
74
+ - lib/rubygoal/field.rb
75
+ - lib/rubygoal/formation.rb
76
+ - lib/rubygoal/formation/formation_dsl.rb
77
+ - lib/rubygoal/game.rb
78
+ - lib/rubygoal/goal.rb
79
+ - lib/rubygoal/match_data.rb
80
+ - lib/rubygoal/moveable.rb
81
+ - lib/rubygoal/player.rb
82
+ - lib/rubygoal/players/average.rb
83
+ - lib/rubygoal/players/captain.rb
84
+ - lib/rubygoal/players/fast.rb
85
+ - lib/rubygoal/players/goalkeeper.rb
86
+ - lib/rubygoal/players/player_movement.rb
87
+ - lib/rubygoal/recorder.rb
88
+ - lib/rubygoal/simulator.rb
89
+ - lib/rubygoal/team.rb
90
+ - lib/rubygoal/teams/away.rb
91
+ - lib/rubygoal/teams/home.rb
92
+ - lib/rubygoal/util.rb
93
+ - lib/rubygoal/version.rb
94
+ - test/ball_test.rb
95
+ - test/coach_test.rb
96
+ - test/field_test.rb
97
+ - test/fixtures/four_fast_players_coach_definition.rb
98
+ - test/fixtures/less_players_coach_definition.rb
99
+ - test/fixtures/mirror_strategy_coach_definition.rb
100
+ - test/fixtures/more_players_coach_definition.rb
101
+ - test/fixtures/test_away_coach_definition.rb
102
+ - test/fixtures/test_home_coach_definition.rb
103
+ - test/fixtures/two_captains_coach_definition.rb
104
+ - test/fixtures/valid_coach_definition.rb
105
+ - test/formation_test.rb
106
+ - test/game_test.rb
107
+ - test/match_data_test.rb
108
+ - test/player_test.rb
109
+ - test/players/goalkeeper_test.rb
110
+ - test/players/player_movement_test.rb
111
+ - test/recorder_test.rb
112
+ - test/team_test.rb
113
+ - test/test_helper.rb
114
+ homepage: https://github.com/wyeworks/rubygoal
115
+ licenses:
116
+ - Apache License 2.0
117
+ metadata: {}
118
+ post_install_message:
119
+ rdoc_options: []
120
+ require_paths:
121
+ - lib
122
+ required_ruby_version: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: 2.2.2
127
+ required_rubygems_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ requirements: []
133
+ rubyforge_project:
134
+ rubygems_version: 2.4.5
135
+ signing_key:
136
+ specification_version: 4
137
+ summary: Rubygoal core
138
+ test_files:
139
+ - test/ball_test.rb
140
+ - test/coach_test.rb
141
+ - test/field_test.rb
142
+ - test/fixtures/four_fast_players_coach_definition.rb
143
+ - test/fixtures/less_players_coach_definition.rb
144
+ - test/fixtures/mirror_strategy_coach_definition.rb
145
+ - test/fixtures/more_players_coach_definition.rb
146
+ - test/fixtures/test_away_coach_definition.rb
147
+ - test/fixtures/test_home_coach_definition.rb
148
+ - test/fixtures/two_captains_coach_definition.rb
149
+ - test/fixtures/valid_coach_definition.rb
150
+ - test/formation_test.rb
151
+ - test/game_test.rb
152
+ - test/match_data_test.rb
153
+ - test/player_test.rb
154
+ - test/players/goalkeeper_test.rb
155
+ - test/players/player_movement_test.rb
156
+ - test/recorder_test.rb
157
+ - test/team_test.rb
158
+ - test/test_helper.rb