『Flying Slash』は、斜線が画面端で反射しながら移動するスクリーンセーバーです。
【操作】
キー入力 : スクリーンセーバーを終了する
【更新履歴】
2018/6/8 初版公開
2018/6/10 タイトルを「反射」から「Flying Slash」に変更(Thanks to 斎藤様@IchigoJam-FAN)、斜線移動時のちらつきを低減
【ソースコード解説】
《変数》
N : 斜線の個数
W : Wait, ウェイト値
X : 斜線の移動前の X 座標
Y : 斜線の移動前の Y 座標
P : 斜線の移動後の X 座標
W : 斜線の移動後の Y 座標
U : 斜線の移動方向の X 成分(1 : 右、-1 : 左)
V : 斜線の移動方向の Y 成分(1 : 上、-1 : 下)
C : Character, 斜線を表すキャラクタ
S : SCR, 画面の座標から取得したキャラクタ
I : Iterator, ループ変数
《配列》
斜線の描画情報
16bit のうち 14 bit を 1 bit / 1bit / 6 bit / 6 bit の 4 つに区切り、
変数 U, V, X, Y を保持しています。
《コード》
5 : タイトル
10 : 初期化
20 〜 30 : 変数の値の設定
40 ~ 60 : 配列の値の設定
80 〜 110 : 配列の値から変数を抽出
120 : 斜線の X 軸方向の反射処理
130 : 斜線の Y 軸方向の反射処理
140 : 移動後の X 座標の算出
150 : 移動後の Y 座標の算出
160 : 斜線のキャラクタの算出
170 : 斜線が他の斜線と交差する場合、斜線のキャラクタを "x" に変更
180 : 移動前の位置の斜線を消去
190 : 移動後の位置の斜線の描画
200 : 移動後の値を配列に格納
220 : キー入力受付
230 : ウェイト
【備考】
20 行目の N の値を変更することで、画面上で移動する斜線の個数を変更できます。
(N の取れる範囲は 1 〜 101 ですが、多過ぎすると描画が遅くなります)
5 'Flying Slash 10 CLS:CLV 20 N=5 30 W=3/(N/10+1) 40 FOR I=1 TO N 50 [I]=RND(4)<<12+(RND(30)+1)<<6+RND(22)+1 60 NEXT 70 FOR I=1 TO N 80 U=1-2*([I]>>13) 90 V=1-2*([I]>>12&1) 100 X=[I]>>6&31 110 Y=[I]&31 120 IF ((X=31)&(U=1))|((X=0)&(U=-1)) U=-U 130 IF ((Y=22)&(V=1))|((Y=0)&(V=-1)) V=-V 140 P=X+U 150 Q=Y+V 160 IF U*V>0 C=#5C:ELSE C=#2F 170 S=SCR(P,Q):IF S&(S!=C) C=#78 180 LC X,Y:?CHR$(0); 190 LC P,Q:?CHR$(C); 200 [I]=(U<0)<<13+(V<0)<<12+P<<6+Q 210 NEXT 220 IF INKEY() CLS:END 230 IF W WAIT W 240 GOTO 70
交叉したときは✕になるところが、芸が細かくてステキです。数が多くなると模様っぽくて、数が少ないと、ちょっと生き物っぽくてかわいく思えました。