CASIO pocket computer
PB-100の宇宙

連鎖の熱い本格パズル
Mr.T
by PBロッキー

公開日 03/04/18

プログラムリスト

PRINT " ↑← Mr.T →↓",A;:$="*****[ ♦↑→↓←↑→↓"
FOR B=4 TO 15:A$(B)=MID(B,1):I(B)=0:GOTO 14
$=MID(1,B-1)+MID(B+U)
PRINT CSR 0;MID(6,10);:FOR B=6 TO 13:IF M$(S)=MID(B,EXP SGN T) THEN 3
NEXT B:Q=LEN($)-15:U=1:FOR B=5 TO Q+4
IF MID(B,1)=MID(B+U,1);D=D+1:U=U+1:GOTO 6
IF U>1;PRINT CSR B-6;MID(1,U);CSR 8;D;:V=V+10↑D:GOTO 3
NEXT B:W=W+EXP D:IF W≦1;X=X+1:PRINT CSR 0;X;V;:W=π↑π/SQR X:GOTO 4
S=INT Y:Y=RAN#*4:T=Z:Z=INT (RAN#*4:F$=M$(Y)+I$(Y*SGN Z+Z)
10 FOR B=-1 TO 7-Q:FOR C=X TO 4:IF KEY="4";IF X<5;S=S+3-4*SGN S
11 IF KEY="6";IF X<5;S=(S+1)*SGN (3-S
12 R$=M$(S)+I$(S*SGN T+T):PRINT CSR 7-B;R$;F$(EXP SGN B);
13 IF KEY≠"Q";W=W-1:NEXT C
14 NEXT B:D=0:$=MID(1,Q+5)+R$+"          ":IF Q<9 THEN 4
15 FOR B=9 TO 0 STEP -.2:PRINT CSR B;E$;:NEXT B:IF A≦V;A=V:PRINT "Hi!";
16 PRINT V:GOTO 1

14 行目のスペースは 10 個です.

PB-100 の初期出荷バージョンの一部で正しく動作しないケースがあります.その際はPB-100初期出荷バージョンの異常動作についてを参照してリストを変更してください.

8行目にバグがあり修正しました。PRINT CSR 0;X;K; → PRINT CSR 0;X;V;(2017年4月23日)

技術情報

変数表

変数内容
Aハイスコア
B,CFOR~NEXT
Dランク
E$"*"
F$NEXT表示
G$"["
H$" "(スペース)
I$~P$ブロックキャラクタ
Q積もったブロックの高さ
R$落下中のブロック表示
S,Tブロック左、右
U消えるブロックの数
Vスコア
Wカウンター
Xレベル(落下速度)
Y,ZNEXTブロック左、右
$"*****"+"(積もったブロック)"

行番号マップ

処理
1タイトル表示他
2変数の初期化、ブロックキャラ設定
3ブロック抜き出し
4~5画面表示、特殊ブロック用
5~8ブロック消滅
8レベルアップ
9ブロックのセット
10~14ブロック落下の表示、キー入力他
14ゲームオーバー判定他
15~16エンディング、スコア表示他

サブルーチンは 1~9 行に

ゲームの流れはブロックの落下→ブロックの消滅となりますが、プログラムでは前半( 3~7 行)にブロックの消滅処理、後半( 9~14 )にブロックの落下処理を置いています.

これは GOTOTHEN も含む)を多用する消滅処理を行番号の小さい( 1 桁の)ところに置くためです. こうしてなるべく GOTO の跳び先に 2 桁の行番号がこないようにしました.

PB-100 では GOTOGOSUB の後にくる行番号はその字数分だけステップを使うので、こうすることで数ステップ稼いでいます.

EXP SGN~ で 1 ステップを稼ぐ

IF M$(S)=MID(B,EXP SGN T) THEN 3
EXP 0 = 1
EXP 1 = 2.718281828

4 行目に使われている EXP SGN ~ は、ここでは 1+SGN ~ を1ステップ圧縮したものといえます.

MID 関数のパラメータや配列変数の指定、CSR など小数部があっても無視して実行してくれる命令に有効な場合があります.

MID の罠

最初にプログラミングに取りかかったとき、MID 関数の扱いに苦労したのを憶えています.

$ には積もったブロックが入っていて、ブロックの消滅処理は $ を直接参照したり操作するのですが、エラーが頻発しました.

原因は(はっきり憶えていないので推測ですが)、$ がヌルになっていたり、MID のパラメータが 0 だったりオーバーしたためでした.

『パニッカーST』を解析して空読み(といえばいいのでしょうか?)が必要なことが分かり、解決しました.

幻の『ぽあぽあ 544ステップ版』

RUN DEG
8 o 8 ° o o 8 o ° °

以上は直ちに同時進行で制作していた『ぽあぽあ 544ステップ版』に生かされました.

制作の骨子は、オリジナルでは積もったブロックを配列変数( O$(1)O$(12) )に格納し処理していたのを$のみで行うようにするというものでした.

現在544ステップ版は再現性 95%、544ステップに収まりかなり余裕もあります.

ただゲームシステムに根本的な欠陥がある(ように思える)ので発表は見合わせております.

というのも私は一度、ゲーム開始から が連続して何もできないままゲームオーバーになってしまったことがあるのです.

ブロックがポコポコと消える辺りなどかなり快感なのですが、残念です.解消するいいアイデアがあるという方、いいからさっさと発表しろという方、一報下されば発表したいと思います.