17
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

qnoteAdvent Calendar 2017

Day 10

タートルグラフィックスでネコを描く

Last updated at Posted at 2017-12-09

弊社のオフィスには7匹のネコがおり、その為かネコ好き社員が多く在籍している変わった会社となっております。斯く言う私もネコ好きなのですが、同じくらい亀も好きで、家にはクサガメとホシガメ(リクガメ)を飼っております。
今回はネコとカメをテーマにタートルグラフィックスでネコを描いてみます!

タートルグラフィックスとは

画面上に表示されているカメに命令を与えて動きの指示を出します。カメが移動をすると軌跡が線となって描画されます。簡単な命令を組み合わせることで複雑な図形の描画ができるため、プログラミング学習の現場で使用されているそうです。
WindowsではPythonをインストールすればタートルグラフィクスが標準で使えます。

まずはカメを動かしてみる

まずはカメを前進させてみます。タートルグラフィックスでは描画エリアの中央が(0 , 0)となっており、カメは0度(東)を向いています。この状態でforward(前進)の命令を与えてみます。

forward.py
# coding: UTF-8

import turtle

wn = turtle.Screen()
tur = turtle.Turtle()
tur.shape("turtle")

# カメを100前進させる
tur.forward(100)

wn.exitonclick()
forward.png

カメの向きを変える

カメの向きを変える場合はsetheadingで指定します。引数は角度になりますが、少し癖があるので注意が必要です。【東(0度)、北(90)、西(180)、南(270)】
向きを変更して五芒星の描画を行います。

star.py
# coding: UTF-8

import turtle

wn = turtle.Screen()
tur = turtle.Turtle()
tur.shape("turtle")

for i in range(5):

    # カメの向きを変える
    tur.setheading(i * 216)
    tur.forward(100)

wn.exitonclick()
star.png

ネコを描画してみる

タートルグラフィックスでは上記で説明した命令以外にもたくさん用意されております(参考https://docs.python.jp/3/library/turtle.html#turtle.forward)
では実際にいろいろな命令を使ってネコを描画してみたいと思います。

cat.py
# coding: UTF-8

import turtle

wn = turtle.Screen()
tur = turtle.Turtle()
tur.pensize(3)
tur.shape("turtle")

# まるかいてちょん
def maru_chon(kame, i):
    kame.penup()
    kame.goto(50 * i, 100)
    kame.down()
    kame.circle(50)
    kame.penup()
    kame.goto(30 * i, 140)
    kame.dot(20)


# お豆に芽が出てて―
def omame(kame):
    kame.penup()
    kame.goto(0, 80)
    kame.down()
    kame.circle(20)
    kame.goto(0, 50)


# お空に三日月のぼってた
def osora_mikaduki(kame):
    kame.penup()
    kame.goto(0, 50)
    kame.down()
    kame.goto(80, 50)
    kame.setheading(90)
    kame.circle(80, -180)
    kame.setheading(90)
    kame.goto(0, 50)


# 植木鉢1
def uekibachi_1(kame):
    kame.penup()
    kame.goto(-100, 140)
    kame.down()
    kame.setheading(210)
    kame.circle(100, 120)
    kame.setheading(90)
    kame.setx(100)
    kame.setheading(30)
    kame.circle(100, 120)


# 植木鉢2
def uekibachi_2(kame):
    kame.penup()
    kame.goto(0, -70)
    kame.setheading(0)
    kame.circle(170, 50)
    kame.down()
    kame.circle(170, 260)


# ひげを付けたら
def hige(kame, i):
    kame.penup()
    kame.goto(90 * i, 80)
    kame.down()
    kame.goto(130 * i, 90)
    kame.penup()
    kame.goto(90 * i, 60)
    kame.down()
    kame.goto(130 * i, 60)
    kame.penup()
    kame.goto(90 * i, 40)
    kame.down()
    kame.goto(130 * i, 30)


maru_chon(tur, -1)
maru_chon(tur, 1)
omame(tur)
osora_mikaduki(tur)
uekibachi_1(tur)
uekibachi_2(tur)
hige(tur, -1)
hige(tur, 1)

tur.hideturtle()
wn.exitonclick()
neko.png

最後に

いかがでしょうか。とてもかわいいネコが書けたと思います。
タートルグラフィックは気軽に線画などが描画できるため、気分転換などにオリジナルの数式で幾何学模様を作ってみるのも楽しいかもしれませんね。

17
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?