• タイトル
    パンツショップ
    (電子工作マガジン2018年WINTER号 特別別冊附録マイコンBASICMagazine掲載)

  • 開発環境
    IchigojamBASIC1.2.1

  • pants
  • 内容
    あなたはパンツのレンタル屋さんです。
    パンツを借りに次々にお客さんがやってきます。
    あなたの仕事はパンツを仕入れてお客さんに貸すことです。
    あなたは一流のパンツ職人になることができるか?

  • 遊び方
    画面の上段には来店したお客さんが表示され、その下側には希望のレンタル時間が表示されます。
    下段にはパンツの在庫が表示され、その上側にパンツの寿命が表示されます。貸出中のパンツは「RENT」と表示されます。
    所持金100moneyからスタート。パンツの仕入れは-10money、お客さんが最後までパンツをはいていれば+10money、借りることができなかったり途中で脱げてしまった場合は-10moneyです。所持金が無くなったらゲームオーバーです。
    スコアは、お客さんがパンツをはいている時間1秒につき1点加算されます。(4人ともパンツをはいていれば4点/秒が加算されます)
    古くなったパンツはレンタル中に脱げてしまいますので、早めに捨てて新しいパンツに入れ替えておいてください。ただしパンツの仕入れにはお金がかかりますので注意。
    パンツの寿命が早く縮まってしまうお客さんと、そうではないお客さんがいますので、寿命が長めのパンツと古くなったパンツを効率的に貸し出すのがコツです。

  • 操作方法
    ←,→パンツ選択
    パンツ仕入
    パンツ破棄
    1~4パンツ貸し出し

    "←"と"→"のキーでパンツを選び、数字"1"~"4"のキーで該当するお客さんにパンツを貸し出します。
    パンツの無い位置で"↑"キーを押すとパンツを仕入れられます。
    "↓"のキーを押すとその場所にあるパンツを捨てられます。

  • プログラムのしくみ
    プログラムは2つのプログラムから成り、プログラム1は主にプレーヤーの操作、プログラム2は主にパンツの表示を行っています。

    変数表(配列変数)
    [0]~[3]体格
    0=空,1~4=体格,10位=着用パンツ柄,100位=パンツ返却位置
    [4]~[7]希望レンタル時間
    [8]~[11]パンツが脱げる時間
    [12]~[15]パンツ柄
    [16]~[19]パンツ寿命

    プログラム1
    20行キャラクタ定義(プログラム2)
    30行変数初期化
    40~60行パンツ発生
    80行客の表示時間チェック
    90行パンツの寿命チェック
    110行パンツ表示(プログラム2)
    120行所持金チェック
    150~200行キー処理
    220~240行貸出用変数セット

    プログラム2
    20~40行キャラクタ定義
    80~110行客表示
    120~130行パンツ着用
    140行客ゲージ表示
    150~160行在庫表示
    170行パンツゲージ表示
    190行"↑↑↑"表示

  • プログラムの具体的な入力方法
    プログラムリストでは、プログラム1を保存番号0、プログラム2を保存番号1としていますが、別の番号として保存した場合はプログラム中のLRUN命令を保存した番号に変更してください。

  • プログラムの改造
    プログラム1の50行のRND文は、それぞれ客の発生率、体格、レンタル時間を決めています。
    行頭の「if!rnd(20+...」の20の値を小さくすると客の発生率が上がり、大きくすると発生率が下がります。
    IchigoJamPCの場合は、P1-50行の20を10、プログラム1の140行の3を30程度を目安に変更し、プログラム2の120行のs=s+a/19を削除するとちょうど良くなります。

  • パンツショップ(プログラム1)
    10 'PTKT-1
    20 LRUN1
    30 CLV:CLT:P=1:C=100
    40 J=0:FORI=0TO3
    50 IF![I]J=J+1:IF!RND(20+(5-S/40)*(S<200))THEN[I]=RND(3)+(S>200):[4+I]=TICK()+(RND(4)+2)*120:J=0
    60 NEXT:IF4=JCLT
    70 FORI=0TO3
    80 IF[4+I]&&([4+I]100&&[8+I]1P=P-1
    170 IFK=29ANDP<4P=P+1
    180 IFK=30AND![15+P][11+P]=RND(4)+1:[15+P]=(RND(4)+1)*240:C=C-10
    190 IFK=31&&[11+P]>0[11+P]=0:[15+P]=0
    200 IFK<49ORK>52GOTO140
    210 K=K-49:IF![K]OR[K]>9OR[11+P]<0GOTO140
    220 [K]=[K]+[11+P]*10+P*100
    230 [15+P]=[15+P]-([4+K]-TICK())*([K]%10)/4:[11+P]=-1
    240 [8+K]=TICK()+[15+P]
    250 GOTO140
    

    パンツショップ(プログラム2)
    
    10 'PTKT-2
    20 CLP:POKE#EA*8,1,2,3,4:FORI=0TO3:COPY(#E7+I)*8,PEEK(#EA*8+I)*8,8:NEXT
    30 POKE#700,64,64,96,96,80,80,76,67,0,0,0,16,56,56,84,147,4,4,12,12,20,20,100,132,64,64,64,64,64,64,64,64
    40 POKE#720,4,4,4,4,4,4,4,4,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,255:LRUN0,30
    50 CLS:?"MONEY:";C,"SCORE:";S
    60 FORL=0TO3:M=L*8+4:LCM,2:?L+1
    70 IF![L]GOTO150
    80 N=[L]%10:POKE#9A0+M,#E1:POKE#9E0+M,#E5
    90 FORO=1TON:POKE#9A0+M-O,#E6:POKE#9A0+M+O,#E6:NEXT
    100 FORO=0TO4:Q=#960+O*32+M:POKEQ-N,#E3:POKEQ+N,#E4:NEXT
    110 POKE#9A0+M-N,#E0:POKE#9A0+M+N,#E2
    120 Q=[L]/10%10+#E6:IF#E6O?CHR$(132);
    150 M=L*4+2:IF[12+L]<0LCM-1,12:?"RE":LCM,13:?"NT"
    160 IF[12+L]>0FORO=0TO2:N=#E6+[12+L]:POKE#A7F+M+O*32,N,N,N:NEXT:POKE#AC0+M,0
    170 LCL*4+1,11:FORO=0TO[L+16]/288:?CHR$(131);:NEXT:?CHR$(8);:IF(O/2)*2<>O?CHR$(129);
    180 NEXT
    190 M=P*4-2:N=30+([11+P]<0):POKE#ADF+M,N,N,N
    200 LRUN0,120
    


    ブラウザでD/LしてIchigoJamに転送する場合は、通信ソフトでバイナリ送信をしてください。
    (例:TeraTermの場合は、メニューの[ファイル]-[ファイル送信]で当該ファイルを送信します)

  • 参考ゲーム
    ハンバーガーショップ(バンダイ LCDゲーム)
    週間電子ゲームレビュー
    電子ゲームの世界