<var>, <code>, <samp>
のマークアップを追加しています。(2023/05/15)
感想戦とリンクを追記しました。昨日はステップ数を修正し忘れていました。(488ステップ → 487ステップ、2023/04/16)
9行目に不要な :
があったのを削除しています。本件は門真なむ氏からご指摘いただきました。(2023/04/15)
この記事は20周年プレ企画第四弾です。第三弾では「1行落ちモノゲームの金字塔、Mr.Tの成立経緯について」を公開しました。4月18日20時18分の20周年記念日の前夜まで、計7回に渡って記事やバージョンアップを用意しています。今回で折り返し地点です!
ぽあぽあ 544ステップ版の競演が急きょ決まりました!
毎夜20時18分頃に、淡々と記事等を公開するだけだったプレ企画ですが、今回はナント、門真なむ氏も関わってくださいました。
この記事に前後して、門真なむ氏もお手元の「ぽあぽあ 544ステップ版」を公開されるとのことです。
PB-100 プログラマとしての実力もスンゴイ上に、研究量やリリースの速度でも尋常でなはない、なむ氏のことですから、ひょっとしたらと思っていましたが、やっぱり!
ベンチマークなどの調査を基に、高速な実装にも定評のあるなむ氏によるリストはとても楽しみで、僕も勉強させていただきたい思いです。
一方の私のリストは、ループを抜けて都度に6行に戻るあたり、速度よりも省メモリを重視しているようです。また、オリジナルの改編も様々に行っている筈で、オリジナルを尊重するなむ氏とはどんな違いが出てくるか?
一つのお題に対して、複数の実装が寄せられるのは、ポケコンジャーナルのゲームデザイン館など、マイコン誌では度々企画されていました。それを20年代にもなって PB-100 で出来るとはことになるとは…!
ぽあぽあ 544ステップ版公開!
長らく公開のご要望を頂いていた「ぽあぽあ 544ステップ版」をついに公開します。
「ぽあぽあ」(小山田 正人氏)は、ポケコンジャーナル 1996年4月号に掲載された落ちモノパズルゲーム作品です。テトリス系列の落ちモノではなく「ぷよぷよ」を志向しているユニークな作品で、連鎖をきめるとブロックがポコポコと消えていくのは心地良いです。
このぽあぽあの544ステップ版制作の経緯については「幻の『ぽあぽあ 544ステップ版』」をご覧ください。
ところで、コロナ禍もあって実家に帰れていない為、オリジナルの確認を出来ていません。オリジナルと本作の差異については分からなくなっています。悪しからず。
遊び方
2~3個の泡が連なった3種類のブロックが画面右から左にふんわりと落ちてきます。次に落ちてくるブロックの種類は角度モード表示で判断できます。(より短く書くために、オリジナルとはブロックとモードの対応を変えています。)
ブロックは 4 で回転し、6 で速く落ちます。
ブロックが積まれた時に 88 と並ぶとブロックは破裂します。この衝撃で互い違いになっている泡(o°, °o)が 8 になり、ブロックの隙間も詰まります。これによって 8 が並ぶと連続で破裂して得点が入ります。
一度に消える 8 が多い程高得点です。
ブロックで画面が埋まるとゲームオーバーです。ブロックを消せないと落下速度は上がっていきます。反対にブロックを連鎖で消すと落下速度は下がります。
プログラムリスト
487ステップです。変数増設はありませんが、26個を使い切っています。
1 VAC :$="OO() 8 8oo°°°8°°o 8°8o°ooo8°o":PRINT " PoaPoa"
2 K$=" ":FOR A=.5 TO 15:L$(A)=MID(A*2,2):GOTO 12
3 FOR I=0 TO 2:PRINT CSR A-2;L$(I);CSR 9;:NEXT I
4 IF 1≦D;PRINT D;:J=J+10↑D
5 $=MID(1,A-1)+H$(I)+MID(A+1):RETURN
6 I=0:E=LEN($)-3:PRINT :IF 0<E;PRINT MID(2,E);
7 FOR A=2 TO E+1:IF MID(A,2)≠Q$;IF MID(A,2)≠T$ THEN 9
8 IF D=0;$=MID(1,A-1)+U$+MID(A+2)
9 IF 0≦D;IF MID(A,1)=K$;GOSUB 5:GOTO 6
10 NEXT A:FOR A=2 TO E+1:IF MID(A,2)="88";D=D+1:GOSUB 3:NEXT A
11 IF I≠0;GOSUB 5:GOTO 6
12 NEXT A:F=F-D:D=RAN#*3:IF 4<E;D=RAN#*2
13 MODE 4+D:FOR A=10 TO E STEP -1:FOR B=F TO 9:IF KEY="4";G=G+9-12*SGN G
14 PRINT CSR A;O$(C+G);I$;:IF KEY≠"6";NEXT B
15 I$=K$:NEXT A:$=MID(1,E+1)+O$(C+G)+M$:C=INT D:D=-1:IF E<11 THEN 6
16 PRINT :PRINT J;"Pts"
シュミレータ用リスト
実機用との差異は、2行冒頭に H$="":
を追加している。
[P0]
1 VAC :$="OO() 8 8oo\DG\DG\DG8\DG\DGo 8\DG8o\DGooo8\DGo":PRINT " PoaPoa"
2 H$="":K$=" ":FOR A=.5 TO 15:L$(A)=MID(A*2,2):GOTO 12
3 FOR I=0 TO 2:PRINT CSR A-2;L$(I);CSR 9;:NEXT I
4 IF 1<=D;PRINT D;:J=J+10^D
5 $=MID(1,A-1)+H$(I)+MID(A+1):RETURN
6 I=0:E=LEN($)-3:PRINT :IF 0<E;PRINT MID(2,E);
7 FOR A=2 TO E+1:IF MID(A,2)<>Q$;IF MID(A,2)<>T$ THEN 9
8 IF D=0;$=MID(1,A-1)+U$+MID(A+2)
9 IF 0<=D;IF MID(A,1)=K$;GOSUB 5:GOTO 6
10 NEXT A:FOR A=2 TO E+1:IF MID(A,2)="88";D=D+1:GOSUB 3:NEXT A
11 IF I<>0;GOSUB 5:GOTO 6
12 NEXT A:F=F-D:D=RAN#*3:IF 4<E;D=RAN#*2
13 MODE 4+D:FOR A=10 TO E STEP -1:FOR B=F TO 9:IF KEY="4";G=G+9-12*SGN G
14 PRINT CSR A;O$(C+G);I$;:IF KEY<>"6";NEXT B
15 I$=K$:NEXT A:$=MID(1,E+1)+O$(C+G)+M$:C=INT D:D=-1:IF E<11 THEN 6
16 PRINT :PRINT J;"Pts"
変数表
変数 | ブロック落下処理の内容(12~15行) | ブロック破裂処理の内容(3~12行) |
---|---|---|
A | FOR NEXT
| |
B | FOR NEXT
| |
C | ブロック | |
D | NEXT ブロック | 連鎖数 |
E | 隙間を含むブロックの高さ | |
F | 落下速度 | |
G | ブロックの角度 | |
H$ | =""
| |
I(I$) | ="" , " " | 5行目では、0: " " を削除、3:88 が破裂した |
J | 得点 | |
K$ | =" "
| |
L$~Z$ | 破裂キャラクタ、ブロックキャラクタ |
最後に
最終版っぽい手書きのリストには案の定バグがありました。怒涛の勢いでプレ企画用に7本、メインの新作ゲーム1本を用意している中でのデバッグは肝を冷やしましたよ。
そして、なむさん、ありがとうございます。
次回は第五弾「544ステップに詰め込め!ZERO のノーマル PB-100 対応に挑んだ者たちの軌跡」です。お楽しみに!
追記・2実装競演の感想戦
思いもよらず2実装が出そろうこととなったプレ企画第四弾は楽しんでいただけましたか?
ぽあぽあでは最初の破裂の後に、互い違いになっている泡(o°, °o)が 8 になり、隙間が詰まり、更に破裂をする。と複数の処理が続きます。この部分を高速に実装することが、ポコポコという小気味よさを生み出す為に重要と考えています。
門真なむ版は予想通り、高速な実装を披露してくださいました。
僕は本企画の前日になむ氏がぼかして公開していたリストの行数から、ステップ数については僕の実装に分があるだろう、と考えていました。しかし動作速度の差が如実に示されると、そっと CLEAR
して明日は門真版を入れて学校に行こうと思いました。
門真なむ氏からは「連鎖がより自然な動きになっている感じですね。ルールを咀嚼してまとめ直したといいますか。
」と頂きました。そこを拾って頂いてありがとうございます。新規性はちょっと示すことができました、と胸を撫でおろします。
門真氏のリストを拝見していくと、本作でも文字列の不等式が使われています。この理解が曖昧な僕はアワワとなります。この部分も学んでいきたい点です。
門真なむさんは平日にも関わらず、原作に寄せるブラッシュアップや実装ミスの修正と追い込みをして、更にはアレンジ版まで併せて公開してくださいました。大変ありがとうございました。それにしても開発が速い…!