- Turtle Graphics -
タートル・グラフィックスはLOGO言語に
備えられた特殊な描画機能です。
人工知能や教育用途で使用されていました。
画面上の亀に見立てられたカーソルに前進や回転の
指示を与えて、その軌道が模様を描いていきます。
Basicのプログラムで実現された
タートル・グラフィックスではマルチタートルで
複数の亀を同時に動かすことができます。
使用例
forward 80
right 30
80 前進して 右に30度回転します。
コマンドとプログラムリストの両方から使用することができます。
File: "turtle.bas"
load "http://androidbasic.ninja-web.net/sp/turtle.bas"
2013/07/04 以降のバージョンが必要です。
当アプリ(MC-Basic)専用です。(転載不可)
コマンド一覧
2文字の省略形[ ]表記 も使えます。
[fd] forward n 前にn進みます。
[bk] back n 後ろにn進みます。
[rt] right n 右にn度向きを変えます。
[lt] left n 左にn度向きを変えます。
[wt] wait n nの間停止します。
[pd] pendown ペンを下げます。軌道の跡が描画されます。
[pu] penup ペンを上げます。軌道の跡は描画されません。
[rp] repeat n [
] 括弧の中をn回繰り返して実行します。多重構造が可能です。
[cs]
cls 画像を消去します。
[tc] color
n カラーnを選択します。Basicの16色カラーcol(n)と同じ配色です。
[pn] pen
n 複数のカーソルをn番に切り替えます。(1~16) ループ中は切り替えできません。
[ps] pos x y 座標(x,y)に移動します。
[mv] move x y 現在の位置からx,yだけ移動します。
[ag] angle n 角度n度の向きに設定します。
[sp] speed
n 速度nに設定します。(1~10)。大きいほど速くなります。(デフォルトは10)。
変数 @0から@255まで使用できます。
@v
n 変数v番に式nの値を代入します。
ラベル&ジャンプ
*label *の後にラベル名をアルファベットで示します。
[go] goto label 指定したラベルの位置に飛びます。
分岐
if
n 式nが0以外なら直後の命令を実行します。0ならスキップします。
式の値について
パラメータはBasicと同じ計算式、関数を使うことができます。
剰余(余り)の mod は左右に空白が必要なので'%'で代用します。
式中に変数@vも混同して使うことができます。
他にTG専用の3つの関数が使えます。
posx(n) ペンnのカーソルの座標X。
posy(n) ペンnのカーソルの座標Y。
angle(n) ペンnの角度。
ダイレクト専用コマンド
[ld] load
file ファイルをロードして実行します。ファイル名は""で囲う必要はありません。
[md] mode n 描画モード切り替え。
0 でカーソルが実際に動くアニメーション付きで描画します。
1
でアニメーション無しでストレートに描画します。
座標は画面中央が原点(0,0)で右と上方向がプラス、左と下方向がマイナスとなっています。
角度は上向きが0度で時計回りに大きくなります。(0~359度)
コマンドはテキストファイルに記述してloadコマンドから実行させることもできます。
パラメータとの間、コマンドとの間は空白文字で区切ります。
例 トップにある星と多角形のプログラム。
load tg0.lgo
で実行。
ファイル"tg0.lgo"の内容。
pn 1 tc 10 mv 0
180 ag 162 rp 5[fd 352 rt 144]
pn 2 tc 9 mv -193 80
ag 45 rp 8[fd 160 rt 45]
Basic for Androidのエディタで編集して保存することもできます。
行番号が付いている場合は取り除かれてロードされます。
10 pn 1 tc 10 mv 0 180 ag 162 rp 5[fd 352 rt 144]
20 pn 2 tc 9 mv -193 80 ag 45 rp 8[fd 160 rt 45]
サンプル
File [ tg04.bas ]
turtle.bas をロード・実行して load
tg04.bas を入力して描画。
rp 4096[@2 @2+1 @1 @1+@2 @3
@1/1000 @1 (@3-int(@3))*1000 @4 @4+1 tc @4 fd int(@3) rt 1]
File [ tg05.bas ]
turtle.bas をロード・実行して load
tg05.bas を入力して描画。
tc 5 @2 1 mv -50 -50 rp 30[@2 @2+1
tc @2 rp 3[fd 100+@1*6 rt 91]@1 @1+1]
File [ tg02.bas ]
30d$="":mode=1
40 'if d$="" then input d$:f=tgcom(d$):goto 40
50 '
100 r=0.6666666666666666
110 ang=20
120 ln2=2
130 f=tgcom("move 0 -160 tc 12")
140 '
150 f=branch(100)
160 '
170 func branch(ln)
180 if ln<=ln2 then endfunc
190 f=tgcom("forward "+str$(ln))
200 f=tgcom("left "+str$(ang))
210 f=branch(r*ln)
220
f=tgcom("right "+str$(2*ang))
230
f=branch(r*ln)
240 f=tgcom("left "+str$(ang))
250 f=tgcom("penup back "+str$(ln)+" pendown")
260 endfunc
File [ tg03.bas ]
30d$="":mode=1
40 'if d$="" then input d$:f=tgcom(d$):goto 40
50 '
100 f=tgcom("angle 90 move
-180 -80 tc 14")
110 f=stitch(360)
120 '
130 func stitch(ln)
140 if ln>4 then
150
f=stitch(ln/3)
160 f=tgcom("left 90")
170 f=stitch(ln/3)
180
f=tgcom("right 90")
190 f=stitch(ln/3)
200 f=tgcom("right 90")
210 f=stitch(ln/3)
220
f=tgcom("left 90")
230 f=stitch(ln/3)
240 else
250 f=tgcom("forward
"+str$(ln))
260 endif
270
endfunc
File [ tg06.bas ]
turtle.bas
をロード・実行して load tg06.bas を入力して描画。
rp 36 [rp 34 [fd 12 rt 10] rt 90
@1 @1+1 @2 @1%14+1 tc @2]
[ 戻る ]