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

よさそうですね。

スラスターの火炎を描く(再び謎解き&少しアレンジ編)へ続く)