Enjoy programming more!
Kidspod is a post site which supports young programmers.
First step to join us.
Register as a member
For members

2018/06/08 17:00:24

MixJuice GET URL : kidspod.club/mj/490

Flying Slash

『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 ですが、多過ぎすると描画が遅くなります)

  • 1
  • 2
  • 1
  • 2

SOURCE CODE

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

COMMENT

Kidspod運営チーム
Kidspod運営チーム2018/06/15 17:18:11

交叉したときは✕になるところが、芸が細かくてステキです。数が多くなると模様っぽくて、数が少ないと、ちょっと生き物っぽくてかわいく思えました。