turtle グラフィックスに挑戦してみよう

タートルグラフィックス

Pythonには標準でturtle(タートル)と呼ばれるプログラミング学習用のグラフィックライブラリが用意されています。turtleで簡単なグラフィックに挑戦してみましょう。

まずは以下のコードを動かしてみてください。

import turtle

t = turtle.Turtle()
t.right(90)
t.forward(100)
t.left(90)
t.backward(100)

turtle.done()

以下のような線が描画されます。

コードの解説は後ほどします。2本線が引かれただけのものですが、学習をすすめると以下のような複雑なグラフィックが簡単に描画できるようになります。

Pythonの対話モード

なお、turtleを使用する場合、対話モードで実行したほうが楽かもしれません。Pythonの実行方法には2種類あります。1つめはこれまで練習してきたとおり、Pythonスクリプトファイルを実行する方法です。もう1つはpythonコマンドによる対話モードによる実行です。

コマンドラインでpythonと打ち込んでみてください。以下のように対話モードが開始されます。「>>>」の後ろに任意のPythonコードを入力することが可能です。

>python
Python 3.9.2 (tags/v3.9.2:1a79785, Feb 19 2021, 13:44:55) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

また、終了する際は「quit()」と入力します。コードの動作がよくわからなくなってきた場合は一旦終了して最初から開始することをおすすめします。

対話モードはスクリプトを書かずにPythonの動作を確認することができ、非常に便利ですが、抵抗がある方はこれまで通りスクリプトを作成しても構いません。

以降のコードでturtleを使用したコードを対話モードではなく従来どおりスクリプトで実行する場合、以下のコードを末尾に付加するようにしてください。

turtle.done()

turtleの基本的な使い方

turtleの基本的な使い方

turtleは基本的に、以下のフローで使用することになります。

  1. turtleをインポートする
  2. turtleオブジェクトを生成する
  3. turtleオブジェクトのメソッドを順次使用して描画する

少し難しく書いているため最初の例と併せて説明します。turtleをインポートとは、以下の通りimport文を使用します。

import turtle

turtleオブジェクトを生成とは、以下の通りturtle()を使用することを指しています。

t = turtle.Turtle()

メソッドを順次使用して描画、とは以下のように「t.メソッド(引数)」を羅列していくことを指しています。

t.right(90)
t.forward(100)
t.left(90)
t.backward(100)

上のコードの意味についてより細かく説明します。

t.rignt(90)で右回りに90度回転させています。初期状態がx軸方向に0度なので、右回りに90度回転させると下向きになります。

t.forward(100)で長さ100だけ線を引いています。t.leftで90度左回りに回転、さらにt.backward(100)で向いた方向と逆向きに長さ100だけ線を引いています。

turtleの基本的なメソッド

基本的なメソッドには以下のようなものがあります。覚える必要はなく、必要に応じて参照するようにしましょう。

method 意味
pendown() ペンを下ろす(動くと線が引かれる)
penup() ペンをあげる(動いても線が引かれない)
forward(距離) 現在の方向に引数で指定した距離進む
home() 原点(0, 0)に移動し開始時の方向に向ける
right(角度) 引数で指定した角度だけ右に回転する
left(角度) 引数で指定した角度だけ左に回転する
setposition(x, y) 引数で指定した位置 (x, y) に移動する
speed(1~10) スピードを 1 から 10 までの範囲の整数に設定する
pencolor(色) ペンの色を指定した色に設定する
pensize(太さ) ペンの太さを指定したサイズに設定する

その他にも色々あるのですが、興味がある方は以下のリンクを参照してください。

turtle --- タートルグラフィックス

星型を描いてみよう

では、以上の基本的な使用方法を踏まえて星型を描いてみましょう。星型の1つの角の角度は36度なので回転角に144度を指定します。

import turtle

t = turtle.Turtle()

t.forward(100)
t.right(144)
t.forward(100)
t.right(144)
t.forward(100)
t.right(144)
t.forward(100)
t.right(144)
t.forward(100)

実行すると以下のような星型が描画されます。

このコード、同じ処理が5回も繰り返されていますね。どうすれば良いでしょうか?少し考えてみてください。

以前学習したfor文を使用すると、以下のように書き換えることができます。

import turtle

t = turtle.Turtle()
for i in range(5):
	t.forward(100)
	t.right(144)

演習

先程のコードを改変して、以下のような複雑な星型を出力してみましょう。(ヒント:繰り返し回数を増やし、繰り返し処理時に長さを少しずつ変えています。)

解答例

ヒントのとおり、繰り返し回数を増やし、繰り返し処理時に長さを5ずつ増加させています。

import turtle

t = turtle.Turtle()
t.speed(10)

for i in range(25):
	t.forward(100 + 5 * i)
	t.right(144)

補足 色を変えてみる

最後に、遊びとして補足です。pencolorメソッドでペンの色を指定することが可能です。事前にturtle.colormode(255)を指定するとr, g, bを数値で指定することが可能となります。先程のコードでfor文中で色コードを少しずつ変え、繰り返し回数を増やすと序盤に紹介したグラデーションの星型を描画することができます。

import turtle

turtle.colormode(255)

t = turtle.Turtle()
t.speed(10)
for i in range(50):
	r = 255 - i * 2
	g = i * 2
	b = 128 + i * 2
	t.pencolor(r, g, b)
	t.forward(100 + 5 * i)
	t.right(144)