software_challenge_client 22.1.0.1 → 23.0.2

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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +15 -15
  3. data/.rspec +3 -3
  4. data/.rubocop.yml +11 -11
  5. data/.ruby-version +1 -1
  6. data/.stickler.yml +7 -7
  7. data/.vscode/launch.json +40 -40
  8. data/.vscode/settings.json +9 -9
  9. data/AUTHORS +6 -6
  10. data/CODE_OF_CONDUCT.md +13 -13
  11. data/Dockerfile +3 -3
  12. data/Gemfile +5 -5
  13. data/Guardfile +45 -45
  14. data/README.md +172 -147
  15. data/RELEASES.md +144 -140
  16. data/Rakefile +7 -7
  17. data/bin/console +15 -15
  18. data/bin/setup +7 -7
  19. data/develop.sh +3 -3
  20. data/example/client.rb +35 -35
  21. data/example/main.rb +42 -42
  22. data/example/start.bat +2 -2
  23. data/generate-authors.sh +19 -19
  24. data/lib/software_challenge_client/board.rb +149 -127
  25. data/lib/software_challenge_client/client_interface.rb +19 -19
  26. data/lib/software_challenge_client/condition.rb +27 -27
  27. data/lib/software_challenge_client/coordinates.rb +71 -45
  28. data/lib/software_challenge_client/debug_hint.rb +17 -17
  29. data/lib/software_challenge_client/direction.rb +41 -0
  30. data/lib/software_challenge_client/field.rb +70 -69
  31. data/lib/software_challenge_client/game_rule_logic.rb +206 -141
  32. data/lib/software_challenge_client/game_state.rb +57 -24
  33. data/lib/software_challenge_client/invalid_move_exception.rb +15 -15
  34. data/lib/software_challenge_client/logging.rb +26 -26
  35. data/lib/software_challenge_client/move.rb +37 -41
  36. data/lib/software_challenge_client/network.rb +126 -126
  37. data/lib/software_challenge_client/piece.rb +43 -81
  38. data/lib/software_challenge_client/player.rb +31 -31
  39. data/lib/software_challenge_client/protocol.rb +103 -54
  40. data/lib/software_challenge_client/runner.rb +36 -36
  41. data/lib/software_challenge_client/team.rb +23 -25
  42. data/lib/software_challenge_client/util/constants.rb +9 -9
  43. data/lib/software_challenge_client/version.rb +5 -5
  44. data/lib/software_challenge_client.rb +23 -25
  45. data/lib/update_client_module.sh +15 -15
  46. data/push_image_production.sh +12 -12
  47. data/release.sh +9 -9
  48. data/software_challenge_client.gemspec +41 -41
  49. metadata +3 -5
  50. data/lib/software_challenge_client/color.rb +0 -26
  51. data/lib/software_challenge_client/has_hints.rb +0 -11
  52. data/lib/software_challenge_client/piece_type.rb +0 -16
@@ -1,36 +1,36 @@
1
- # encoding: UTF-8
2
- # frozen_string_literal: true
3
- require_relative 'board'
4
- require_relative 'client_interface'
5
- require_relative 'network'
6
-
7
- # Klasse zum Starten einer neue Verbindung zum Spielserver und Verarbeiten der Nachrichten des Servers.
8
- class Runner
9
- include Logging
10
-
11
- def initialize(host, port, client, reservation = nil)
12
- logger.info 'Software Challenge 2022'
13
- logger.info 'Ruby Client'
14
- logger.info "Host: #{host}"
15
- logger.info "Port: #{port}"
16
-
17
- board = Board.new
18
- @network = Network.new(host, port, board, client, reservation)
19
- end
20
-
21
- def start
22
- @network.connect
23
- unless @network.connected
24
- logger.error 'Not connected'
25
- return
26
- end
27
-
28
- while @network.connected
29
- @network.processMessages
30
- sleep(0.01)
31
- end
32
-
33
- logger.info 'Program end...'
34
- @network.disconnect
35
- end
36
- end
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+ require_relative 'board'
4
+ require_relative 'client_interface'
5
+ require_relative 'network'
6
+
7
+ # Klasse zum Starten einer neue Verbindung zum Spielserver und Verarbeiten der Nachrichten des Servers.
8
+ class Runner
9
+ include Logging
10
+
11
+ def initialize(host, port, client, reservation = nil)
12
+ logger.info 'Software Challenge 2022'
13
+ logger.info 'Ruby Client'
14
+ logger.info "Host: #{host}"
15
+ logger.info "Port: #{port}"
16
+
17
+ board = Board.new
18
+ @network = Network.new(host, port, board, client, reservation)
19
+ end
20
+
21
+ def start
22
+ @network.connect
23
+ unless @network.connected
24
+ logger.error 'Not connected'
25
+ return
26
+ end
27
+
28
+ while @network.connected
29
+ @network.processMessages
30
+ sleep(0.01)
31
+ end
32
+
33
+ logger.info 'Program end...'
34
+ @network.disconnect
35
+ end
36
+ end
@@ -1,25 +1,23 @@
1
- # frozen_string_literal: true
2
-
3
- require 'typesafe_enum'
4
-
5
- require_relative 'color'
6
-
7
- # Erster oder zweiter Spieler:
8
- #
9
- # ONE
10
- # TWO
11
- #
12
- # Zugriff z.B. mit Team::ONE
13
- class Team < TypesafeEnum::Base
14
- new :ONE, 'Red'
15
- new :TWO, 'Blue'
16
-
17
- # @return [Color] Gibt die zugehörige Farbe zurück
18
- def to_c
19
- if self.key == :ONE
20
- Color::RED
21
- else
22
- Color::BLUE
23
- end
24
- end
25
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'typesafe_enum'
4
+
5
+ # Erster oder zweiter Spieler:
6
+ #
7
+ # ONE
8
+ # TWO
9
+ #
10
+ # Zugriff z.B. mit Team::ONE
11
+ class Team < TypesafeEnum::Base
12
+ new :ONE, 'ONE'
13
+ new :TWO, 'TWO'
14
+
15
+ # @return [Team] Das Team, was nicht t ist.
16
+ def other_team(t)
17
+ if t == :ONE
18
+ :TWO
19
+ else
20
+ :ONE
21
+ end
22
+ end
23
+ end
@@ -1,9 +1,9 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
-
4
- # Konstanten zum aktuellen Spiel.
5
- module Constants
6
- ROUND_LIMIT = 30 # Rundenbegrenzung. Nach Ende der angegebenen Runde endet auch das Spiel.
7
- GAME_IDENTIFIER = 'swc_2022_ostseeschach' # Der Identifikator des Spiels. Für die Kommunikation mit dem Spielserver.
8
- BOARD_SIZE = 8 # Seitenlänge des Spielbretts in Feldern
9
- end
1
+ # encoding: utf-8
2
+ # frozen_string_literal: true
3
+
4
+ # Konstanten zum aktuellen Spiel.
5
+ module Constants
6
+ ROUND_LIMIT = 30 # Rundenbegrenzung. Nach Ende der angegebenen Runde endet auch das Spiel.
7
+ GAME_IDENTIFIER = 'swc_2023_penguins' # Der Identifikator des Spiels. Für die Kommunikation mit dem Spielserver.
8
+ BOARD_SIZE = 8 # Seitenlänge des Spielbretts in Feldern
9
+ end
@@ -1,5 +1,5 @@
1
- # encoding: UTF-8
2
- # frozen_string_literal: true
3
- module SoftwareChallengeClient
4
- VERSION = '22.1.0.1'
5
- end
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+ module SoftwareChallengeClient
4
+ VERSION = '23.0.2'
5
+ end
@@ -1,25 +1,23 @@
1
- # frozen_string_literal: true
2
- module SoftwareChallengeClient
3
- require 'software_challenge_client/board.rb'
4
- require 'software_challenge_client/client_interface.rb'
5
- require 'software_challenge_client/color.rb'
6
- require 'software_challenge_client/condition.rb'
7
- require 'software_challenge_client/coordinates.rb'
8
- require 'software_challenge_client/debug_hint.rb'
9
- require 'software_challenge_client/field.rb'
10
- require 'software_challenge_client/game_rule_logic.rb'
11
- require 'software_challenge_client/game_state.rb'
12
- require 'software_challenge_client/has_hints.rb'
13
- require 'software_challenge_client/invalid_move_exception.rb'
14
- require 'software_challenge_client/logging.rb'
15
- require 'software_challenge_client/move.rb'
16
- require 'software_challenge_client/network.rb'
17
- require 'software_challenge_client/piece.rb'
18
- require 'software_challenge_client/piece_type.rb'
19
- require 'software_challenge_client/player.rb'
20
- require 'software_challenge_client/protocol.rb'
21
- require 'software_challenge_client/runner.rb'
22
- require 'software_challenge_client/team.rb'
23
- require 'software_challenge_client/util/constants.rb'
24
- require 'software_challenge_client/version.rb'
25
- end
1
+ # frozen_string_literal: true
2
+ module SoftwareChallengeClient
3
+ require 'software_challenge_client/board.rb'
4
+ require 'software_challenge_client/client_interface.rb'
5
+ require 'software_challenge_client/condition.rb'
6
+ require 'software_challenge_client/coordinates.rb'
7
+ require 'software_challenge_client/debug_hint.rb'
8
+ require 'software_challenge_client/direction.rb'
9
+ require 'software_challenge_client/field.rb'
10
+ require 'software_challenge_client/game_rule_logic.rb'
11
+ require 'software_challenge_client/game_state.rb'
12
+ require 'software_challenge_client/invalid_move_exception.rb'
13
+ require 'software_challenge_client/logging.rb'
14
+ require 'software_challenge_client/move.rb'
15
+ require 'software_challenge_client/network.rb'
16
+ require 'software_challenge_client/piece.rb'
17
+ require 'software_challenge_client/player.rb'
18
+ require 'software_challenge_client/protocol.rb'
19
+ require 'software_challenge_client/runner.rb'
20
+ require 'software_challenge_client/team.rb'
21
+ require 'software_challenge_client/util/constants.rb'
22
+ require 'software_challenge_client/version.rb'
23
+ end
@@ -1,15 +1,15 @@
1
- #!/bin/bash
2
- # This creates a entrypoint for the gem named 'software_challenge_client.rb'
3
- # which includes all ruby files under lib. Making sure that everthing is
4
- # included after some files were added or removed (in the process of updating
5
- # the gem for a new game).
6
- shopt -s globstar || exit 1
7
- cd lib || exit 1
8
- FILENAME='software_challenge_client.rb'
9
-
10
- echo "# frozen_string_literal: true
11
- module SoftwareChallengeClient" > $FILENAME
12
- for file in software_challenge_client/**/*.rb; do
13
- echo " require '${file}'"
14
- done >> $FILENAME;
15
- echo "end" >> $FILENAME
1
+ #!/bin/bash
2
+ # This creates a entrypoint for the gem named 'software_challenge_client.rb'
3
+ # which includes all ruby files under lib. Making sure that everthing is
4
+ # included after some files were added or removed (in the process of updating
5
+ # the gem for a new game).
6
+ shopt -s globstar || exit 1
7
+ cd lib || exit 1
8
+ FILENAME='software_challenge_client.rb'
9
+
10
+ echo "# frozen_string_literal: true
11
+ module SoftwareChallengeClient" > $FILENAME
12
+ for file in software_challenge_client/**/*.rb; do
13
+ echo " require '${file}'"
14
+ done >> $FILENAME;
15
+ echo "end" >> $FILENAME
@@ -1,12 +1,12 @@
1
- #!/bin/bash
2
-
3
- server=flut
4
- docker build . -t sc-ruby
5
- docker tag sc-ruby localhost:5000/sc-ruby
6
- ssh -M -S ssh-ctrl-socket -fnNT -L 5000:localhost:5000 $server
7
- ssh -S ssh-ctrl-socket -O check $server || exit 1
8
- docker login localhost:5000 || exit 1
9
- docker push localhost:5000/sc-ruby
10
- ssh -S ssh-ctrl-socket -O exit $server
11
- ssh $server 'sudo docker pull localhost:5000/sc-ruby'
12
- ssh $server 'sudo docker tag localhost:5000/sc-ruby sc-ruby'
1
+ #!/bin/bash
2
+
3
+ server=flut
4
+ docker build . -t sc-ruby
5
+ docker tag sc-ruby localhost:5000/sc-ruby
6
+ ssh -M -S ssh-ctrl-socket -fnNT -L 5000:localhost:5000 $server
7
+ ssh -S ssh-ctrl-socket -O check $server || exit 1
8
+ docker login localhost:5000 || exit 1
9
+ docker push localhost:5000/sc-ruby
10
+ ssh -S ssh-ctrl-socket -O exit $server
11
+ ssh $server 'sudo docker pull localhost:5000/sc-ruby'
12
+ ssh $server 'sudo docker tag localhost:5000/sc-ruby sc-ruby'
data/release.sh CHANGED
@@ -1,9 +1,9 @@
1
- #!/bin/sh
2
-
3
- # This shell script automates the process of releasing a new gem version when
4
- # running ruby in a docker container.
5
-
6
- set -x # echo commands as they are executed
7
- sudo chown -R root.root "$HOME/.ssh"
8
- docker run -it --rm -v "$PWD":/usr/src/app -v "$HOME/.gitconfig":/root/.gitconfig -v "$HOME/.ssh":/root/.ssh -v "$HOME/.gem/credentials":/root/.gem/credentials -w /usr/src/app ruby:latest sh -c "bundle install --path vendor/bundle && bundle exec rake release"
9
- sudo chown -R $USER.$USER "$HOME/.ssh"
1
+ #!/bin/sh
2
+
3
+ # This shell script automates the process of releasing a new gem version when
4
+ # running ruby in a docker container.
5
+
6
+ set -x # echo commands as they are executed
7
+ sudo chown -R root.root "$HOME/.ssh"
8
+ docker run -it --rm -v "$PWD":/usr/src/app -v "$HOME/.gitconfig":/root/.gitconfig -v "$HOME/.ssh":/root/.ssh -v "$HOME/.gem/credentials":/root/.gem/credentials -w /usr/src/app ruby:latest sh -c "bundle install --path vendor/bundle && bundle exec rake release"
9
+ sudo chown -R $USER.$USER "$HOME/.ssh"
@@ -1,41 +1,41 @@
1
- # coding: utf-8
2
- # frozen_string_literal: true
3
- lib = File.expand_path('../lib', __FILE__)
4
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require 'software_challenge_client/version'
6
-
7
- Gem::Specification.new do |spec|
8
- spec.name = 'software_challenge_client'
9
- spec.version = SoftwareChallengeClient::VERSION
10
- spec.authors = File.readlines('AUTHORS').select { |l| l[' <'] }.map { |l| l.match(/^(.*) *</)[1] }
11
- spec.email = File.readlines('AUTHORS').select { |l| l[' <'] }.map { |l| l.match(/<(.*)>/)[1] }
12
-
13
- spec.summary = 'Provides functions to build a client for the coding competition Software-Challenge Germany.'
14
- spec.description = ''
15
- spec.homepage = 'http://www.software-challenge.de'
16
-
17
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
- spec.bindir = 'exe'
19
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
- spec.require_paths = ['lib']
21
-
22
- spec.required_ruby_version = '>= 2.5.5'
23
- spec.add_dependency 'builder'
24
- spec.add_dependency 'typesafe_enum'
25
-
26
- spec.add_development_dependency 'bundler', '>= 1.10'
27
- spec.add_development_dependency 'fuubar'
28
- spec.add_development_dependency 'guard'
29
- spec.add_development_dependency 'guard-rspec'
30
- spec.add_development_dependency 'guard-rubocop'
31
- spec.add_development_dependency 'pry'
32
- spec.add_development_dependency 'pry-byebug'
33
- spec.add_development_dependency 'pry-coolline'
34
- spec.add_development_dependency 'pry-rescue'
35
- spec.add_development_dependency 'rake', '>= 10.0'
36
- spec.add_development_dependency 'rspec'
37
- spec.add_development_dependency 'rubocop'
38
- spec.add_development_dependency 'rubocop-rspec'
39
- spec.add_development_dependency 'solargraph'
40
- spec.add_development_dependency 'yard', '>= 0.8'
41
- end
1
+ # coding: utf-8
2
+ # frozen_string_literal: true
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'software_challenge_client/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'software_challenge_client'
9
+ spec.version = SoftwareChallengeClient::VERSION
10
+ spec.authors = File.readlines('AUTHORS').select { |l| l[' <'] }.map { |l| l.match(/^(.*) *</)[1] }
11
+ spec.email = File.readlines('AUTHORS').select { |l| l[' <'] }.map { |l| l.match(/<(.*)>/)[1] }
12
+
13
+ spec.summary = 'Provides functions to build a client for the coding competition Software-Challenge Germany.'
14
+ spec.description = ''
15
+ spec.homepage = 'http://www.software-challenge.de'
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.bindir = 'exe'
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ['lib']
21
+
22
+ spec.required_ruby_version = '>= 2.5.5'
23
+ spec.add_dependency 'builder'
24
+ spec.add_dependency 'typesafe_enum'
25
+
26
+ spec.add_development_dependency 'bundler', '>= 1.10'
27
+ spec.add_development_dependency 'fuubar'
28
+ spec.add_development_dependency 'guard'
29
+ spec.add_development_dependency 'guard-rspec'
30
+ spec.add_development_dependency 'guard-rubocop'
31
+ spec.add_development_dependency 'pry'
32
+ spec.add_development_dependency 'pry-byebug'
33
+ spec.add_development_dependency 'pry-coolline'
34
+ spec.add_development_dependency 'pry-rescue'
35
+ spec.add_development_dependency 'rake', '>= 10.0'
36
+ spec.add_development_dependency 'rspec'
37
+ spec.add_development_dependency 'rubocop'
38
+ spec.add_development_dependency 'rubocop-rspec'
39
+ spec.add_development_dependency 'solargraph'
40
+ spec.add_development_dependency 'yard', '>= 0.8'
41
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: software_challenge_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 22.1.0.1
4
+ version: 23.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - 'kwollw '
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2022-02-08 00:00:00.000000000 Z
13
+ date: 2022-10-23 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: builder
@@ -284,20 +284,18 @@ files:
284
284
  - lib/software_challenge_client.rb
285
285
  - lib/software_challenge_client/board.rb
286
286
  - lib/software_challenge_client/client_interface.rb
287
- - lib/software_challenge_client/color.rb
288
287
  - lib/software_challenge_client/condition.rb
289
288
  - lib/software_challenge_client/coordinates.rb
290
289
  - lib/software_challenge_client/debug_hint.rb
290
+ - lib/software_challenge_client/direction.rb
291
291
  - lib/software_challenge_client/field.rb
292
292
  - lib/software_challenge_client/game_rule_logic.rb
293
293
  - lib/software_challenge_client/game_state.rb
294
- - lib/software_challenge_client/has_hints.rb
295
294
  - lib/software_challenge_client/invalid_move_exception.rb
296
295
  - lib/software_challenge_client/logging.rb
297
296
  - lib/software_challenge_client/move.rb
298
297
  - lib/software_challenge_client/network.rb
299
298
  - lib/software_challenge_client/piece.rb
300
- - lib/software_challenge_client/piece_type.rb
301
299
  - lib/software_challenge_client/player.rb
302
300
  - lib/software_challenge_client/protocol.rb
303
301
  - lib/software_challenge_client/runner.rb
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'typesafe_enum'
4
-
5
- require_relative 'team'
6
-
7
- # TODO 2022: Replace with bool?
8
- # Die Spielsteinfarben. BLUE, und RED
9
- class Color < TypesafeEnum::Base
10
- new :BLUE, 'B'
11
- new :RED, 'R'
12
-
13
- # Gibt den color namen zurück
14
- def to_s
15
- self.key.to_s
16
- end
17
-
18
- # Gibt das zugehörige Team zurück
19
- def to_t
20
- if self.key == :RED
21
- Team::ONE
22
- else
23
- Team::TWO
24
- end
25
- end
26
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
- module HasHints
3
- # @!attribute [r] hints
4
- # @return [Array<DebugHint>] Hinweise, die an den Zug angeheftet werden sollen. Siehe {DebugHint}.
5
- attr_reader :hints
6
-
7
- # @param hint [DebugHint]
8
- def add_hint(hint)
9
- @hints.push(hint)
10
- end
11
- end
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'typesafe_enum'
4
-
5
- # Die Spielsteintypen. Herzmuschel, Möwe, Seestern und Robbe
6
- class PieceType < TypesafeEnum::Base
7
- new :Herzmuschel, 'C'
8
- new :Moewe, 'G'
9
- new :Seestern, 'S'
10
- new :Robbe, 'R'
11
-
12
- # @return [String] Gibt den color namen zurück
13
- def to_s
14
- self.key.to_s
15
- end
16
- end