From 1f053822ff91c73bed42347a7644140bb2e793e5 Mon Sep 17 00:00:00 2001 From: rene Date: Sun, 29 Mar 2026 10:19:34 +0200 Subject: [PATCH] Krabbe: ASCII-only, weiter sichtbar; Taucher (Scuba-Diver) neu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- asciiquarium_ng.py | 63 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 59 insertions(+), 4 deletions(-) diff --git a/asciiquarium_ng.py b/asciiquarium_ng.py index f8c3df1..6082e78 100755 --- a/asciiquarium_ng.py +++ b/asciiquarium_ng.py @@ -301,7 +301,7 @@ class Aquarium: fns = [self.add_whale, self.add_monster, self.add_swan, self.add_ducks, self.add_dolphins, - self.add_seahorse, self.add_squid] + self.add_seahorse, self.add_squid, self.add_diver] if not self.cfg.no_ship: fns.append(self.add_ship) if not self.cfg.no_shark and not self.cfg.vegan: @@ -1355,6 +1355,60 @@ mmmmmm death_cb=lambda e, aq: aq.random_object(e), )) + # ── Diver (Taucher) ────────────────────────────────────────────────────── + + def add_diver(self, dead=None): + diver_r0 = _p(r""" + O +\-|> + /\ +""") + diver_r1 = _p(r""" + O +/-|> + \/ +""") + diver_l0 = _p(r""" + O +<|-/ + /\ +""") + diver_l1 = _p(r""" + O +<|-\ + \/ +""") + mask_r = _p(""" + y +wccy + gg +""") + mask_l = _p(""" + y +yccw + gg +""") + going_right = random.random() < 0.5 + speed = random.uniform(0.5, 1.0) * (1 if going_right else -1) + if going_right: + x, frames, mask = -6, [diver_r0, diver_r1], mask_r + else: + x, frames, mask = self.cols - 2, [diver_l0, diver_l1], mask_l + y = random.randint(9, max(10, self.rows - 5)) + + def on_death(e, aq): + aq.add_bubble(e) + aq.random_object(e) + + self._add(Entity( + frames=frames, masks=[mask, mask], + x=x, y=y, + cb_args=[speed, 0, 0, 0.2], + default_color='c', + die_offscreen=True, + death_cb=on_death, + )) + # ── Predation (--bloody) ───────────────────────────────────────────────── def _check_predation(self): @@ -1407,8 +1461,9 @@ mmmmmm elif st == 1: # opening if self._cs_portcullis and not self._cs_portcullis.alive: gx, gy = self._gate_pos() - crab_f0 = ['(°w°)', '/| |\\'] - crab_f1 = ['(°w°)', '\\| |/'] + # ASCII-only crab to avoid wide-char rendering issues + crab_f0 = ['(._.)', '/| |\\'] + crab_f1 = ['(._.)', '\\| |/'] mask = [' yWy ', ' '] c = CrabEntity( frames=[crab_f0, crab_f1], masks=[mask, mask], @@ -1416,7 +1471,7 @@ mmmmmm cb_args=[-1, 0, 0, 0.25], default_color='y', die_offscreen=False, - steps_out=14, + steps_out=22, # walk further so crab is clearly visible entity_type='crab', ) self._add(c)