明日がクリスマスなので、カウントダウンを行う簡単なプログラムを書いてみます。
なお処理系はまたまた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"を選択します。
もしくはProcessBrowser open
を"do it"しても良いです。
優先度40で動いているのがカウントダウンのプロセスです。ちなみに右クリックでサスペンドしたりなど、いろいろな操作ができますが、クリスマスが来るまでの辛抱なので放置しておきましょう。
Wolrldメニューから"Save"でイメージを保存しておけば、次回Pharoの起動時にも、このカウントダウンプロセスはちゃんと動いた状態になっています。動作中のプロセスを簡単にハイバネートできるのもSmalltalkの良いところですね。
さて、12/25日を迎えると、以下のような表示になるはずです。
Merry Christmas!!
なお、表示を消すにはWorldメニューから"System"->"Restore display"、あるいはDisplay restore
と書いて"do it"です。
今回はMorphなどを使わず、Display getCanvas
でキャンバスを取り出し、drawString:at:font:color:
で直接描くというアプローチを取っています。フォントサイズを大きくするなど、いろいろパラメータをいじってみると面白いでしょう。
では心ゆくまでSmalltalkを!!