タートルグラフィックスでクリックした場所によって描く絵を変えよう


タートルグラフィックスでクリックした場所にカメを移動させてみようで作成したコードを改修して、クリックした場所(座標)によって、カメが描く絵を変えてみます。


話を始める前に、カメが移動する時は線を描かないように変更しておきます。

import turtle


# クリックした箇所にカメが移動する
def move_turtle(x, y):
␣␣␣␣turtle.penup()
␣␣␣␣turtle.goto(x, y)
␣␣␣␣turtle.pendown()


turtle.shape("turtle")

screen = turtle.Screen()
screen.onclick(move_turtle)
screen.listen()
turtle.done()

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

penup()にはペンを上げる(スクリーンからペンを離す)、pendown()にはペンを下げる(スクリーンにペンを付ける)という意味がありまして、ペンを上げてからカメを移動して、移動が終わったらペンを下げるようにします。




クリックした場所(座標)で描く絵を変えるという処理は、画面中央よりも左側の場合は円(circle)を描き、中央よりも右側の場合は四角(square)を描くようにします。


コードの可読性を考え、先程のコードのmove_turtle関数の上に2つの関数を追加しておきます。

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

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


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

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

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

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

if-else文で、x の値が 0 より大きい場合はdraw_square関数を実行し、そうでなければdraw_circle関数を実行するようにします。


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

コードを変更後に実行してみると、

のようにクリックした場所で描く絵が変わりました。




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

import turtle


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


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


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


turtle.shape("turtle")

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