Smalltalkで迎える魅惑のクリスマス

  • 2
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

明日がクリスマスなので、カウントダウンを行う簡単なプログラムを書いてみます。
なお処理系はまたまたPharo Smalltalkです。

[ 
[DateAndTime current < '2015/12/25' asDateAndTime] whileTrue: [(Delay forSeconds: 1) wait].
font := LogicalFont familyName: 'Source Code Pro' pointSize: 18.
1 to: Display width do: [:x |
    Display getCanvas drawString: 'Merry Christmas!' at: x @ (Display height * x cos) font: font color: Color random.
].
] fork.

シンプルなプログラムなので解説はほぼ不要と思いますが、要は2015年12月25日になるまで、一秒待ちを続け、いざ時が来たら画面に派手な表示を行う処理を書いただけです。バックグラウンドで動くように、全体をforkしています。

Playground(ワークスペース)で"do it"(Alt or Cmd + d)した後、プロセスブラウザで、プロセスが動いていることを確認してみましょう。Worldメニューから"Tools"->"Process Browser"を選択します。

open-process-browser.png

もしくはProcessBrowser openを"do it"しても良いです。

優先度40で動いているのがカウントダウンのプロセスです。ちなみに右クリックでサスペンドしたりなど、いろいろな操作ができますが、クリスマスが来るまでの辛抱なので放置しておきましょう。

process-browser.png

Wolrldメニューから"Save"でイメージを保存しておけば、次回Pharoの起動時にも、このカウントダウンプロセスはちゃんと動いた状態になっています。動作中のプロセスを簡単にハイバネートできるのもSmalltalkの良いところですね。

さて、12/25日を迎えると、以下のような表示になるはずです。

Merry Christmas!!

merry-christmas-pharo.png

なお、表示を消すにはWorldメニューから"System"->"Restore display"、あるいはDisplay restoreと書いて"do it"です。

今回はMorphなどを使わず、Display getCanvasでキャンバスを取り出し、drawString:at:font:color:で直接描くというアプローチを取っています。フォントサイズを大きくするなど、いろいろパラメータをいじってみると面白いでしょう。

では心ゆくまでSmalltalkを!!

この投稿は Smalltalk Advent Calendar 201524日目の記事です。