restauration de l'état enregistré dans le code système de l en utilisant des graphiques de tortue

StackOverflow https://stackoverflow.com/questions/6315399

Question

J'utilise les graphiques de tortue pour reproduire l-systèmes (bibliothèque TurtleWorld). Les règles que j'ont essayé d'appliquer à un état sauvegardé précédent travail bien quand ils ne concernent pas aller, mais chaque fois qu'il ya un [et] (voir la règle ci-dessous), les choses se brisent et la tortue ne consomme que bs aléatoires.

En fait, l'instruction IF qui vérifie où « ] » est présent, est l'endroit où les pauses de code, je pense. (De plus, je sais que ce n'est pas optimisé pour le moment, je l'ai écrit un solide SI pour des raisons de clarté ...)

EDIT:. Nouveau code - ce tout angle de calcul n'a pas été nécessaire, comme nous l'avons get_heading (), qui nous fait part de l'angle que nous sommes orientés dans

import turtle

turtle.down()

n = 'F'

s1 = 'F'
s2 = 'FF-[-F+F+F]+[+F-F-F]'
#s3 = 'F'
#s4 = 'FF'

steps = 5

for i in range(steps):
    n = n.replace(s1,s2)
    #n = n.replace(s3,s4)

a = 25

x = []
y = []
angle = []

for i in n:
    if i == 'F':
        turtle.forward(2)
    if i == '+':
        turtle.left(a)
    if i == '-':
        turtle.right(a)
    if i=='[':
        x.append(turtle.xcor())
        y.append(turtle.ycor())
        angle.append(turtle.heading())
    if i==']':
        turtle.pu()
        turtle.setpos(x[len(x)-1],y[len(y)-1])
        turtle.right(turtle.heading())
        turtle.setheading(angle[len(angle)-1])
        x.pop()
        y.pop()
        angle.pop()
        turtle.pd()
Était-ce utile?

La solution

Quelques idées:

  • Vous ne angle ensemble au nouvel angle (newa) dans votre ]-gestionnaire.
  • Votre condition est mauvais selon le commentaire, newa>0 se tourner vers la gauche si l'angle est positif.
  • Êtes-vous sûr poignées de rt négatif angles bien?
  • Vous pourrait simplifier votre code beaucoup si vous utilisez pop à la place, et poussé un tuple ou somesuch de l'État.
  • Un indice de -1 est égal à len(lst) - 1.

Exemple de pop-suggestion:

>>> state = []
>>> angle = 90
>>> posx = 10
>>> posy = 15
>>> state.append((angle, posx, posy))
>>> angle = 40
>>> angle, posx, posy = state.pop()
>>> angle
90
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top