タートルグラフィックスでクリックした場所に絵を描くパターンを増やしてみよう


タートルグラフィックスでクリックした場所によって描く絵を変えようでは、起動したウィンドウの画面左側をクリックしたら円を描き、画面右側を押したら四角を描くようにしました。



このコードを画面左上をクリックしたら丸、画面右上をクリックしたら四角、画面左下をクリックしたら三角で、画面右下をクリックしたら星を描くように改修してみます。




先程のコードのmove_turtle関数の上に2つの関数を追加しておきます。

# 移動した先で三角を描く
def draw_triangle():
␣␣␣␣for i in range(3):
␣␣␣␣␣␣␣␣turtle.forward(50)
␣␣␣␣␣␣␣␣turtle.left(120)
# 移動した先で星を描く
def draw_star():
␣␣␣␣for i in range(5):
␣␣␣␣␣␣␣␣turtle.forward(50)
␣␣␣␣␣␣␣␣turtle.left(144)

※␣は半角スペース1個分


move_turtle関数でクリックした場所(座標)から何を描くかのコードを追加し\ます。

クリックした場所はmove_turtle関数の一番目の引数の x と y でわかりますので、

# クリックした箇所にカメが移動する
def move_turtle(x, y):
␣␣␣␣turtle.penup()
␣␣␣␣turtle.goto(x, y)
␣␣␣␣turtle.pendown()
␣␣␣␣if x < 0 and y > 0:
␣␣␣␣␣␣␣␣draw_circle()
␣␣␣␣elif x > 0 and y > 0:
␣␣␣␣␣␣␣␣draw_square()
␣␣␣␣elif x < 0 and y < 0:
␣␣␣␣␣␣␣␣draw_triangle()
␣␣␣␣else:
␣␣␣␣␣␣␣␣draw_star()

※␣は半角スペース1個分


今回はif-elif-else文を使っています。

if 条件式①:
␣␣␣␣# 上の条件式①が真(True)の時に実行
elif 条件式②:
␣␣␣␣# 上の条件式①が偽(False)で条件式②が真(True)での時に実行
else:
␣␣␣␣# 条件式①と条件式②が偽(False)の時に実行

のように上から順に条件式を判断していきます。

elifは何個でも追加する事が出来、様々な条件分岐を設ける事が出来ます。


一つの条件式の中に

if x < 0 and y > 0:
if 条件式① and 条件式②:

のように if の条件式内に複数の条件式を含めたい時は、and演算子やor演算子を使います。

and演算子は条件式①と条件式②が共に真(True)の時に条件を満たし、or演算子は条件式①と条件式②のどちらかが真(True)の時に条件を満たします。




今回作成したコードは下記になります。

import turtle


# 移動した先で四角を描く
def draw_square():
    for i in range(4):
        turtle.forward(50)
        turtle.left(90)


# 移動した先で丸を描く
def draw_circle():
    turtle.circle(30)


# 移動した先で三角を描く
def draw_triangle():
    for i in range(3):
        turtle.forward(50)
        turtle.left(120)


# 移動した先で星を描く
def draw_star():
    for i in range(5):
        turtle.forward(50)
        turtle.left(144)


# クリックした箇所にカメが移動する
def move_turtle(x, y):
    turtle.penup()
    turtle.goto(x, y)
    turtle.pendown()
    if x < 0 and y > 0:
        draw_circle()
    elif x > 0 and y > 0:
        draw_square()
    elif x < 0 and y < 0:
        draw_triangle()
    else:
        draw_star()


turtle.shape("turtle")

screen = turtle.Screen()
screen.onclick(move_turtle)
screen.listen()
turtle.done()
マインクラフト用ビジュアルエディタを開発しています。
詳しくはinunosinsi/mcws_blockly - githubをご覧ください。