SimPB
on PB-100+OR-1/PB-SIM/Pokecom GO
Programmed by NUAO, 2022/11/3
平地に農地や町を興し、災害に負けず発展させて税収を上げよう!
PB-100の中に展開する街育成ゲームです。
<ゲームの概要>
・フィールドの構成要素は、建物、農作物、樹木で、それぞれ成長/発展していきます。農作物や樹木は、成長すると食料、建築資材として収穫され、街を発展させます。
フィールド画面
・ゲームのパラメータは、住民数、町の資産、住民の資産、食料、建築資材、経過日数です。
・プレイヤーが、町長の立場で「種」「苗木」「新築建物」をフィール ドに配置すると、それぞれ一定の条件の下に勝手に成長・発展していきます。
・農作物は、成熟したら食料として住民に収穫され、住民は収入を得ます。収穫後は「種」 に戻ります。
・樹木は、成熟したら建築資材として住民に収穫され、住民は収入を得ます。収穫後は「苗 木」に戻ります。
・住民は、建物の中で経済活動をして収入を得ます。
・町長は、指定された税率で毎日住民の資産から税を徴収します。
・時々嵐が襲来して農作物、森林、さらに備蓄した食料及び建築資材に被害が出ることがあります。
・まれに地震があり、建物、住民数、町の資産に深刻な被害が出ることがあります。
・建物が発展すると住民数の上限が増えます。
・住民数が1未満になるとゲームオーバーとなります。
・ゲームは何時でも終了でき、その時点での町の資産/経過日数×100 が得点となります。
<発展と衰退の条件>
0)ゲーム開始時
・フィールドに建物×1、農作物の種×1、樹木の苗木×1 が配置されてスタートします。
・パラメータ初期値は、住民数 2、町の資産 10、住民の資産 5、食料 5、建築資材 0 です。
1)種まき・新築
・農作物の種撒きには、町の資産×1 を消費します。
・樹木の苗木植えには、町の資産×2 を消費します。
・建物の新築は、町の資産×5、建築資材×10 を消費し、かつ住民数は 5 人以上が必要です。
2)成長
・農作物の成長は、川が流れる平原中央部が最も早いです。
・森林の成長は、山側が早いです。
・建物の発展は、住民の資産×2、建築資材×2 を消費し、住民数×2 以上必要で、アクセスが良い海側が早いです。
・住民数は、十分に食料があり、十分な住居(建物)があれば、自然に増えていきます。
3)収穫
・農作物が成熟すると住民が収穫し、食料+5、住民の資産+1 となります。
・樹木が成熟すると住民が収穫し、建築資材+5、住民の資産+2 となります。
・建物の発展の度合いと住民数に応じて、住民が収入を得ます。
・町長は、一日ごとに住民から税率に応じた税を徴収し、町の資産となります。
4)負担
・建物は、発展の度合いに応じて維持費が掛かり、住民の資産から差し引かれます。
・住民の資産が 0 の場合は、建物の発展度合いが縮小(老朽化)し、最後は更地になります。
・食料が 0 になると、住民数が徐々に減少します。(飢餓)
・建物(住居)が小さくなると、住民数が徐々に減少します。(過疎)
<操作方法>
1)プログラム入力後、[P0]を RUN します。
2)タイトル表示後、フィールドが表示され、ゲームが開始します。
3)何かキーを押す(少し長めに押す)と、パラメータを表示した後、メニュー画面になります。
パラメータ表示画面
メニュー画面
4)何かキーを押してカーソル">"を移動させ、"."で決定します。
5) ♠(樹木)、w(農作物)、H(建物)を選択した場合は、場所を選びます。 何かキーを押してカーソル"→"を移動させ、"."で決定します。 条件が成立していれば"+"が表示されて各要素が配置され、ゲームに戻ります。 条件が成立していなければ何も表示されず、ゲームに戻ります。
6)$(税率)を選択した場合は、税率を変更します。 "+" "-"キーで税率を±0.01 単位で変更し、"."キーを押すと決定してゲームに戻ります。
7)q(終了)を選択した場合は、確認を経てゲームを終了し、その時点での得点を表示します。
8)ゲームを中断又は終了したあと再開する場合は、[P0]において"RUN 50 [EXE]"で続行できます。
<ゲームのコツ>
・これは「育成ゲーム」であり、時々操作するほかは基本放置するプレイスタイルを想定しています。
・初期はとにかく苗木を植え、建築資材を調達することに努めましょう。建物が大きくなれば住民数が増えて きますので、建物の新築ができるようになります。
・住民数が増えてきたら、食料消費が増えますので調達を切らさないようにしましょう。
・建物が無いと住民は生きていけません。建物(嵐に耐える)を早めに増やしましょう。
プログラムの解説
[P0]
10 VAC
20 PRINT "SimPB";
30 F=5:H=2:M=5:N=10:G=.01:E=10
40 S=7:U=4:X=1:$="_,r\SP.vwnhH"
50 $=MID(1,10)+" "
60 FOR J=1 TO 10:$=$+MID(INT(P(J))+1,1):NEXT J
70 $=$+"/":PRINT:PRINT MID(11,12);
80 L=0
90 FOR I=1 TO 10:K=P(I)
100 IF K=6.9;IF RAN#<.5;F=F+5:M=M+1:K=4:GOTO 280
110 IF K=3.9;IF RAN#<.2;O=O+5:M=M+2:K=1:GOTO 280
120 IF K<7 THEN 210
130 M=M-(K-7)*.02:IF M<0;M=0:K=K-.1:IF K<7;K=0:GOTO 280
140 L=L+K-6
150 M=M+(K-7)*.2*H/10*RAN#:IF RAN#>.1 THEN 280
160 IF M<2 THEN 280
170 IF O<2 THEN 280
180 IF H<2 THEN 280
190 IF K<9.8;K=K+.1/SQR I:M=M-2:O=O-2
200 GOTO 280
210 IF K<4 THEN 250
220 IF RAN#>.1 THEN 280
230 K=K+1/SQR ABS(I-5.5:IF K>6.9;K=6.9
240 GOTO 280
250 IF K<1 THEN 280
260 IF RAN#>.1 THEN 280
270 K=K+.05*I:IF K>3.9;K=3.9
280 P(I)=K
285 IF KEY<>"";GOSUB #2
290 NEXT I
300 F=F-H*RAN#*.05:IF F<0;F=0:H=H*(1-RAN#/10)
310 IF H<1;PRINT:PRINT "GAME OVER.":END
320 IF F>H*2;IF RAN#<.1;IF L*2>H;H=H+1
330 IF L*3<H;H=H-.1
340 N=N+M*G:M=M-M*G
350 IF RAN#<.002;GOSUB #3
360 E=E+1:GOTO 50
[P2]
10 PRINT:PRINT E;"D";INT(H);"i",INT(F);":";INT(O);"#"
20 PRINT:PRINT INT(M);"\\";INT(N);"$"
30 C=0
40 PRINT:PRINT " r \SP w H $ q";CSR C*2;">";
50 A$=KEY:IF A$="" THEN 50
60 IF A$="." THEN 100+C*100
70 C=C+1:IF C>5;C=0
80 GOTO 40
100 PRINT:RETURN
200 GOSUB 700
210 IF N>=2;P(B)=1:N=N-2:PRINT CSR B;"+";
220 RETURN
300 GOSUB 700
310 IF N>=1;P(B)=4:N=N-1:PRINT CSR B;"+";
320 RETURN
400 GOSUB 700
410 IF N>=5;IF H>=5;IF O>=10;P(B)=7:N=N-5:O=O-10:PRINT CSR B;"+";
420 RETURN
500 PRINT:PRINT "Tx";G;"+-.";
510 A$=KEY:IF A$="" THEN 510
520 IF A$="+";G=G+.01:IF G>.99;G=1
530 IF A$="-";G=G-.01:IF G<.01;G=0
540 IF A$<>"." THEN 500
550 PRINT:RETURN
600 PRINT:PRINT "Quit? y/n";
610 A$=KEY:IF A$="" THEN 610
620 IF A$<>"Y";PRINT:RETURN
630 PRINT:PRINT "Score=";INT(N/E*100:END
700 B=1:IF KEY<>"" THEN 700
710 PRINT:PRINT MID(11,12);CSR B-1;"\RA";
720 A$=KEY:IF A$="" THEN 720
730 IF A$=".";RETURN
740 B=B+1:IF B>10;B=1
750 GOTO 710
[P3]
10 IF RAN#>.8 THEN 60
20 PRINT CSR 2;" Storm! ";:IF KEY="" THEN 20
30 FOR D=1 TO 10:PRINT CSR D-1;"=@";:K=TAN 2
40 IF P(D)>=1;IF P(D)<7;IF RAN#<.5;P(D)=0
50 NEXT D:F=F/2:O=O/2:RETURN
60 PRINT CSR 2;" Quake!! ";:IF KEY="" THEN 60
70 FOR D=1 TO 10:PRINT CSR 2*FRAC(D/2;MID(11,11);:K=TAN 2
80 IF P(D)>=7;IF RAN#<.5;P(D)=0
90 NEXT D:H=H*RAN#:N=N*RAN#:RETURN
実機形式