===============================================================================
 [移植版] フルーツ・アタック (2025-12-30 版)
 by 門真 なむ
===============================================================================

-------------------------------------------------------------------------------
 概要
-------------------------------------------------------------------------------
　I/O 1983 年 8 月号 p.272 掲載の PC-1500 +4K 用マージャン風ゲーム
　『フルーツ・アタック』(Dr.缶コーラ 作) を
　CASIO PB-100 シリーズ用に移植したものです。
　増設 RAM 不要, DEFM 0

　局が始まると牌が八つ配られ、10 回交換する間に役を揃えていきます。
　上がると役に応じた点数が入って次の局へ。最後まで揃わなければミスとなり、
　3 回ミスするとゲームオーバーです。30000 点を超えるとミスが 1 回分減ります。

　原作との違いなど
　・牌の選択がカーソルではなく、数字キーによる直接指定
　・ハイスコア・局数カウント・音なし
　・各種表示を変更・簡略化 (特に、文字しか使えないので牌の表現に無理がある)
　・役の表示に得点を追加
　・手牌の表示が遅い。容量の都合でソートを同時に行うため (高速な初代機推奨)


-------------------------------------------------------------------------------
 操作方法
-------------------------------------------------------------------------------
・初回は [SHIFT][1]、中断後は [SHIFT][0] で実行。
　※再開時は中断した局をやり直し。牌も配り直される。

・[1]..[8] で対応する位置の牌を捨てる。

・[9] で上がり。役なしだと入力に戻る。

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

※[e] はエラーになるので押さないこと。


-------------------------------------------------------------------------------
 遊び方
-------------------------------------------------------------------------------
　実行するとタイトル画面の後にゲームが始まります。
　┏━━━━━━━━━━━━┓
　┃ＦＡ≦πｂＱ♦Ω＃♥＄≧┃タイトル画面 (略称・パースの付いた雀卓・全種の牌)
　┏━━━━━━━━━━━━┓
　┃０　　　　　　　　　　　┃現在のスコア
　┏━━━━━━━━━━━━┓
　┃♦　０　ππｂΩ＃＃♥＄┃ゲーム画面
　┗━━━━━━━━━━━━┛
　　↑　↑　←───┬──→
　　│　│　　　　　└──── 手牌 1..8
　　│　└────────── 交換回数
　　└──────────── ラッキー・フルーツ (ドラ) 牌
　　ミス回数は角度モードで表示 (DEG:0 / RAD:1 / GRA:2)

　表示されている手牌から一つを選んで交換していきます。
　交換は 10 回まで可能で、役ができたら上がれます。

　上がると成立した役と得点、今回の合計得点が表示されて次局に進みます。
　なお EXTRA ポイントとして、スコアが 30000 点を越えるとミスが 1 回分減ります。
　┏━━━━━━━━━━━━┓
　┃Ｆ．Ｐ　１０００　　　　┃役
　┏━━━━━━━━━━━━┓
　┃Ｌ．Ｃ　１０００　　　　┃役
　┏━━━━━━━━━━━━┓
　┃π　０　　　　　　　　　┃役 (「ラッキー・フルーツ」は常時表示)
　┏━━━━━━━━━━━━┓
　┃Ｐｌｕｓ　２０００　　　┃今回の合計得点
　┗━━━━━━━━━━━━┛

　最後まで役ができなければミスとなり次局に進みます。
　┏━━━━━━━━━━━━┓
　┃Ｄｒａｗ　　　　　　　　┃ミス
　┗━━━━━━━━━━━━┛

　3 回ミスするとゲームオーバーとなり、タイトルに戻ります。
　┏━━━━━━━━━━━━┓
　┃Ｅｎｄ　　　　　　　　　┃ゲームオーバー
　┗━━━━━━━━━━━━┛


■牌一覧
　π : チェリー
　ｂ : オレンジ
　Ｑ : リンゴ
　♦ : マンゴー
　Ω : もも
　＃ : メロン
　♥ : いちご
　＄ : ぶどう


■役一覧
　名前                 表示 条件                得点        例
　-------------------- ---- ------------------- ----------- ----------------
　フルーツ・ペア       F.P  同種 2 個×4 組      1000       ππｂｂＱＱ♦♦
　フルーツ・カルテット F.Q  同種 4 個×2 組      3000       ππππｂｂｂｂ
　シックス・フルーツ   Six  同種 6 個+同種 2 個  3000       ππππππｂｂ
　オール・セイム       All  すべて同種          10000       ππππππππ
　フルーツ・アラカルト F.A  すべて別種           5000       πｂＱ♦Ω＃♥＄
　ラスト・チャンス     L.C  交換 10 回目で揃う   1000
　ファースト・メイク   1st  交換なしで揃う       5000
　ラッキー・フルーツ   牌   手牌の中にある       1000×個数

　※役は複合あり


-------------------------------------------------------------------------------
 リスト (544 ステップ)
-------------------------------------------------------------------------------
[P0]
1 FOR C=C TO 2:IF B*SGN C≧3e4;C=C-A:A=0
2 MODE 4+C:PRINT B:FOR P=1 TO 9:F(P)=INT(RAN#*8:NEXT P:FOR D=0 TO P
3 PRINT MID(G+4,1);D;CSR 4;:Q=2:R=8:T=8
4 FOR E=0 TO 7:S=T:T=H(E):FOR F=E TO 6:U=I(F):IF T>U;H(E)=U:I(F)=T:T=U
5 NEXT F:Q=Q+SGN(T-S:PRINT MID(T+4,1);:R=R-ABS SGN(T-G:NEXT E
6 S$=KEY:S$="0"+S$:S=VAL(S$):GOTO 6+SGN S
7 PRINT:GOTO 9+S/9
8 PRINT E*1e3:B=B+E*1e3:RETURN
9 G(S)=INT(RAN#*8:NEXT D:PRINT "Draw":NEXT C:PRINT "End",B:GOTO #1
10 S=B:IF Q=8;E=5:PRINT "F.A";:GOTO 20
11 FOR E=2 TO 8 STEP 2:IF F(E)≠G(E) THEN 3
12 NEXT E:IF Q=1;PRINT "All";:GOSUB 8
13 E=1:PRINT "F.P";:GOSUB 8:IF Q>2 THEN 30
14 E=3:IF K=L;PRINT "Six";:GOSUB 8:GOTO 15*Q
15 PRINT "F.Q";
20 GOSUB 8
30 IF D=P;E=1:PRINT "L.C";:GOSUB 8
40 IF D=0;E=5:PRINT "1st";:GOSUB 8
50 E=R:PRINT MID(G+4,1);:GOSUB 8:PRINT "Plus";B-S:GOTO 1

[P1]
1 VAC:A=1:$="FA≦πbQ♦Ω#♥$≧":PRINT $:GOTO #0

※P0 の行番号は、数と並びに意味があるため変更しないでください。
※行を一杯に使う箇所もあるので、区切りのスペースは詰めて入力してください。
※数値内の e は [=] キーの右の [E] キーを使って入力してください。
※Pocket BASIC Simulator.(PB-SIM) 形式のリスト fruits-attack.txt を
　同梱していますが、同環境での動作は無保証です。


-------------------------------------------------------------------------------
 プログラムの概要
-------------------------------------------------------------------------------
[P0]
　 1    : EXTRA ポイント処理
　 2    : ミス回数表示、手牌決定
　 3    : 「ラッキー・フルーツ」牌・交換回数表示
　 4..5 : 手牌のソート・種類カウント・表示・「ラッキー・フルーツ」牌カウント
　 6    : 数字キー入力待ち
　 7    : 分岐
　 8    : 役の得点表示・加算サブ
　 9    : 牌交換、交換回数更新、ミス判定
　10    : 「フルーツ・アラカルト」判定
　11    : 4 ペアチェック
　12    : 「オール・セイム」判定
　13    : 「フルーツ・ペア」確定
　14    : 「シックス・フルーツ」判定
　15    : 「フルーツ・カルテット」確定
　20    : ペア系判定終了
　30    : 「ラスト・チャンス」判定
　40    : 「ファースト・メイク」判定
　50    : 「ラッキー・フルーツ」処理、合計得点表示

[P1]
　 1    : タイトル、変数初期化


-------------------------------------------------------------------------------
 変数表
-------------------------------------------------------------------------------
　$    : キャラクタテーブル兼タイトル
　A    : EXTRA ポイントフラグ (0:使用済, 1:未使用)
　B    : スコア
　C    : ミス回数
　D    : ツモ回数
　E    : ループ、役の得点÷1000
　F    : ループ
　G    : ラッキー・フルーツ牌
　H..O : 手牌 1..8
　P    : ループ、定数 10 (※必ず手牌 8 の直後に置くこと)
　Q    : 手牌の種類数
　R    : 手牌のラッキー・フルーツ数
　S    : ソート時 左の牌、キー入力、役判定前のスコア
　T    : ソート時 比較元
　U    : ソート時 比較先
　V..Z : (未使用)


-------------------------------------------------------------------------------
 備考
-------------------------------------------------------------------------------
・マンゴーの牌は、他機種の移植版ではバナナに変えられています。
　同様にする場合「♦」を「Ｊ」にするとよいでしょう。


-------------------------------------------------------------------------------
 バージョン履歴
-------------------------------------------------------------------------------
■2025-12-30
・ぶどうを「￥」から「＄」に変更

■2023-07-27a
・正式公開

■2023-07-27
・初版公開


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