Skip to content

Instantly share code, notes, and snippets.

@801YutaKa108
Created April 9, 2020 04:34
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save 801YutaKa108/170ea823ce93b59f70859d340b76faf7 to your computer and use it in GitHub Desktop.
Save 801YutaKa108/170ea823ce93b59f70859d340b76faf7 to your computer and use it in GitHub Desktop.
import turtle
import random
def seed(x, y, my_turtle):
# (x, y)にタートルを移動させる
my_turtle.pu() # 移動時、線を引かない
my_turtle.setposition(x, y)
def tree(n, length, my_turtle, bloom_point):
# 幹または枝を描く
my_turtle.pd()
my_turtle.pensize(n)
my_turtle.forward(length)
# 描いている枝が、先端(n=0)でなければ、さらに分岐した枝を描く
if n > 0:
# 枝が生える分岐点の座標を記録
branch_point = my_turtle.pos()
# 分岐点から生える枝の数を2~4本でランダムに選ぶ
branch_number = random.randint(2, 4)
# 枝を1本ずつ
for _ in range(branch_number):
# 枝の角度、長さをランダムに決める
branch_angle = random.uniform(-45, 45)
branch_length = length * random.uniform(0.75, 0.9)
# 枝の方向を向く
my_turtle.right(branch_angle)
# 再起関数で、もう一段細い枝を描く
tree(n - 1, branch_length, my_turtle, bloom_point)
# 枝の方向からもとの角度に戻る
my_turtle.left(branch_angle)
# 枝の分岐点に戻る
my_turtle.pu()
my_turtle.setpos(branch_point)
# 描いている枝が、先端(n=0)であれば、座標を記録する
else:
# 枝の先端を記録
bloom_point.append(my_turtle.pos())
def bloom(my_turtle, bloom_point):
my_turtle.pu()
for position in bloom_point:
# 花の場所に移動
my_turtle.setpos(position)
# 花が咲く
my_turtle.dot(8, "pink")
if __name__ == "__main__":
# 絵画領域の準備
turtle.setup(width=300, height=300)
# タートルの用意
my_turtle = turtle.Turtle()
my_turtle.speed(0) # タートルの移動速度の設定
my_turtle.setheading(90) # 上向きにする
# 枝の短点を格納するリストを用意しておく
bloom_point = []
# 木が生える場所に種をまく
seed(x=0, y=-150, my_turtle=my_turtle)
# 木を成長させる
tree(n=5, length=40, my_turtle=my_turtle, bloom_point=bloom_point)
# 花を咲かせる
bloom(my_turtle=my_turtle, bloom_point=bloom_point)
# 終了後も絵画領域を表示させたままにする
turtle.done()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment