『宇宙飛行』は、宇宙空間を移動しているような風景を映すスクリーンセーバーです。
【操作】
キー入力 : スクリーンセーバーを終了する
【更新履歴】
2018/03/26 初版公開
【ソースコード解説】
《変数》
P : 星が X 軸方向へ移動する方向( -1 : 左、 1 : 右 )
Q : 星が Y 軸方向へ移動する方向( -1 : 上、 1 : 下 )
X : 星の進行方向の X 成分
Y : 星の進行方向の Y 成分
Z : 星の Y 軸方向への進行度合
W : 星の X 軸方向への進行度合
C : 星を表すキャラクタ
M, N : C を算出するための一時変数
A, B : C を表示する位置
I : Iterator, ループ変数
《配列》
[0] ~ [11] : 星の描画座標
16bit を 6 bit / 5 bit / 5 bit の 3 つに区切り、変数 Z, X, Y を保持しています。
《コード》
5 : タイトル
10 : 初期化
30 : 星の配置
40 ~ 80 : 各変数の算出
90 : 星が描画されていれば消去
100 : 通り過ぎた星の情報を保持している配列の要素の値を初期化
110 : Z を増加させる
120 ~ 140 : M, N の算出
150 ~ 180 : C の算出
190 : 星の描画
210 : キー入力受付
220 : W の算出
230 ~ 260 : C を描画
5 'Space Flight 10 CLS:CLV 20 FOR I=0 TO 11 30 IF [I]=0 IF RND(9)>5 [I]=1<<10+(RND(31)+1)<<5+RND(23) ELSE GOTO 200 40 P=1-2*(I&2=2) 50 Q=1-2*(I&1=1) 60 X=[I]>>5&31 70 Y=[I]&31 80 Z=[I]>>10 90 IF Z!=1 C=0:GSB 220:GSB 230 100 IF Z>23 [I]=0:GOTO 200 110 Z=2*Z:[I]=[I]&1023+Z<<10 120 GSB 220 130 M=W&1:IF P=-1 M=!M 140 N=Z&1:IF Q=-1 N=!N 150 IF M=0&&N=0 C=#81:GOTO 190 160 IF M=0&&N=1 C=#84:GOTO 190 170 IF M=1&&N=0 C=#82:GOTO 190 180 C=#88 190 GSB 230 200 NEXT 210 IF INKEY() CLS:END ELSE GOTO 20 220 W=Z*Y/X:RTN 230 A=16+W*P/2:IF A<0 A=0 ELSE IF A>31 A=31 240 B=12+Z*Q/2:IF B<0 B=0 ELSE IF B>23 IF A=31 B=22 ELSE B=23 250 LC A,B:?CHR$(C); 260 RTN