今回は、Orange pico(Orangino)の標準的なグラフィック描画機能を使って、スクリーンセーバー的なものを作ってみます。
Orange picoにはテキスト画面とグラフィック画面があります。これらは合成されて表示されます。テキスト画面とグラフィック画面は独立していますので、テキスト画面に文字を表示しても、グラフィック画面には影響がありません。逆も同様で、グラフィック画面に何か描画しても、テキスト画面には影響がありません。
Orange picoのグラフィック画面のサイズは320×200ドット1色です。TFT液晶モジュールを装着すると、グラフィック画面のサイズは320×240ドット65536色表示が可能です。ここでは、通常の320×200ドット1色で説明していきます。
Orange picoのグラフィック描画命令には、以下のものがあります。
点を描画 pset X座標 Y座標 色
線を描画 line X1座標 Y1座標 X2座標 Y2座標 色
円を描画 circle 中心X座標 中心Y座標 半径 色
楕円を描画 ellipse 中心X座標 中心Y座標 半径 横の係数 縦の係数 色
色は単色なので0が黒、1が白になります。楕円を描画するellipseの係数は1以上の整数値になります。値が大きくなると横の係数の場合は、縦長の楕円になります。縦の係数の場合は、横長の楕円になります。なお、Orange BASIC ver 1.05では、係数に0を指定するとハングアップしてしまうので注意して下さい。
それでは、それぞれの命令を使って、スクリーンセーバーを作ってみましょう。まず、画面を消去します。画面の消去はclsを使います。以下のように入力すると、テキスト画面とグラフィック画面の両方が消去されます。
cls
テキスト画面のみ消去する場合は以下のように1を指定します。
cls 1
グラフィック画面のみ消去する場合は2を指定します。
cls 2
グラフィック画面に描画する場合は、プログラムを作らなくてもダイレクトモードで命令を入力しても構いません。以下のように入力すると、座標(100,50)に点が描画されます。
pset 100,50,1
点を表示する位置と色をランダムに変えていけば、スクリーンセーバーっぽくなります。ランダムな値、つまり乱数を求めるにはrnd()を使います。rnd()のパラメーターに、求めたい乱数の最大値+1を指定します。0〜9までの乱数を求めるのであれば、rnd(10)と指定します。
スクリーンセーバーは、escキーが押されるまで無限に点を描画します。無限に繰り返す方法はいくつかありますが、一番手軽なのはgotoで指定した行番号に処理を移してしまうことです。goto 20とすれば行番号20に処理が移ります。
ランダムに点を打つ、スクリーンセーバーのプログラムは、以下のようになります。
10 cls
20 x=rnd(320)
30 y=rnd(240)
40 pset x,y,rnd(2)
50 goto 20
点じゃなくて線の場合は、以下のようになります。点を描画するか、線を描画するかだけの違いです。
10 cls
20 x1=rnd(320)
30 y1=rnd(240)
40 x2=rnd(320)
50 y2=rnd(240)
60 line x1,y1,x2,y2,rnd(2)
70 goto 20
円の場合は、以下のようになります。
10 cls
20 x=rnd(320)
30 y=rnd(240)
40 r=rnd(320)
50 circle x,y,r,rnd(2)
60 goto 20
楕円の場合は、以下のようになります。
10 cls
20 x=rnd(320)
30 y=rnd(240)
40 r=rnd(320)
50 ax=rnd(10)+1
60 ay=rnd(10)+1
70 ellipse x,y,r,ax,ay,rnd(2)
80 goto 20
ここまで実際に動かしてみると、速すぎて何が何だかよくわかりません。そこで少しウェイトを入れる事にしましょう。ウェイトはpauseを使います。pauseの後に、待ち時間をミリ秒で指定します。pause 100なら100msecのウェイトになります。
10 cls
20 x=rnd(320)
30 y=rnd(240)
40 r=rnd(320)
50 ax=rnd(10)+1
60 ay=rnd(10)+1
70 ellipse x,y,r,ax,ay,rnd(2)
80 pause 100
90 goto 20
【古籏一浩】openspc@alpha.ocn.ne.jp
http://www.openspc2.org/
何年もかかって書いていた本の原稿が、ようやくできあがりました。長すぎて3冊に分割されてしまいましたが、何とか出版できそうです。すでに出版されている2冊と合わせると1700ページ超(出版できずダウンロードのみとなってるのと合わせると2400ページくらい)。
これでも書き足りないのですが、出版システムのページ数の制限でこれ以上書けません。さすがに無限に書き続けることはできないので、どこかで妥協しないと。
・創って学ぼうプログラミング
https://news.mynavi.jp/series/makeprogram
・8K/4K/ハイビジョン映像素材集
http://www.openspc2.org/HDTV/
・クリエイター手抜きプロジェクト
http://www.openspc2.org/projectX/