4

l システム (TurtleWorld ライブラリ) を再現するためにタートル グラフィックスを使用しています。私が適用しようとしたルールは、以前に保存された状態に戻る必要がない場合はうまく機能しますが、 [ と ] (以下のルールを参照) がある場合はいつでも、物事が壊れ、タートルはランダムな bs を描画するだけです。

基本的に「]」がどこにあるかをチェックするIF文でコードが壊れていると思います。(また、現時点では最適化されていないことを知っています。明確にするために、しっかりしたIFを書きました...)

EDIT : 新しいコード - get_heading() があるので、角度を計算する必要はありませんでした。

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()
4

1 に答える 1

2

いくつかのアイデア:

  • -handlerでangle新しい角度 ( newa) に設定することはありません。]
  • コメントによると、条件が間違っていnewa>0ます。角度が正の場合は左に曲がります。
  • rt負の角度をうまく処理できますか?
  • 代わりに使用すると、コードを大幅に簡素化できpop、状態のタプルなどをプッシュできます。
  • のインデックス-1は に等しいlen(lst) - 1です。

提案の例pop:

>>> state = []
>>> angle = 90
>>> posx = 10
>>> posy = 15
>>> state.append((angle, posx, posy))
>>> angle = 40
>>> angle, posx, posy = state.pop()
>>> angle
90
于 2011-06-11T10:56:22.767 に答える