TurtleEditから「亀場」を使うための準備
教育情報基盤センターの演習室においてテキストエディタTurtleEditを用いてプログラミング学習を行う際に, 発展教材「亀場でプログラミング」を使うための準備について,以下に説明する。
ステップ1. TurtleEditを開いて設定を変更する
Linuxデスクトップの左上の「アプリケーション」メニューをクリックし,「アクセサリー」や「プログラミング」の中からTurtleEditを選び起動する。
TurtleEditのウィンドウが表示されたら,「実行」メニューの中から「設定」を選ぶ。 すると,以下のようなウィンドウが現れるはずだ(細かい点は若干異なるかもしれない)。
ウィンドウの中程にある以下の設定項目を確認する:
- 「亀場のパス」の欄が
/opt/cite/bin/tfield-linux
になっていることを確認 - 「亀場を自動起動」にチェックを入れる(初期状態ではチェックは入っていない)
設定が終わったら
を押して完了。「亀場」を使わないときは,「亀場の自動起動」のチェックを外しておく。
ステップ2. 動作を確認する
以下のサンプルプログラムをTurtleEditのウィンドウにコピーし、保存する(ファイル名は rect.c
とする)。
rect.c
#include <stdio.h> #include <math.h> #include "turtle.h" /* 必ず必要なおまじない */ main() { CON("localhost") ; /* 亀場との通信を開始する */ CLR() ; /* 画面とゾンビ亀を一端消去する */ RST() ; /* 亀の位置を初期設定する(亀は原点に居る) */ PD() ; /* ペンを下げる */ FD(100.0) ; /* 前進 100 */ LT(90.0) ; /* 左回転 90 */ FD(100.0) ; /* 前進 100 */ LT(90.0) ; /* 左回転 90 */ FD(100.0) ; /* 前進 100 */ LT(90.0) ; /* 左回転 90 */ FD(100.0) ; /* 前進 100 */ }
この箇所重要!
次に、turtle.hをダウンロードして、rect.cと同じ場所に保存する。
TurtleEditの
ボタンを押す。もしエラーが表示されたら、コピーし忘れている箇所が無いか、 turtle.hがrect.cと同じ場所に保存されているかを確認する(その際、 ボタンを使うのが便利)。コンパイルが成功したら、
ボタンを押すと、四角いウィンドウ(「亀場」)が現れ、そこに四角形が描かれるはずだ。ステップ3. 亀場の扱いに慣れる
亀場の四角いウィンドウは、そのまま表示しておいても構わないが、手動で終了させたい場合は、 「亀」が表示されているウィンドウの上をマウスで右クリックして、メニューから Exit を選ぶ。
その他、亀場を操作するためのいくつかの機能も同じメニューで操作できる。
詳しい使い方は亀場でプログラミングのページを参照のこと。 特に、亀場に「ゴミ」が残っているときは、メニューから"Clear Field"(描画内容をクリア)、 "Erase Zombie"(居残っている亀を消去)を選んで、手動で消去しなければならない場合があるので注意。
亀場の四角いウィンドウが画面から「消えて」しまった場合、ウィンドウを「最小化」して見えない状態になっていないか確認すること。 デスクトップの下側に起動中のアプリケーションを表す「箱」が表示されているので、その中に亀場のそれが無いか、クリックして、確かめると良い。
1台のパソコンで起動可能な亀場は1つだけである。2つ目を起動すると、画面に赤い字で英文の警告が表示されるので、そのウィンドウは閉じておくこと。
この課題は、Cプログラミングの「反復処理」あたりまでを勉強した後に挑戦すること。
亀場で練習:花模様を描く
以下は、反復処理を使って、下図(左)のような6角形を亀場に描くプログラムの例である:
あらかじめturtle.hをダウンロードして、このプログラムと同じディレクトリ内に保存しておくこと。
#include <stdio.h> #include <math.h> #include "turtle.h" main() { int n ; CON("localhost") ; /* 亀場と接続 */ CLR() ; /* 画面をクリア */ RST() ; /* 亀を中央・右向きにリセット */ PD() ; /* ペンを下ろす */ for (n=0; n<6; n=n+1) { FD(100) ; /* 100前進 */ LT(60) ; /* 左に60度回転 */ } PU() ; /* ペンを上げる */ }
描画後の亀場の様子
左:「ひな形」プログラムの実行結果。原点で右側を向いていた亀は、6角形を描いた後、再び原点に戻り、右側を向いた状態にある。
右:目標とする図形。
二重のループ構造を使ってこのプログラムを改修し、6角形を沢山並べることで、上図(右)のような花柄模様を描きなさい。
ヒント
ゴールとなる図形は、6角形を24回繰り返し描いて作られている。
6角形を描いた後で、亀の方向を変えてから、次の6角形を描く必要があるはず。方向を変えるにはLT(角度);
またはRT(角度);
を使う。それぞれ、左回転(Left Turn)、右回転(Right Turn)、を表す。
PD();
の直前にCOL(赤,緑,青);
を指定すると、線の色を変えることができる。
ここで、"赤,緑,青" は、三原色の強度をそれぞれ0から1までの数値で指定。
例えば、
COL(1,1,0);
は黄色を指定したことになる。色の指定をしない場合、あらかじめ赤(COL(1,0,0);
)が設定されている。
亀場で練習:「植物」の構造のシミュレーション
あらかじめturtle.hをダウンロードして、このプログラムと同じディレクトリ内に保存しておくこと。
右のサンプルプログラムは、
1. カメを左に20度回転し、ペンを下げてstep進みペンを上げる
2. その位置・方向で、stepを現在の値の0.6倍にして、同じ動作を行う
3. 後ろ向きにstep戻って、右に20度回転する
(カメの角度は元に戻る)
4. 次いで、カメを右に20度回転し、ペンを下げてstep進みペンを上げる
5. その位置・方向で、stepを現在の値の0.7倍にして、同じ動作を行う
6. 後ろ向きにstep戻って、左に20度回転する
(カメの角度は元に戻る)
を、stepが10.0以下になるまで、ひたすら繰り返す構造になっている。
亀場の解説ページには、いくつかのサンプルプログラムが掲載されている。 その中の「ツリーの描画」のプログラムを以下に示す:
#include "turtle.h" void branch(float step) { if (step<10.0) return ; else { LT(20) ; PD() ; FD(step) ; PU() ; branch(step*0.6) ; BK(step) ; RT(20) ; RT(10) ; PD() ; FD(step) ; PU() ; branch(step*0.7) ; BK(step) ; LT(10) ; } } int main() { CON("localhost") ; CLR() ; RST() ; COL(0.1,0.7,0.2) ; JUMP(0,-220) ; NORTH() ; branch(150) ; }
このサンプルプログラムをTurtleEditにコピー&ペーストし、ファイル名 tree.c で保存した上でコンパイル・実行してみよ。動作が確認できたら、以下のシミュレーションを行うこと。
- コードの中から
branch(step*0.6)
という箇所を見つけ、0.6を(0から0.6の間くらいの)別の数値に変えてプログラムを実行し、図形の変化を観察せよ。branch(step*0.7)
の箇所についても同様。 - 上記の箇所を元に戻した上で、コードの中から
LT(20) ; ... RT(20) ;
およびRT(10) ; ... LT(10) ;
の箇所を見つけ、 20と10の数値をペアを別の数に変えて、変化の様子を観察せよ。LT(7) ; ... RT(7) ; ... RT(30) ; ... LT(30) ;
のように、「ペア」同士は同じ数値になるようにせよ。 - 左図も参考にして*、それぞれの数値の役割を考えながら生成されるパターンを予想し、シミュレーションで検証してみよ。それを踏まえて、下図(左)のような「樅の木」**を描けるように改修せよ。
* プログラム中に登場する LT( ), RT( ), PD( ), PU(), FD(), BK()などの命令(C言語では「関数」と呼ぶ)の動作についてはこちらのページに説明がある。
** 下図(右)に生成のために必要な情報を示した。元々のサンプルプログラムは、2本の枝の分岐で構成されていたが、「樅の木」は3本の枝の分岐で構成されているので、もう1本、枝を追加しなくてはならない点に注意。