1967年に教育用に開発されたLOGOは子供向けプログラミング言語として人気を博しました。LOGOにはタートルグラフィックスと呼ばれるお絵かき機能がありました。この機能はPythonをはじめ多くの人気言語に受け継がれています。今回は、LOGOを振り返りつつタートルグラフィックスで遊んでみましょう。
教育向け言語LOGOについて
LOGOは1967年にマサチューセッツ州ケンブリッジにあるBBNという研究機関で開発されました。開発目標は、子供が遊べる数学の遊び場を作ることだったようです。
LOGOには標準規格はありませんが、LOGOから派生した多くの処理系が存在します。代表的なものには、1980年代にApple II用に開発された「Apple Logo」やTI-99/4A用に開発された「TI Logo」などがあります。その後、Windows向けの「MSWLogo」や、フリーでクロスプラットフォームに対応した「UCBLogo(Berkeley Logo)が登場します。
学校教育でもLOGOが使われたこともあり、LOGOはその後のプログラミング言語に大きな影響を与えました。
そして、LOGOの代表的な機能に「タートルグラフィックス」があります。これは、画面上にあるカーソルを動かすことでグラフィックスを描画する機能です。画面上のカーソルは、タートル(亀)と呼ばれており、LOGOの実装によっては亀のグラフィックスを表示します。
このタートルを前に進めたり、右に回転させたりと操作することで線を描画します。プログラミングにはなくてはならない繰り返しや条件分岐、関数呼び出しなどの制御構造を利用することで、複雑で面白い図形を描画できます。
ちなみに、UCBLogoは現在でも開発が続いており最新版は2021年12月にバージョン6.2.2が公開されています。そこで、今回、このUCBLogoを使う方法を紹介しようと思っていました。しかし、人気のプログラミング言語Pythonでもタートルグラフィックスが使えます。加えて、機能も豊富で資料も多くあります。そこで、今回はPythonを使ってタートルグラフィックスを実践する方法を紹介します。
Pythonで楽しむ「タートルグラフィックス」
それでは、ここでは、Pythonをインストールする方法を紹介します。PythonのWebサイトよりインストーラーをダウンロードしましょう。
Pythonのインストーラーは英語ですが、[Install Now]をクリックすると、すぐにインストールが始まります。インストールが終わったら、Pythonの対話環境の「IDLE」を起動しましょう。Windowsメニューから[Python 3.x > IDLE]をクリックするか、Windowsメニューの検索機能で「IDLE」と入力すると見つけられます。
PythonのWindows版/macOS版では最初からタートルグラフィックスが利用できます。IDLEを起動したら「from turtle import *」と打ち込んで[Enter]キーを押しましょう。すると、タートルグラフィックスを利用する準備が完了します。
タートルを動かすために、200ピクセル前進する「forward(200)」や左に90度方向転換する「left(90)」を打ち込んでみましょう。このようにして対話的に線を描画できます。
タートルを操作する簡単な命令を表にしてみました。これらの命令を使って簡単な図形を書いてみましょう。
関数 | 説明 |
---|---|
forward(x) | タートルをxだけ前進させる |
left(a) | data |
left(a) | a度だけタートルを左に回転させる |
right(a) | a度だけタートルを右に回転させる |
pu() | ペンを上げる。その後、線を引かない |
pd() | ペンを下ろす。その後、線を引く |
setpos(x, y) | タートルの位置を(x, y)に動かす |
pensize(w) | ペンの太さをwにする |
speed(x) | タートルの速度をxにする |
なお、Pythonのタートルグラフィックスで使えるコマンドの一覧は、こちらのマニュアルに記載があります。
シェルピンスキーの三角形を描いてみよう
なお、タートルグラフィックスが面白いのが、プログラミング言語の制御構文と組み合わせることで、複雑な図形を描画できることです。以下は「シェルピンスキーの三角形」と呼ばれる図形です。小さな三角形で大きな三角形が描画されるのが面白い図形です。
この図形を描画するには以下のようなプログラムを実行します。繰り返しを行うfor文や条件によって処理を変えるif文、関数を定義するdefなどを利用しています。
from turtle import *
# 関数を定義
def draw_tri(m, length):
if m <= 0: return
for _ in range(3):
draw_tri(m-1, length / 2)
forward(length)
left(120)
speed(0); pensize(4); pu(); setpos(-200,-50); pd()
# 関数を呼び出す
draw_tri(5, 400)
レヴィのC曲線を描いてみよう
次に「レヴィのC曲線」と呼ばれる図を描画してみましょう。この図形は、自己相似フラクタルとなっており、幾何学的な構造が美しい図形です。
この図形を描画するプログラムは次のようなものです。この図形も再帰処理を使う事で複雑な図形を短いプログラムで記述できます。
from turtle import *
# 関数を定義
def levy(n, length):
if n <= 0:
fd(length)
return
rt(45)
levy(n-1, length * 2/3)
lt(90)
levy(n-1, length * 2/3)
rt(45)
speed(0); pu(); setpos(-150, -50); pd(); pensize(4);
# 関数を呼び出す
levy(10, 400)
まとめ
以上、簡単でしたがタートルグラフィックスについて紹介しました。LOGOにより生み出されたタートルグラフィックスは、さまざまなプログラミング言語で利用できるように移植されて来ました。タートルを使ってお絵かきするこの機能は、視覚的に面白いため、プログラミングの学習にぴったりの題材です。
メジャーなプログラミング言語のPython、Rubyをはじめ、プログラミング入門にオススメの「なでしこ」や「ドリトル」など、さまざまな言語でこの機能を利用できます。なお、「なでしこ」でタートルグラフィックスを実践する方法は、こちらで解説されていますので参考にしてみてください。
夏休みにちょっとプログラミング学習に挑戦してみようと思っている方は、タートルグラフィックスから取り組んでみると楽しく始められるでしょう。
自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。直近では、「シゴトがはかどる Python自動処理の教科書(マイナビ出版)」「すぐに使える!業務で実践できる! PythonによるAI・機械学習・深層学習アプリのつくり方 TensorFlow2対応(ソシム)」「マンガでざっくり学ぶPython(マイナビ出版)」など。