Software-Challenge Client
This gem includes everything to build a client for the coding competition Software-Challenge.
Language: Most documentation will be in german language, because it is intended to be used by pupils taking part in the Software-Challenge programming competition. Only internal documentation is in english.
Sprache: Ein Grossteil der Dokumentation ist in deutscher Sprache verfasst, da sie dazu gedacht ist, von am Programmierwettbewerb Software-Challenge teilnehmenden Schülerinnen und Schülern gelesen zu werden. Interne Dokumentation ist weiterhin in englisch.
Installation
Um die Software-Challenge Bibliothek in deinem Computerspieler zu verwenden, füge folgende Zeile in das Gemfile deines Projektes ein:
$ gem 'software_challenge_client'
Installiere das Gem dann mit dem Befehl:
$ bundle
Oder installiere das Gem ohne ein Gemfile mit:
$ gem install software_challenge_client
Verwendung
Ein Beispielprojekt zur Verwendung der Bibliothek findet man im Verzeichnis example
(Beispielprojekt auf GitHub).
Du kannst den Beispielclient mittels
$ ruby main.rb
in einer Konsole ausführen (dazu musst du dich im Verzeichnis example
befinden).
Damit dies funktioniert, muss das Gem bereits wie oben beschrieben installiert sein und es muss ein Spielserver auf eine Verbindung warten (also zum Beispiel ein Spiel mit einem manuell gestarteten Spieler in der grafischen Oberfläche angelegt worden sein).
Neben Beiwerk wie dem Initialisieren der Verbindung zum Spielserver und
Verarbeiten der Startparameter (was beides in main.rb
des Beispielprojektes
passiert), musst du nur eine Klasse implementieren, um einen lauffähigen
Computerspieler zu haben (client.rb
im Beispielprojekt):
require 'software_challenge_client'
class Client < ClientInterface
include Logging
attr_accessor :gamestate
def initialize(log_level)
logger.level = log_level
logger.info 'Einfacher Spieler wurde erstellt.'
end
# gets called, when it's your turn
def move_requested
logger.info "Spielstand: #{gamestate.points_for_player(gamestate.current_player)} - #{gamestate.points_for_player(gamestate.other_player)}"
move = best_move
logger.debug "Zug gefunden: #{move}" unless move.nil?
move
end
def best_move
GameRuleLogic.possible_moves(gamestate).sample
end
end
Abgabe des Clients im SC Wettkampfsystem
Da Ruby eine interpretierte Sprache ist, muss der Ruby-Quellcode direkt
in ein ZIP-Archiv gepackt und auf das Wettkampfsystem hochgeladen
werden. Auf dem Wettkampfsystem ist ein Ruby-Interpreter sowie das
aktuellste software_challenge_client
Gem installiert. Alle weiteren
Bibliotheken müssen im ZIP-Archiv vorhanden sein. Nach dem Hochladen des ZIP-Archivs muss die auszuführende Hauptdatei im Wettkampfsystem
ausgewählt werden. Diese wird dann zum Start des Computerspielers
gestartet. Damit dies richtig funktioniert, ist es entscheidend, dass
die Hauptdatei mit einer sogenannten "Shebang"-Zeile beginnt:
#!/usr/bin/env ruby
Weiterhin ist es ratsam, den Magic-Comment zum Encoding direkt unter die Shebang-Zeile zu schreiben:
# encoding: UTF-8
Ein vollständiges Beispiel für einen abgabefertigen Ruby-Computerspieler
gibt es im example Verzeichnis des Computerspieler-Gems bei
Github.
Packt man die beiden Dateien client.rb
und main.rb
in ein
ZIP-Archiv, hat man einen abgabefertigen Computerspieler. Beim Hochladen
wählt man main.rb
als Hauptdatei.
Generating the Documentation
Code documentation can be generated using YARD in the project root (source code
needs to be checked out and bundle
has to be executed,
see Installation):
$ yard
After generation, the docs can be found in the doc
directory. Start at
index.html
.
Documentation for the latest source can also be found on rubydoc.info.
When updating the docs, you may use
$ yard server --reload
or inside a docker container
$ yard server --reload --bind 0.0.0.0
to get a live preview of them at http://localhost:8808.
Development
After checking out the repo, run bin/setup
to install
dependencies. Then, run rspec
to run the tests. You can also
run bin/console
for an interactive prompt that will allow you to
experiment.
To install this gem onto your local machine, run gem uninstall
software_challenge_client
to remove an existing gem and then bundle exec rake
install
to install the current version.
To develop inside a docker container, make sure you have Docker installed and execute
develop.sh
.
Specs
The gem is tested using RSpec. To run all tests, execute rspec
. When
developing, you may use Guard to execute tests when files change. To do this,
execute guard
. Tests will then be automatically run when you change a file.
Linting
Linting by rubocop is included in the guard config. It is run when all specs pass.
Releasing
To release a new version, update the version number in
lib/software_challenge_client/version.rb
and update RELEASES.md.
Then run bundle exec rake release
, which will create a git tag for the
version, push git commits and tags, and push the .gem
file to
rubygems.org. You may also use the release.sh
script
which executes bundle exec rake release
in a suitable docker container.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/CAU-Kiel-Tech-Inf/socha_ruby_client. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct (from Contributor Covenant).