タートルグラフィックスで学ぶ Python のキホン 第 21 章
教材コード
付録

じゆうに書く

白紙のエディタです.思いついたことを,そのまま試してください.

教材のページは,どれも「読んでから試す」順番になっています. このページは逆です.先に書いて,動かしてみるための場所です. 習ったことを試すのにも,課題を書くのにも, ただ落書きするのにも使ってかまいません.

下のボタンから右側にひな形を読み込み,好きなように書き換えて 「▶ 実行」(Ctrl + Enter)を押してください.

このページの使い方
  • 書いた内容はブラウザが覚えています.ページを閉じても消えません.
  • まっさらに戻したいときは「↺ 最初から」を押します.
  • できたものは「⤓ 保存」で .py ファイルとして手元に保存できます.作品として残すときは,このファイルを保存しておきます.
  • 動き続けるプログラム(ontimer を使ったもの)は「■ 停止」で止めます.
  • 命令の名前を忘れたら,タートル命令リファレンスを見てください.

白紙のひな形

いちばん短い,何も入っていないプログラムです.ここから始めてください.

mynote.py
from turtle import *

done()
ヒント 1 行目の from turtle import * は「タートルの道具箱を開ける」合図, 最後の done() は「おしまい」の合図です. この 2 行のあいだに書いていきます.

困ったときは — 書き出しのテンプレート

「何から書けばいいかわからない」ときは,作りたいものに近いひな形を開いて, 中身を書き換えるのがいちばん速い方法です.4 つ用意しました.

作りたいもの使うひな形おもに使う回
絵や模様を描く① 図形を描く第 2・4-1・4-2・5-1 回
ものを動かす② アニメーション第 8-1・8-2 回
遊べるものを作る③ ゲーム第 12 章
数を入力して使う④ 入力を使う第 3-1・7 回
draw_template.py
# 題名:
# 名前:
# 日付:

from turtle import *

pensize(3)
pencolor("navy")

# ここから描く
for i in range(6):
    fd(90)
    rt(60)

ht()
done()
図 1 ① のひな形を実行したところ.range の数と角度を変えてみてください.
anim_template.py
# 題名:
# 名前:
# 日付:

from turtle import *

setup(620, 460)

# --- 準備(1 回だけ) ---
t = Turtle()
t.shape("turtle")
t.color("seagreen")
t.pu()
t.goto(-280, 0)

# --- 1 コマぶんの処理 ---
def tick():
    t.fd(5)
    if t.xcor() > 290:
        t.goto(-280, t.ycor())
    ontimer(tick, 30)      # ← 次のコマを予約する

ontimer(tick, 30)          # ← 最初の 1 回

done()
ヒント ブラウザでは while True: で動かし続けることができません. 動くものを作るときは,かならず ontimer を使ってください (第 10 章・第 12 章).
game_template.py
# 作品名:
# 名前:
# 日付:
# 遊び方:

from turtle import *
import random

setup(620, 460)
bgcolor("#0d1117")

# --- 1. 準備 ---------------------------------------------------
player = Turtle()
player.shape("triangle")
player.color("cyan")
player.pu()
player.goto(0, -170)

board = Turtle()
board.ht()
board.pu()
board.color("white")
board.goto(-290, 190)

score = 0
playing = True

def show_score():
    board.clear()
    board.write("スコア " + str(score), font=("Arial", 18, "normal"))

# --- 2. 操作 ---------------------------------------------------
def go_left():
    if playing:
        player.setx(max(-290, player.xcor() - 20))

def go_right():
    if playing:
        player.setx(min(290, player.xcor() + 20))

# --- 3. 毎フレームの処理 ---------------------------------------
def tick():
    global score, playing

    # ここに「動かす」「当たり判定」を書く

    show_score()

    # ここに「終わりの条件」を書く

    ontimer(tick, 30)

show_score()
onkeypress(go_left, "Left")
onkeypress(go_right, "Right")
listen()
ontimer(tick, 30)

done()
ヒント キーが効かないときは,一度タートル画面をクリックしてください. コード欄に文字カーソルがあると,キーはコード欄に取られます.
input_template.py
# 題名:
# 名前:
# 日付:

from turtle import *

name = input("名前を入れてください:")
n = int(input("何角形にしますか:"))

print("こんにちは," + name + " さん")
print(str(n) + " 角形を描きます")

pensize(3)
pencolor("darkorange")

for i in range(n):
    fd(240 / n)
    rt(360 / n)

ht()
done()
ヒント input() を使うプログラムは,右下の コンソールの入力行にあらかじめ答えを 1 行ずつ書いておくか, そこを空にしたまま実行して,出てくる窓に打ち込みます. このひな形には ひろしま6 が入れてあります. 書き換えて試してください. input() が返すのは文字なので, 計算に使うときは int() で数に直します.

よく使う命令の早見

くわしくはタートル命令リファレンスにあります. ここには,書き出すときによく使うものだけを並べます.

やりたいこと書き方
進む・下がるfd(100) bk(50)
曲がるlt(90) rt(45)
線を引かずに動くpu()goto(x, y)pd()
色と太さpencolor("red") pensize(3)
塗りつぶすbegin_fill()end_fill()
同じことを繰り返すfor i in range(6):
条件で分けるif x > 100:
まとまりに名前を付けるdef kaku():
かめを増やすt = Turtle()
文字を書くwrite("文字", font=("Arial", 18, "normal"))
動かし続けるontimer(tick, 30)
キーを受けるonkeypress(go, "Left")listen()
当たり判定if t.distance(u) < 30:
でたらめな数import randomrandom.randint(1, 6)
かめを消すht()

うまくいかないときは

  • コンソールを見る.エラーには行番号種類が出ます.まずそこを読んでください.
  • 全角に注意.() や全角スペースは使えません.SyntaxError: invalid character と出たらこれです.
  • 1 行目を確かめる.NameError: name 'fd' is not defined は,from turtle import * の書き忘れです.
  • 少しずつ書く.2〜3 行書いては実行する人のほうが,結果的に速く進みます.
  • 最後に足した行を消す.そこまでは動いていたはずです.
  • 速さを落とす.「とてもゆっくり」にすると,かめがどこで思わぬ方へ曲がったかが目で追えます.
ヒント このページは採点されません. 壊れても,消しても,何を書いてもかまいません. 失敗できる場所があることが,上達のいちばんの近道です.