• [^] # Re: En Python, modélisé

    Posté par . En réponse au message Avent du Code, jour 9. Évalué à 2.

    Splendide !

    J'ai réutilisé l'idée de l'utf8 pour le jour 10 aussi. La lecture du LCD est infiniment plus facile, plus besoin de plisser les yeux pour deviner les lettres.

    Pour l'animation de la corde j'ai choisis d'afficher le numéro du noeud (0 à 9) en noir sur fond jaune ; et de déplacer la caméra de 19 d'un coup. J'aimais pas trop la voir manger le mur :). J'ai aussi géré les largeurs impaires, c'est le cas de mon terminal.

    class display:
     def __init__(self):
     self.w, self.h = tuple(os.get_terminal_size())
     border = "o"
     self.delta = numpy.array((self.w//2, self.h//2))
     top = border * (self.w)
     wodd = self.w%2
     lines = [
     border + "░ " * (self.w//2-1) + "░"*wodd + border,
     border + " ░" * (self.w//2-1) + " "*wodd + border
     ]
     self.background = [
     top + "".join(lines[h%2] for h in range(self.h - 2)) + top,
     top + "".join(lines[1-h%2] for h in range(self.h - 2)) + top
     ]
     def __call__(self, knots):
     print("033円[0;0H", end='')
     x, y = self.delta + knots[0]
     J = 19 # must be odd to see scroll
     if x <= 0:
     self.delta[0] += J
     if x >= self.w-1:
     self.delta[0] -= J
     if y <= 0:
     self.delta[1] += J
     if y >= self.h-1:
     self.delta[1] -= J
     txt = [c for c in self.background[sum(self.delta)%2]]
     for i,knot in enumerate(reversed(knots)):
     x, y = knot + self.delta
     txt[int(x + y * self.w)] = "033円[30;43m" + str(9-i) + "033円[0m"
     print("".join(txt),end='')
     time.sleep(.008)