『Bullet Time』は、映画のワンシーンのように飛んでくる弾丸を避けるスクリーンセーバーです。
【操作】
キー入力 : スクリーンセーバーを終了する
【更新履歴】
2018/03/15 初版公開
【ソースコード解説】
《変数》
S : String, Style, 主人公の姿勢( 0 ~ 2 )
T : 主人公が取るべき姿勢( 0 ~ 2 )
N, Z : 一時変数(弾道の軌跡の表示に利用)
I, J : Iterator, ループ変数
《配列》
[0] : 高い弾道の弾丸の X 座標
[1] : 低い弾道の弾丸の X 座標
《PCGパターン》
#E0 ~ #E5 : 主人公の姿勢 0 のキャラクタ(横 2 文字 x 縦 3 文字の合計 6 文字)
#E6 ~ #EB : 主人公の姿勢 1 のキャラクタ(横 3 文字 x 縦 2 文字の合計 6 文字)
#EC ~ #EE : 主人公の姿勢 2 のキャラクタ(横 3 文字 x 縦 1 文字の合計 3 文字)
#7B0 〜 : 主人公の姿勢 0 の文字列
#7C2 〜 : 主人公の姿勢 1 の文字列
#7D4 〜 : 主人公の姿勢 2 の文字列
《コード》
5 : タイトル
10 : 初期化
20 : 使用する PCG パターンのアドレス値のゼロ埋め
30 : 主人公の姿勢 0 のキャラクタパターン定義
40 : 主人公の姿勢 1 のキャラクタパターン定義
50 : 主人公の姿勢 2 のキャラクタパターン定義
60 ~ 70 : 主人公の姿勢の文字列定義
80 : スクリーンセーバー開始時の初期設定
90 : キー入力受付
100 : T の算出
110 : 主人公の描画
130 : 通り過ぎた弾丸の配列の初期化
140 : 弾丸の配置
150 : 弾丸を進める
160 : 弾丸の描画
170 ~ 210 : 弾道の軌跡の描画
5 'Bullet Time 10 CLS:CLV 20 FORI=0TO104:POKE#700+I,0:NEXT 30 POKE#701,1,2,2,2,3,7,7,128,0,96,240,240,224,128,192,15,15,30,60,60,120,248,240,248,135,1,0,0,0,0,0,248,248,220,92,108,110,38,238 40 POKE#737,1,0,1,6,13,27,63,125,254,0,192,0,128,192,192,128,0,15,63,127,124,108,110,38,238,255,248,128,0,0,0,0,0,192,112,16 50 POKE#760,3,7,15,29,58,51,103,238,0,128,193,227,255,127,63,30,30,96,152,188,252,216,192,63 60 FORI=0TO2:FORJ=0TO2:POKE#7B0+I*18+J*7,32,32,32,31,28,28,28:NEXT:POKE#7C1+I*18,0:NEXT 70 POKE#7B0,#E0,#E1:POKE#7B7,#E2,#E3:POKE#7BE,#E4,#E5:POKE#7C9,#E6,#E7,#E8:POKE#7D0,#E9,#EA,#EB:POKE#7E2,#EC,#ED,#EE 80 CLK 90 IF INKEY() CLS:CLP:END 100 IF [1]>12&&[1]<22 T=2 ELSE IF [0]>13&&[0]<21 T=1 ELSE T=0 110 S=S+(S<T)-(S>T):LC 15,10:?STR$(#7B0+S*18); 120 FOR I=0 TO1 130 IF [I]>37 [I]=0 140 IF ![I]&&RND(9)>7 [I]=1 150 IF [I] [I]=[I]+1 ELSE GOTO 230 160 IF [I]<33 LC[I],10+I:?"-"; 170 N=1 180 Z=[I]-N 190 IF Z>0&&Z<34 LC Z,10+I:?"("; 200 N=N+1 210 IF N<6 GOTO 180 220 LC Z-1,10+I:?CHR$(0); 230 NEXT 240 GOTO 90