software_challenge_client 22.1.0.1 → 23.0.2

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