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

2018/03/06 17:05:01

MixJuice GET URL : kidspod.club/mj/470

MATRIX風スクリーンセーバー

『MATRIX風スクリーンセーバー』は、映画「MATRIX」風のスクリーンセーバーです。

【操作】
キー入力 : スクリーンセーバーを終了する

【更新履歴】
2018/03/06 初版公開
2018/03/07 流れる文字列の密度を増加

【ソースコード解説】
《変数》
X : 画面上の列の X 座標
R ; Random, 乱数
C : Character, 表示するキャラクタ
M : 流れている文字列の先頭の Y 座標
N : 流れている文字列の末尾の Y 座標
P : 一時変数(流れている文字列の一部をランダムに変更するために利用)
I, J, Y : Iterator, ループ変数

《配列》
[0] ~ [63] 流れている文字列の状態
(上位 10 bit:文字列の長さ / 下位 6bit:文字列の先頭の Y 座標)

《PCGパターン》
#E0 ~ #FF : 左右反転したカタカナ(「ア」から「ミ」までの 32 文字)

《コード》
5 : タイトル
10 : 初期化
20 : 左右反転したカタカナのキャラクタ定義
30 : キー入力受付
40 : 文字列が流れていない列に文字列を流し始める処理
50 : 各列のループ開始
60 : 必要な値の算出
70 : 流れている文字の先頭の描画
80 ~ 100 : 流れている文字列の一部をランダムに置換
110 : 流れている文字列の末尾の消去
120 : 各列のループ終了
130 : C の算出

  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

SOURCE CODE

5 'MATRIX screen saver 
10 CLS:CLV
20 FOR I=0 TO 255:M=PEEK(#588+I):FOR J=0 TO 7:N=N<<1+M&1:M=M>>1:NEXT:POKE #700+I,N:NEXT:CLK
30 IF INKEY() CLS:CLP:END
40 IF RND(9)>1 R=RND(31):IF ![R] [R]=(RND(20)+4)<<6 ELSE IF ![R+32]&&([R]&63-[R]>>6)>3 [R+32]=(RND(20)+4)<<6
50 FOR X=0 TO 63:IF ![X] GOTO 120
60 M=[X]&63:N=M-[X]>>6:[X]=([X]+1)*(N<23)
70 IF M<22 LC X&31,M:GSB 130:?CHR$(C);
80 P=N:IF P<0 P=0:IF P>M-1 GOTO 110
90 FOR Y=P TO M-1:IF RND(9)>7 LC X&31,Y:GSB 130:?CHR$(C);
100 NEXT
110 IF N>=0 LC X&31,N:?CHR$(0);
120 NEXT:GOTO 30
130 C=RND(190)+33:C=C+33*(C>126):RTN

COMMENT

Kidspod運営チーム
Kidspod運営チーム2018/03/16 11:57:09

往年の名作映画! このスクリーンセイバーの表現はとても印象深かったです。カタカナを使っても、雰囲気出てますね。