見出し画像

【プチコン3号】確率計算に使用する0~65535の数の目安表を作る

 前回に引き続き、ゲーム制作にかかせない確率計算の補助となるプログラムを作りました。だいぶ気合を入れすぎて横道に逸れてしまったので、そろそろ本筋に戻りたいところです。

 公開キーはNKFPJXQ3です。まずは下記の模写で全体像をご確認ください。

(コメントアウトなど多少noteの書式に合わせてありSmileBASICと違う部分があります)

'-------------------------------------------'
'確率目安表'
'2022/03/24'
'-------------------------------------------'
OPTION STRICT
ACLS
'-------------------------------------------'
'変数'
'-------------------------------------------'
VAR B=0,I=1,J=0,B_X=1,B_MIN=1,B_SUM=0
DIM BP[100],BQ[100]
BP[0]=0
BQ[0]=0
'-------------------------------------------'
'メインループ'
'-------------------------------------------'
WHILE TRUE
  '画面リセット'
  GCLS
  CLS
  'ボタン関数'
  D_BTN
  'デバッグ関数 D_DEBUG'
  '以下の条件でメインループ終了'
  IF B_SUM==65536 OR I==99 THEN BREAK
  '操作説明'
  ?"+▲=+1 +▶=+1 ▲+B=+100 ▲+X=+1000 ▲+Y=+10000"  '絵文字を使用'
  ?"+▼=-1 +◀=-1 ▼+B=-100 ▼+X=-1000 ▼+Y=-10000" 
  '計算結果と残りの数'
  ?FORMAT$("%3D|%5D/65536=%5D/%5D",I,B_X,B_X/B_X,65536/B_X)
  ?"ノコリ",65536-B_SUM
  VSYNC 1
WEND
'結果を表示する'
FOR J=1 to I-1
  '計算結果'
  ?FORMAT$("%3D|%5D~%5D=%5D/%5D",J,BQ[J-1],BQ[J]-1,BP[J]/BP[J],65536/BP[J])
NEXT
'ここでIと配列の値をセーブしたい...'
END
'-------------------------------------------'
'ユーザ関数'
'-------------------------------------------'
'ボタン関数'
DEF D_BTN
  'カタいボタン'
  B=BUTTON(2)
  IF (B AND 4)==4 THEN B_X=B_X-1
  IF (B AND 8)==8 THEN B_X=B_X+1
  'A押したらBP[I]にB_Xの数値を保存&合計値B_SUMとBQ[I]を計算&I++'
  IF (B AND 16)==16 THEN BP[I]=B_X:B_SUM=B_SUM+B_X:BQ[I]=B_SUM:I=I+1

  'おしっぱボタン'
  IF B==1 THEN B_X=B_X+1
  IF (B AND 33)==33 THEN B_X=B_X+100
  IF (B AND 65)==65 THEN B_X=B_X+1000
  IF (B AND 129)==129 THEN B_X=B_X+10000
  IF B==2 THEN B_X=B_X-1
  IF (B AND 34)==34 THEN B_X=B_X-100
  IF (B AND 66)==66 THEN B_X=B_X-1000
  IF (B AND 130)==130 THEN B_X=B_X-10000

  'B_Xの下限、上限'
  IF B_X<B_MIN THEN B_X=B_MIN
  IF B_X>65536-B_SUM THEN B_X=65536-B_SUM
END
'デバッグ関数'
DEF D_DEBUG
  ?FORMAT$("B=%3D,I=%D,J=%D",B,I,J)
  ?FORMAT$("B_X=%5D,B_MIN=%5D,B_SUM=%5D",B_X,B_MIN,B_SUM)
  FOR J=1 TO I
    ?FORMAT$("BP[%D]=%5D,BQ[%D]=%5D",J-1,BP[J-1],J-1,BQ[J-1])
  NEXT
  ?"-------------------------------------------"
END
RUNするとこのような画面になります

 後は十字キーとB・X・Yボタンで入力した数値をAボタンで確定させるだけで、選んだ0~65535の値の幅とそれに応じた確率BP[J]/BP[J]/65536/BP[J]の表が出力されます。

後は本編のゲームでこの表に対応したIF文とその乱数ごとのボーナスを作るだけ

 VSYNC 2以上で発生するボタン入出力関数の不具合を削ったりごまかしたりしたところや値の入った配列とその数(回数)をセーブデータにできなかったところが不満というか勉強が足りなかった点ですが、個人的には次のゲーム本編に実装した疑似乱数(線形合同法)の偏りが気になっているので、そちらを試していきたいと思います。

 また何かありましたら報告します。それでは。

(終)

この記事が気に入ったらサポートをしてみませんか?