Beim Beschreiben der letzten Spalte der untersten Terminal-Zeile
löst automatischer Zeilenumbruch ein Scroll-Event aus. Bei 10 fps
füllt sich der Scrollback-Puffer kontinuierlich.
WRAP_OFF (ESC[?7l) beim Start, WRAP_ON (ESC[?7h) beim Beenden.
start_ys=[8,2,5] ließ Delfine nur zwischen y=1 und y=8 pendeln –
genau an der Wasseroberfläche (Wellen bei y=5-8), nie darunter.
Neuer Bogen [10,4,7]: Amplitude ±7, Zentrum y=10.
Delfine spannen y=3 (über den Wellen) bis y=10 (unter Wasser)
und durchqueren die Oberfläche in beiden Phasen.
- canvas.render() startet jetzt mit \033[2J um das gesamte Terminal zu löschen,
nicht nur die Canvas-Breite (verhindert Trails bei breiten Terminals)
- add_all_fish(): min 8 Fische statt 1, dichtere Formel (//200 statt //350)
- Krabben-Zeichen von '°' (non-ASCII, wide-char-Problem) auf '.' umgestellt
- steps_out 14→22: Krabbe läuft weiter aus dem Schloss heraus
- add_diver(): Scuba-Taucher mit 2-Frame-Animation, Sauerstoffblasen beim Tod
- CLI-Parameter via argparse: --speed (TICK-basiert), --no-shark, --no-ship,
--bloody (Hai frisst Fische mit Splat-Animation), --vegan (keine Räuber),
--any-key (beliebige Taste beendet)
- Config-Dataclass: wird durch Aquarium durchgereicht, steuert random_fns
- CrabEntity: Krabbe läuft aus Schlosstor heraus und kehrt zurück
- Portcullis-Animation: Falltor öffnet/schließt sich vor/nach der Krabbe
- Neue Tiere: add_seahorse (Seepferdchen), add_squid (Tintenfisch)
- entity_type für Fish und Shark für Kollisionserkennung
Whale body/spout-alignment logic was inverted (not going_right → wrong
direction). Initial fish population now starts distributed on-screen
instead of all off-screen edges, so the aquarium is immediately filled.
Same sprites, same colors, same entity timing as the Perl source.
Replaces Curses with direct ANSI truecolor escapes using the same
RGB values as our Homebrew fix (xterm-256 slots 16-231).