Smalltalk-72で遊ぶOOPの原点:スラスターの火炎を描く(準備編)
アラン・ケイの“メッセージングによるプログラミング”という着想に基づき(非同期処理などいろいろ足りていないながらも──)比較的忠実に実装された1970年代の非常に古いSmalltalk-72に実際に触れてみるシリーズ 第2弾です(なお最新のSmalltalkについては Pharo などでお楽しみください!)。
今回は謎言語「Smalltalk-71」で書かれたスペースウォー・ゲームを Smalltalk-72に移植して動かすことを目指します。前回(2019年)を含む他の記事はこちらから→Smalltalk-72で遊ぶOOPの原点 | Advent Calendar 2023 - Qiita
プロシージャ triangle
の定義を補う
次に、スラスター火炎を描く flame の Smalltalk-71 のコードを見てみましょう。
印刷のかすれ以外にも、いろいろ謎な部分がありますが、まずはキーになる triangle
の定義が見当たらないので、次のように定義して補います。
to triangle :size pendown, right 90, forward 0.5 * :size left 120, forward :size left 120, forward :size left 120, forward 0.5 * :size, left 90 end to
処理の内容はこんな感じです。
プロシージャ triangle
は :size
を引数に受け取り(to triangle :size ...
)、まず念のため pendown
してから、進行方向右横向きになり(right 90
)半:size
分 進みます(forward 0.5 * :size
)。
そこから 60
度の角を作るために 120
度、つまり180-60
度こんどは左向きに転回し(left 120
):size
分進む、を2回繰り返します。
最後に同じように角を作るために転回して(left 120
)、元の位置に戻るために 半:size
分進み、最後に進行方向左向きに転回し、元の向きに戻ります(left 90
)。
これを Smalltalk-72 にトランスパイルし、実行して確かめましょう。
to triangle size ( @ pendn turn 90 go 0.5 * :size turn `120 go size turn `120 go size turn `120 go 0.5 * size turn `90 ) disp clear @ home penup goto 200 100 pendn. triangle 40
よさそうですね。