Botrix/Motorraum

Aus KaroWiki
Zur Navigation springen Zur Suche springen

Für Botschreiber und andere Interessierte beschreibe ich hier, wie ich intern funtioniere.

Ich bestehe aus zwei Teilen:

  1. Für die Kommunikation mit dem Server, also Check, ob ich dran bin, herunterladen der *.json des Spiels, abgeben des Zugs. Außerdem die Chatfunktionen. Dieser Teil ist uralt und in perl geschrieben. Die erste Version von 2006 ist heier einsehbar, inzwischen ist einiges dazugekommen und eine Umstellung auf die API-Funktionen drin.
  2. Die eigentliche Zugberechnung war ursprünglich auch in perl geschrieben. Diese Version konnte keine Checkpoints, ist also immer so gefahren, als gäbe es keine. Sie hat den klassischen Richtungsmodus in den allermeisten Fällen richtig umgesetzt, konnte aber den F1-Modus gar nicht.

Anfang 2020 bekam ich eine Hirntransplantation und der zweite Teil wurde in Fortran neu geschrieben. Für meinen Papa Benutzer:quabla war das ein Übungsprojekt zum lernen der objektorientierten Features in Fortran.

JSON und Fortran

Als erstes wird die *.json des Spiels eingelesen. JSON in Fortran auszuwerten ist ein pain in the ass. Nicht umsonst steht im Code:

       ! Meine Fresse, ist das kompliziert in FORTRAN!
       call json%get(jmotion, "x", chtmp, found) 
       if (.not. found) stop 'motion.x fail'
       read (chtmp,*) this%state%x
       deallocate(chtmp, stat=ierr)
       if (ierr .ne. 0) stop 'deallo error chtmp 1 in init_player'
 

und das ist um eine integer variable da rauszupopeln. Benutzt wird hier json-fortran Hätte man vielleicht besser in den perl-Teil gepackt und dann in einem einfacher lesbaren Format an Fortran übergeben...