ひまわりでラングトンのアリ

Cでどう書くのってツイートを見かけたのでひまわりで書きました。

黒いマスにアリがいた場合、90°右に方向転換し、そのマスの色を反転させ、1マス前進する。
白いマスにアリがいた場合、90°左に方向転換し、そのマスの色を反転させ、1マス前進する。

ラングトンのアリ - Wikipedia
母艦の、クリックした時は、はじめ。
待機する。

*はじめ
タイマー解除。
アリXは、マウスX。
アリYは、マウスY。
アリ向きは、上。
*うごく
母艦の、(アリX,アリY)を、座標色取得。
もし、それが、$000000ならば、右に方向転換して白くする。
違えば、左に方向転換して黒くする。
母艦の、(アリX,アリY)へ、点描画。 
進む。
0.01秒後に、うごくへ飛ぶ、タイマー設定。
待機する。

*右に方向転換して白くする
アリ向きで、条件分岐。
上の時、アリ向きは、右。
右の時、アリ向きは、下。
下の時、アリ向きは、左。
左の時、アリ向きは、上。
ペン色は、白色。
母艦の、(アリX,アリY)へ、点描画。 
戻る。

*左に方向転換して黒くする
アリ向きで、条件分岐。
上の時、アリ向きは、左。
右の時、アリ向きは、上。
下の時、アリ向きは、右。
左の時、アリ向きは、下。
ペン色は、黒色。
母艦の、(アリX,アリY)へ、点描画。 
戻る。

*進む
アリ向きで、条件分岐。
上の時、アリYは、アリY-1。
右の時、アリXは、アリX+1。
下の時、アリYは、アリY+1。
左の時、アリXは、アリX-1。
戻る。

・・・まどろっこしい。普段こんな物書きません。

母艦の、クリックした時=init
待機

*init
タイマー解除
x=マウスX
y=マウスY
angle=0

*move
母艦の、(x,y)を、座標色取得
もし、それ=$000000ならば、(
  angle=(angle+1)%4
  ペン色=白色
)
違えば、(
  angle=(angle+3)%4
  ペン色=黒色
)
母艦の、(x,y)へ、点描画
もし、angle%2=0ならば、y=y+angle-1
違えば、x=x-angle+2
タイマー設定(0.01, move)
待機

考えてみればこの括弧も匿名関数の一種か。引数取れないけど。

よくある質問

母艦ってなに
メインフォーム。
それってなに
それだよ、それ。Perlの$_が近いみたい。
座標色取得と点描画はなんでタイマー設定みたいに書けないの
座標を(x,y)で書くようにしたせいかパースにこけるのよ。
\$\d+ってなに
整数リテラルの16進表記。
白色・黒色って定数でしょ?色調べる時に使えばいいのに
白色・黒色が#nnnnnnという文字列だと知るまではそう思ってました。
^[**].+ってなに
ラベル。関数っぽい機能あるけどラベルなのでreturn必須。
じゃあ待機ってなに
ラベルということを思い出させてくれるあんちくしょう。
文字列リテラルはかぎ括弧で囲むと聞いたんだけど、上下左右なんなの
未定義の識別子は文字列リテラルになるとでも思ってください。
全部グローバル変数とか生きていけない
変数名の配列をローカル変数って命令に渡せば幸せになるんじゃないかな。