Ich habe mich entschieden Argh! Earthlings! um eine Autopilot-Funktion anzureichern, die dafür sorgen soll, dass fehlerhafte Änderungen am Plot in einer Art Integrationstest schnellstmöglich gefunden sowie beseitigt werden können. Doch leider macht der Code nicht mit.
What happend
Der Plot von Argh! Earthlings! steht bereits seit einiger Zeit fest. Ich habe mir aber vorgenommen noch an der Spieltiefe zu feilen. Um dies so effizient wie es nur geht machen zu können, wird eine Art Integrationstest nötig sein. Ich habe mir zudem überlegt, dass dieser "Autopilot" auch den Walkthrough, also die Komplettlösung, abhaken soll. Und, ich will messen, ob meine selbst gesteckten Ziele der Spielzeit eingehalten werden oder nicht. Schließlich möchte ich ja als Spieler einige Zeit mit Rätseln und Knobeleien beschäftigt werden.
Das Konzept des Autopiloten steht, das passende Script in der Version "shortest walkthrough" steht im Groben. Zeit also für die Referenzimplementierung...
Nach einigem Hinundher habe ich mehrere potenzielle Stellen im Code gefunden, die die Aufgabe scheinbar schnell erledigen könnten. Doch Pustekuchen. Race-Conditions sind eine fiese Ausgangssituation für diese Herausforderung. Ein Zeichen für suboptimalen Code.
Nach mehreren Stunden wiederholten Fehlerfindens, war das Fazit ernüchternd: So einfach kann ich die Funktion nicht einbauen. Ein Refactoring muss her, das die begangenen Code-Sünden ausbügelt und den Weg frei macht für den Autopiloten.
Ironischerweise will ich einen Test erzeugen, den ich zuvor mit einem Test sichern will. Gibt es den? Nein... wieder ein Bad Smell, der mich sicherlich etliche Stunden Schlaf, Gesundheit oder/und Freizeit kosten wird...
Lessons Learned
- Auch wenn man sich 100% sicher ist, dass der Code stabil und wartungsfreundlich ist, gibt es irgendwo immer einen Bug, der einem die Freude zerstört.
- Eine durchdachte, erweiterbare und verständliche Architektur ist immens wichtig für die Planung neuer Features.
- Einen Blog zu schreiben, um seinen Fehler einzugestehen ist ein guter Motivator.
Next Steps
- Planung der Scripting-Engine unter Berücksichtigung von "Separation of Concerns", Leichtgängigkeit und Laufzeitverhalten.
- Refactoring der aktuellen Engine, Schritt für Schritt, um das Ziel geschickt und sanft zu erreichen.
- Autopiloten einbauen.
- Lösung der Herausforderung genießen.