REM 944BASIC '舗装街道' REM うまいタイトルはないものか・・ LV=1 :REM レベル PNLMN= 500 :REM 罰金 PAYMN= 100 :REM 単価 COLORBG 255,255,160 :REM フィールド背景色 CLS GOSUB *DEFINIT GOSUB *INTRO :REM イントロ *INIT PNL=0 :REM ペナルティ(割った枚数) CNT=0 :REM 枚数カウント MN=0 GOSUB *LEVEL :REM データ読み込み GOSUB *PRFIELD :REM フィールド描画 GOSUB *STAT *LOOP SYNC :REM メインループ WAIT WT XX=(X-OFFX)/2: YY=Y-OFFY IF PADY=-1 THEN GOSUB *UPWARD IF PADY=1 THEN GOSUB *DOWNWARD IF PADX=-1 THEN GOSUB *LEFT IF PADX=1 THEN GOSUB *RIGHT IF PADB THEN GOTO *MNLEVEL IF PADC THEN GOTO *INIT GOTO *LOOP END *UPWARD SYNC :REM 上へ移動 IF Y<=OFFY THEN RETURN IF R(XX,YY-1)=0 THEN RETURN GOSUB *GROUND Y=Y-1 GOSUB *PRMYCHR RETURN *DOWNWARD SYNC :REM 下へ移動 IF Y>=(OFFY+HEIGHT-1) THEN RETURN IF R(XX,YY+1)=0 THEN RETURN GOSUB *GROUND Y=Y+1 GOSUB *PRMYCHR RETURN *RIGHT SYNC :REM 右へ移動 IF X>=(OFFX+WIDTH*2-2) THEN RETURN IF R(XX+1,YY)=0 THEN RETURN GOSUB *GROUND X=X+2 GOSUB *PRMYCHR RETURN *LEFT SYNC :REM 左へ移動 IF X<=OFFX THEN RETURN IF R(XX-1,YY)=0 THEN RETURN GOSUB *GROUND X=X-2 GOSUB *PRMYCHR RETURN *GROUND :REM 地面の描き換え LOCATE X, Y IF R(XX,YY)=2 THEN GOTO *CL ELSE GOTO *DR *CL COLORFG 255,128,64 PRINT CLCHR RETURN *DR COLORFG 80,192,80 PRINT DRCHR RETURN *PRMYCHR :REM 自キャラの表示,終了判定 WAIT WT LOCATE X, Y COLORFG 80, 0, 192 PRINT MYCHR XX=(X-OFFX)/2: YY=Y-OFFY IF R(XX,YY)=1 THEN GOTO *CLTRN ELSE GOTO *DRTRN *CLTRN R(XX,YY)=2 CNT=CNT-1 MN=MN+PAYMN GOTO *BRTRN *DRTRN R(XX,YY)=1 PNL=PNL+1 CNT=CNT+1 MN=MN-PNLMN *BRTRN GOSUB *STAT REM 終了処理 IF CNT<>0 THEN RETURN LOCATE STX,STY+4 MSG="** LEVEL CLEARED! **" MESSAGE MSG LV=LV+1 REM : MESSAGE LV IF LV=11 THEN GOSUB *ENDING PNL=0 CNT=0 GOSUB *DEFINIT GOSUB *LEVEL GOSUB *PRFIELD RETURN *ENDING REM 金額も表示したいが現状では保留 IF MN<-10000 THEN MSG='仕事完了… あぁ…大損害!! ちくしょーーっ!' IF (MN<-1000)*(MN>=-10000) THEN MSG='仕事完了… 噂どおり、あこぎな会社。ひどいっ!!' IF (MN<0)*(MN>=-1000) THEN MSG='仕事完了… 被害は小さかったけど、くやしいっ!' IF MN=0 THEN MSG='仕事完了… ふう…、結局ただ働きだよ。でも、あれだけお金が出入りしてプラスマイナス・ゼロってある意味すごいかも' IF MN>10000 THEN MSG='仕事完了! やったぜ、ぼろもうけっ!' IF (MN>1000)*(MN<=10000) THEN MSG='仕事完了! ふっふっふ、稼ぎは知れてるが、あのあこぎな会社から金を取ったのは気分がいいわい。' IF (MN>0)*(MN<=1000) THEN MSG='仕事完了! ま、赤字にならなかっただけ、よしとするか。でも徒労感が…' MESSAGE MSG:END RETURN *STAT :REM 現在の状態を表示 STY=2+HEIGHT+OFFY LOCATE STX,STY COLORFG 255,64,64 PRINT "PENALTY: "; LOCATE STX+10,STY PRINT PNL LOCATE STX+15,STY COLORFG 64,255,64 PRINT "LEFT: "; LOCATE STX+21,STY PRINT CNT LOCATE STX,STY+1 COLORFG 64,64,255 PRINT "YOU’VE EARNED:   "; LOCATE STX+16,STY+1 PRINT MN; PRINT " YEN" RETURN *PRFIELD :REM フィールド画面の描画 IF FSIZ=1 THEN FONT 96 ELSE FONT 64 CLS HEADER '舗装街道' LOCATE OFFX-2,OFFY-1 COLORFG 0,0,0 FOR I=1 TO WIDTH+2 PRINT FRCHR; NEXT I FOR I=OFFY TO HEIGHT-1+OFFY LOCATE OFFX-2,I COLORFG 0,0,0 PRINT FRCHR; LOCATE OFFX,I FOR J=0 TO WIDTH-1 YY=I-OFFY IF R(J,YY)=0 THEN COLORFG 80,80,80: PRINT OBCHR; IF R(J,YY)=1 THEN COLORFG 80,192,80: CNT=CNT+1:PRINT DRCHR; REM IF R(J,YY)=2 THEN COLORFG 255,128,64: CNT=CNT+1:PRINT CLCHR; IF R(J,YY)=9 THEN X=J*2+OFFX:Y=I:R(J,YY)=2:COLORFG 80,0,192:PRINT MYCHR; NEXT J COLORFG 0,0,0 PRINT FRCHR NEXT I LOCATE OFFX-2,HEIGHT+OFFY COLORFG 0,0,0 FOR I=1 TO WIDTH+2 PRINT FRCHR; NEXT I MESSAGE MSG GOSUB *STAT RETURN *INTRO HEADER '舗装街道' LOCATE 0,3 PRINT ' この不況下、仕事もなく一文なしの' PRINT ' あなたは、あこぎな罰金をとることで' PRINT ' 悪名高い舗装会社で働くことにした…' PRINT '        - - -' PRINT ' 10箇所の現場でうまく仕事をこなして' PRINT ' 少しでも多くお金を稼いでください。' PRINT ' ' PRINT ' スクロールキーで '; PRINT MYCHR; PRINT ' を操作して、' PRINT ' 荒れ地 '; PRINT DRCHR; PRINT ' を舗装し尽くすのが仕事です。' PRINT ' ' PRINT ' 1ブロック舗装すると'; PRINT PAYMN; PRINT ' 円の稼ぎに' PRINT ' なります。' PRINT ' ' PRINT ' しかし、舗装した道 '; PRINT CLCHR; PRINT ' の上を通ると' PRINT ' せっかくの舗装がチャラになってしまう' PRINT ' ばかりか '; PRINT PNLMN; PRINT ' 円もの罰金です。' PRINT ' (材料費や手間賃がかさむからだそうです)' PRINT ' ' PRINT ' ' PRINT ' では、がんばって稼いでください!' PRINT ' ' PRINT ' ' PRINT " 決定ボタンを押すと、ゲームを開始します" *INTROLOOP SYNC IF PADA THEN CLS: RETURN IF PADB THEN GOTO *MNLEVEL GOTO *INTROLOOP RETURN *MNLEVEL GOSUB *DEFINIT LOCATE 18,8 DIM M(9)='LV 1','LV 2','LV 3','LV 4','LV 5','LV 6','LV 7','LV 8','LV 9','LV10' KEYWAIT MENU M,10,1 LV=MENUNO+1 REM んーGOSUB-RETURNではうまく流れん GOTO *INIT REM RETURN *DEFINIT MYCHR="ェ" :REM 自キャラ DRCHR="" :REM 未舗装地 CLCHR="" :REM 舗装地 OBCHR="" :REM 障害物 FRCHR="" :REM 外枠 WT=1 :REM ウェイト OFFX=6 :REM 右へずらす桁数 OFFY=3 :REM 下へずらす桁数 WIDTH =12 :REM フィールドの横幅 HEIGHT=12 :REM フィールドの縦幅 STX=4 :REM ステータス表示桁(X) MSG="まったく、罰金が高すぎるよ" FSIZ=0 :REM フォントサイズ0=64,1=96 RETURN *LEVEL REM レベルデータ REM 0 - 障害物 REM 1 - 未舗装道路 REM 9 - 自キャラ REM 今のところ配列を再定義することは REM できないようなので、固定値で大き REM めに確保しておく DIM R(18,18) REM SWITH CASE 相当のコマンドが実装 REM されるか、GOTOで変数を使えるよう REM になったら変更 IF LV=1 THEN GOTO *1 IF LV=2 THEN GOTO *2 IF LV=3 THEN GOTO *3 IF LV=4 THEN GOTO *4 IF LV=5 THEN GOTO *5 IF LV=6 THEN GOTO *6 IF LV=7 THEN GOTO *7 IF LV=8 THEN GOTO *8 IF LV=9 THEN GOTO *9 IF LV=10 THEN GOTO *10 *1 FSIZ=1 WIDTH=7 HEIGHT=5 OFFX=8 OFFY=4 MSG='これは楽ちん。(0)' REM 配列を再定義できるようになったら REM それに合わせて変更 REM REDIM R(WIDTH-1,HEIGHT-1) R(0, 0)=1,1,1,0,1,1,1 R(0, 1)=1,0,1,0,1,0,1 R(0, 2)=1,0,1,1,1,0,1 R(0, 3)=1,0,0,1,0,0,1 R(0, 4)=1,1,1,1,9,1,1 RETURN *2 WIDTH=7 HEIGHT=7 OFFX=8 OFFY=4 MSG="多少の罰金はやむを得ないか…(3)" FSIZ=1 R(0, 0)=1,1,1,1,1,1,1 R(0, 1)=1,0,0,1,0,0,1 R(0, 2)=1,0,1,1,1,0,1 R(0, 3)=1,0,1,0,1,0,1 R(0, 4)=1,0,1,1,1,0,1 R(0, 5)=1,0,0,1,0,0,1 R(0, 6)=1,1,9,1,1,1,1 RETURN *3 WIDTH=8 HEIGHT=9 OFFX=6 OFFY=4 MSG="罰金は5回ですみそうだ(5)" FSIZ=1 R(0, 0)=1,1,1,0,1,1,1,1 R(0, 1)=1,0,1,0,1,0,0,1 R(0, 2)=1,0,1,0,1,0,0,1 R(0, 3)=1,0,9,1,1,1,1,1 R(0, 4)=1,1,1,0,1,0,0,1 R(0, 5)=0,0,0,0,1,1,1,1 R(0, 6)=1,1,1,1,1,0,0,1 R(0, 7)=1,0,0,0,0,0,0,1 R(0, 8)=1,1,1,1,1,1,1,1 RETURN *4 WIDTH=7 HEIGHT=8 OFFX=8 OFFY=6 MSG="赤字はまぬがれないか…(12?)" FSIZ=1 R(0, 0)=1,0,1,0,1,0,1 R(0, 1)=1,1,1,1,1,1,1 R(0, 2)=1,0,1,0,1,0,1 R(0, 3)=1,1,1,1,1,1,1 R(0, 4)=1,0,1,0,1,0,1 R(0, 5)=1,1,1,1,1,1,1 R(0, 6)=1,0,1,0,1,0,1 R(0, 7)=1,1,1,1,1,1,9 RETURN *5 WIDTH=8 HEIGHT=8 OFFX=6 OFFY=6 MSG="ここはノーミスでクリアしたい(0)" FSIZ=1 R(0, 0)=0,1,1,1,1,1,1,0 R(0, 1)=1,1,1,1,1,1,1,1 R(0, 2)=1,1,1,1,1,1,1,1 R(0, 3)=1,1,1,9,0,1,1,1 R(0, 4)=1,1,1,0,1,1,1,1 R(0, 5)=1,1,1,0,1,1,1,1 R(0, 6)=1,1,1,1,1,1,1,1 R(0, 7)=0,1,1,1,1,1,1,0 RETURN *6 WIDTH=13 HEIGHT=8 OFFX=6 OFFY=8 MSG="広いなあ。でも稼ぎになるの?(9)" R(0, 0)=1,1,1,0,1,1,1,1,1,1,1,1,1 R(0, 1)=1,0,1,1,1,0,0,1,0,0,1,0,1 R(0, 2)=1,1,1,0,1,1,1,1,1,0,1,1,1 R(0, 3)=0,0,1,1,1,0,1,0,1,1,0,1,0 R(0, 4)=1,1,1,0,0,0,9,0,0,1,1,1,0 R(0, 5)=1,0,1,1,1,1,1,1,1,1,0,1,1 R(0, 6)=1,0,1,0,1,0,1,0,0,1,0,0,1 R(0, 7)=1,1,1,1,1,0,1,1,1,1,1,1,1 RETURN *7 WIDTH=8 HEIGHT=9 OFFX=7 OFFY=4 MSG="この手のは意外に罰金がかかる(?)" FSIZ=1 R(0, 0)=1,1,1,0,1,1,1,0 R(0, 1)=1,0,0,1,1,0,0,1 R(0, 2)=1,0,0,1,1,0,0,1 R(0, 3)=1,0,0,1,1,0,0,1 R(0, 4)=1,1,1,9,1,1,1,1 R(0, 5)=1,1,1,0,0,1,1,1 R(0, 6)=1,0,1,1,1,1,0,1 R(0, 7)=1,1,0,0,0,0,1,1 R(0, 8)=1,1,1,1,1,1,1,1 RETURN *8 WIDTH=17 HEIGHT=9 OFFX=3 OFFY=8 MSG="昔は、倉庫で働いてたっけ…(8)" R(0, 0)=0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0 R(0, 1)=0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0 R(0, 2)=0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0 R(0, 3)=0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0 R(0, 4)=0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0 R(0, 5)=1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,1,1 R(0, 6)=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 R(0, 7)=0,0,0,0,1,0,0,0,1,0,9,0,0,1,1,1,1 R(0, 8)=0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0 RETURN *9 WIDTH=10 HEIGHT=10 OFFX=5 OFFY=4 MSG="いいかげん罰金にはうんざり(6?)" FSIZ=1 R(0, 0)=1,1,1,1,0,0,1,1,1,1 R(0, 1)=1,0,0,1,1,1,1,0,0,1 R(0, 2)=1,0,0,1,0,0,1,0,0,1 R(0, 3)=1,1,1,1,1,1,1,1,1,1 R(0, 4)=0,1,0,1,0,0,1,0,1,0 R(0, 5)=0,1,0,1,0,0,1,0,1,0 R(0, 6)=1,1,1,1,1,1,1,1,1,1 R(0, 7)=1,0,0,1,0,0,9,0,0,1 R(0, 8)=1,0,0,1,1,1,1,0,0,1 R(0, 9)=1,1,1,1,0,0,1,1,1,1 RETURN *10 WIDTH=17 HEIGHT=17 MSG="どこかで見たような…(?)" REM 変数がグローバルなのを悪用して REM キャラの絵文字を書き換えている DRCHR="・" OBCHR="" FSIZ=0 OFFX=3 OFFY=3 R(0, 0)=1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1 R(0, 1)=1,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1 R(0, 2)=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 R(0, 3)=1,0,0,1,0,1,0,0,0,0,0,1,0,1,0,0,1 R(0, 4)=1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,1 R(0, 5)=0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0 R(0, 6)=0,0,0,1,0,1,1,1,1,1,1,1,0,1,0,0,0 R(0, 7)=1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1 R(0, 8)=0,0,0,1,0,1,1,1,1,1,1,1,0,1,0,0,0 R(0, 9)=0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0 R(0,10)=1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1 R(0,11)=1,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1 R(0,12)=1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1 R(0,13)=0,1,0,1,0,1,0,0,0,0,0,1,0,9,0,1,0 R(0,14)=1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,1 R(0,15)=1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1 R(0,16)=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 RETURN