===============================================================================
 GOTO PB-100 (2025-08-10a 版)
 by 門真 なむ
===============================================================================

-------------------------------------------------------------------------------
 概要
-------------------------------------------------------------------------------
　CASIO PB-100 用の、PB-100 自体を題材にしたドットイートタイプのゲームです。
　増設 RAM 不要, DEFM 0

　舞台となる PB-100 のプログラムエリア内でカーソルを動かして命令を入れていき、
　敵を避けながら全行を埋めるのが目的です。入れた命令の数がスコアになります。


-------------------------------------------------------------------------------
 操作方法
-------------------------------------------------------------------------------
・[SHIFT][0] で実行。

・[W] で自機を右へ移動、
　[-] で次の行頭へ移動、
　[6] で前の行頭へ移動 (2 周目以降)。

・STOP シンボルが点いたら [EXE] で進行。


-------------------------------------------------------------------------------
 遊び方
-------------------------------------------------------------------------------
　実行すると、タイトル、進行状況表示に続けてゲームが始まります。
　┏━━━━━━━━━━━━┓
　┃ＧＯＴＯ　ＰＢ－１００　┃タイトル
　┏━━━━━━━━━━━━┓
　┃Ｐ　０１２３４５６７８９┃進行状況表示
　┏━━━━━━━━━━━━┓
　┃１　■＿＿，　　　　　　┃ゲーム開始
　┏━━━━━━━━━━━━┓
　┃５　ε■＿Ω　　　　　　┃ゲーム中 (εは小さい E)
　┗━━━━━━━━━━━━┛
　　↑　↑↑↑↑
　　│　│││└────── 敵
　　│　││└─────── 空き
　　│　│└──────── 自機
　　│　└───────── 入力済マーク
　　└─────────── 行番号
　　ライフは角度モードで表示 (DEG:1 / RAD:2 / GRA:3)

　ゲームの舞台はノーマル PB-100 のプログラムエリア P0..P9 です。
　各エリアは全 9 行からなり、各行に空き「＿」が複数並んだ状態から始まります。

　自機であるカーソル「■」を動かして空きを埋めていくのが目的です。
　自機が空き部分を右に進むと命令が入力されたものとして
　入力済マーク「ε」が置かれ、スコア が 1 (ステップ) 増えます。

　自機が行を移動すると必ず左端に戻されます
　([EXE] キーによる改行での動きを模したものです)。
　自機は行 1 と 9 を跨いで動けます。

　エリア内には敵「Ω」が 1 体おり、自機の方に近づいてきます。
　自機が敵に当たるとライフが減り、両者は行の両端に弾き飛ばされます。
　敵は行 1 と 9 を跨いでは来ません。

　敵は自機より上の行にいるときは「’」、下にいるときは「，」で表示されます。
　このときは自機が重なっても当たりません。

　ライフがなくなるとゲームオーバーです。
　┏━━━━━━━━━━━━┓
　┃４　εε＊＿　　　　　　┃ゲームオーバー
　┏━━━━━━━━━━━━┓
　┃　２５　ｓｔｅｐｓ　　　┃最終スコア表示
　┗━━━━━━━━━━━━┛

　エリア内の空きをすべて埋めるとクリアとなり、
　ライフが回復して次のエリアが始まります。
　先のエリアになるほど行が広くなり、敵の移動速度も上がります。
　┏━━━━━━━━━━━━┓
　┃３　εεεε　３６　　　┃クリア時のスコア表示
　┏━━━━━━━━━━━━┓
　┃ＲＥＡＤＹ　Ｐ０　　　　┃クリアメッセージ
　┏━━━━━━━━━━━━┓
　┃Ｐ　＿１２３４５６７８９┃進行状況表示 (「＿」はクリアしたエリア)
　┗━━━━━━━━━━━━┛
　　　　　　　 :

　全エリアをクリアすると 2 周目が始まり、上移動が可能になります。

　3 周目からはエリアをクリアしてもライフが回復しなくなります。


-------------------------------------------------------------------------------
 リスト (544 ステップ)
-------------------------------------------------------------------------------
[P0]
1 GOTO 40
2 MODE 6-B:PRINT:PRINT MID(D,1);CSR 2;MID(24-H(D),Q(D)-2);:C=2
3 E=E+SGN(C-E)*.05*(A+1:F=F+.2*SGN(D-INT F:IF C>H(D);H(D)=C:G=G+1
4 PRINT CSR E;MID(11-SGN(D-INT F,1);CSR C;:IF D=INT F;IF C=INT E THEN 30
5 IF G≧H THEN 20
6 IF KEY="W";IF C<Q(D);PRINT "ε■";:C=C+1:GOTO 3
7 PRINT "■";:IF KEY="6";IF H≧544;D=D+8-9*SGN LOG D:GOTO 2
8 IF KEY≠"-" THEN 3
9 D=1+D*SGN(9-D:GOTO 2
10 PRINT G,CSR 6;A;CSR 0;"READY P":NEXT A:PRINT "CLEAR A":GOTO 40
20 NEXT B:PRINT "*",G;" steps"
30 VAC
40 PRINT "GOTO PB";-100-A:FOR A=0 TO 9:FOR C=2 TO 10:G(C)=2:P(C)=6
41 NEXT C:$=" _________0123456789":PRINT "P"+MID(1,1+A)+MID(C+A)
42 $=MID(12)+"'Ω,εεεεεεεεε"+MID(2,9):D=1:E=H+36:H=E+4*A+INT(A/6
50 FOR E=E TO H-1:F=1+RAN#*9:IF Q(F)≧C THEN 50
51 Q(F)=Q(F)+SGN A:NEXT E:FOR B=B*SGN INT(SQR H/34 TO 2:E=Q(F):GOTO 2

※行を一杯に使う箇所もあるので、区切りのスペースは詰めて入力してください。
※文字列内の「ε」は小さい E です。
※Pocket BASIC Simulator.(PB-SIM) 形式のリスト goto_pb-100.txt を
　同梱していますが、同環境での動作は無保証です。


-------------------------------------------------------------------------------
 プログラムの概要
-------------------------------------------------------------------------------
[P0]
　 1 : 初期化へ

　 2 : ライフと行番号表示、自機を行頭へ移動

　 3 : 敵移動、到達 X 更新、スコア加算
　 4 : 敵表示、ヒット判定
　 5 : クリア判定
　 6 : 右移動
　 7 : 自機表示、上移動
　 8 : ループ
　 9 : 下移動

　10 : クリア、オールクリア

　20 : ミス、ゲームオーバー

　30 : 変数初期化

　40 : タイトル、エリア開始、全行を 4 桁で初期化
　41 : 進行状況表示
　42 : キャラテーブル作成、自機 Y 初期化、目標スコア計算

　50 : 伸ばす行をランダムに選ぶ (上限ならリトライ)
　51 : 行を伸ばす、ライフの回復と開始、敵 X 初期化


-------------------------------------------------------------------------------
 変数表
-------------------------------------------------------------------------------
　$    : 進行状況表示用、ゲーム画面表示用
　A    : エリア (0.. 9)
　B    : ミス数 (0.. 2)
　C    : 自機 X (2..11)、テンポラリ
　D    : 自機 Y (1.. 9)
　E    : 敵   X (2..11)、テンポラリ
　F    : 敵   Y (1.. 9)、テンポラリ
　G    : 現在スコア (0..)
　H    : 目標スコア (36..)
　I..Q : 行 1..9 到達 X (2..11)
　R..Z : 行 1..9 行末 X (6..11)


-------------------------------------------------------------------------------
 備考
-------------------------------------------------------------------------------
・エリア開始時に、自機は行 1 の左端、敵はランダムな行の右端に配置されます。

・エリアが進むと敵の横の速度が上がりますが、縦の速度はそのままです。

・(ゲームの) P0 では各行の空きは 4 で、9 行あるので全部で 36 です。
　エリアが進むごとに全体で 4〜5 増えていき、1 周すると合計で 544 になります :-)

・敵が横に動くと軌跡が残りますが仕様です。自機が行を動くと消えます。

・実際の PB-100 では行番号と行末コードで 3 ステップが消費されますが、
　今作ではフィールドが狭くなってしまう都合上、そこまでは再現していません。

・言わずもがな「READY P0」「P 0123456789」は RUN / WRT モードでの表示、
　「GOTO PB-100」は PB-100 の広告類で画面に書かれている文字列、
　2 周目の上移動は PB-110 などのいわゆる新 PB で追加された [SHIFT]+[EXE] です。
　PB ユーザーは見た目で少々混乱することと思います。


-------------------------------------------------------------------------------
 バージョン履歴
-------------------------------------------------------------------------------
■2025-08-10a
・readme 修正

■2025-08-10
・初版公開


-------------------------------------------------------------------------------
 連絡先
-------------------------------------------------------------------------------
・Twitter : @num_kadoma
・WebSite : http://littlelimit.net/
