星空を描いてみるのだ

なんかこれはBASICでもやった記憶があるぞ。乱数を発生させて、適当に点をばら撒くってやつだな。けっこう神秘的な雰囲気になるんだよね、うん。早速やってみよう。


	CLS 4
	WIDTH 600,400,100,50
	RANDOMIZE

	REPEAT 1000
	RND X,600 : RND Y,400
	RND R,255 : RND G,255 : RND B,255
	COLOR R,G,B
	PSET X,Y
	LOOP

	STOP

なんかめちゃめちゃいっぱい新しい命令でてきたね^^;

CLS(0〜4の数値)
画面をクリアする。0だと白、4だと黒、その間はグレー。

「星空」だから背景が黒じゃなきゃ不自然。っつーわけで、最初にウィンドウを黒でクリアすることにした。BOXFで塗りつぶしてもいいんだろうけどね・・・。

WIDTH(ウィンドウの横幅),(縦幅),
(ウィンドウを表示させるx軸の位置),(y軸の位置)
ウィンドウの大きさと位置を指定する。

乱数を発生する範囲を決めるため、ウィンドウの大きさも指定。そうしないと、星の無い空間とかできちゃうもんね。ウィンドウ位置は適当。特に意図無し。

RANDOMIZE(適当な数値)
乱数表を指定。数値が指定されて無い場合は、パソコンの内部時計を参照して適当な乱数表を選ぶ。

毎回同じパターンで星空を表示させたいなら、ここで数値を指定しておけばいいみたい。

RND(変数),(数値)
0から指定した数値までの間で発生させた乱数を、指定した変数に代入する。

今回のポイント。XとYに代入した値は点を打つ座標に、RとGとBに代入した値は点の色を決めるのに使ってる。「WIDTH」でウィンドウのサイズを決めておいたから、Xの上限は600・Yの上限は400。また、色の明るさは255が最大だから、R,G,Bの上限も255。

REPEAT(数値)
「REPEAT」〜「LOOP」の間を指定回数分繰り返す

LOOP-
「REPEAT」〜「LOOP」の間を、REPEATで指定した回数分繰り返す。

この2つは必ずペアで用いるみたいね。ちなみにこのプログラムだと、赤い部分が1000回繰り返される。これによって星が1000個表示されるっつーわけだな。

PSET(x軸),(y軸)
指定した場所に1ドットの点を打つ。

まぁこれはそのまんまだね。点を打つ前に、色を指定。色もランダムに発生させてるからカラーな星空になってる。

今回は一発でできたんで「俺って天才!」とか思ってたんだけど、よ〜く考えたらこれ(0,0,0)に近い色はほとんど見えないんだよな。黒は表示させず、色調も8段階くらいにしたいところだよね・・・。よし、やってみよう。


	CLS 4
	WIDTH 600,400,100,50
	RANDOMIZE

	REPEAT 1000
	RND X,600 : RND Y,400
	RND R,7 : RR=(R+1)*32-1
	RND G,7 : GG=(G+1)*32-1
	RND B,7 : BB=(B+1)*32-1
	COLOR RR,GG,BB
	PSET X,Y
	LOOP

	STOP

大きく変えたのは赤い部分。まず、0〜7の乱数を発生させる。これで「8段階」っつー条件はクリアできたわけだな。で、次にその乱数に1を加え(これによって1〜8の乱数が得られる)、それを32倍(最大256までの数字が得られるわけだな)し、そこから1引く(色の明るさは最大が255なんで)と。これで、31・63・95・128・159・191・223・255の8段階の色調で表示することができるようになったというわけだ。う〜ん、完璧。でもなんか遅くなったような気が・・・^^;

よし、次はいよいよバッファーっつーやつを使ってみよう。トマホーク・ハリケーンを食らわないように注意しなきゃ。・・・それってバッファローマンじゃん(T-T)/

星が今回は1000個だからいいけど、100000個とかいったらけっこう時間かかるからね。仮想画面に描いてから一気に表示させてやろうというわけ。速くなるそうな。

前のページへ戻る 奮闘記のメニューへ戻る 次のページへ進む