CASIO pocket computer
PB-100の宇宙

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

公開日 2003/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行目に掲載ミスがあったのを修正しました.(2017年4月23日)

PRINT CSR 0;X;K;
↓
PRINT CSR 0;X;V;

技術情報

変数表

変数大域変数ブロック消滅とスコア表示(3~8行)NEXT ブロックの設定とブロック落下(9~14行)
Aハイスコア
BFOR~NEXT、消えるブロックの位置FOR~NEXT
CFOR~NEXT
Dランク(連鎖で消したブロックの数)キー入力判定
E$"*"
F$NEXT ブロック
G$"["
H$" "(スペース)
I$~P$ブロックキャラクタ
Q積もったブロックの高さ
R$落下中のブロック
S,Tブロック左、右
U消えるブロックの数
Vスコア
Wレベルアップのカウンター
Xレベル(落下速度)
Y,ZNEXT ブロック左、右
$"*****" + 積もったブロック + スペース10個

行番号マップ

処理
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行目と12行目に使われている EXP SGN は、ここでは 1+SGN を1ステップ圧縮したものといえます.

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

MID の罠

開発当初には、MID 関数の扱いに苦労したのを憶えています.

$ には積もったブロックが入っていて、ブロックの消滅処理は MID 関数から $ 内部を参照したり操作します.この際にエラーが頻発しました.

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

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

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

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

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

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

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

ただゲームシステムに根本的な欠陥があるように思えるので発表は見合わせております. というのも僕は一度、ゲーム開始から が連続して何もできないままゲームオーバーになってしまったことがあるのです. ブロックがポコポコと消える辺りなどかなり快感なので、残念です.

解消するいいアイデアがあるという方、いいからさっさと発表しろという方、一報下されば発表したいと思います. 2023年4月14日にようやく公開しました.