迷路を使ったゲームのひな型になるのが、このサンプルプログラムだ。
起動後、迷路データの読み込みの確認があるが、最初は迷路を作成するY(Enter)を選んでおけばいいだろう。
こうして作られた迷路内は十字ボタンで移動できる。Aボタンで周囲を明るくすることもできるぞ。
このプログラム自体は特にゲームとしての目的はないので、プログラムの参考にするもよし、追加要素を加えてゲームにするのもいいだろう。
GSPOIT
命令で点の色を読み取って、実際の迷路に反映しとるわけじゃ。ゲーム中でもカベにぶつかったかの判定にこのグラフィック面を使っておって、カンタンに当たり判定のかわりにしておるのう。╂
」と「┿
」とキャラクターで書くことで表現しているんじゃな。
- ’┌──────────┐
- ’│タ゛ンシ゛ョンメイロ│
- ’│ v1.0 │
- ’└──────────┘
- CLEAR
- VISIBLE 1,1,0,0,0,0
- CLS:COLOR 0
- SPPAGE 0:SPCLR
- BGPAGE 0:PG=1:PR=1
- BGOFS 0,0,0
- BGOFS 1,0,0
- ’---
- OMAX=8
- DIM V(4,2),W(2,5),M$(3)
- DIM O(OMAX,4),B$(9)
- DATA 1,0,0,1,-1,0,0,-1
- FOR I=0 TO 3
- READ V(I,0),V(I,1)
- NEXT
- DATA 9,&H2D1,&H2D2,&H2F1,&H2F2
- DATA 9,&H020,&H021,&H021,&H020
- FOR I=0 TO 1
- FOR J=0 TO 4
- READ W(I,J)
- NEXT
- NEXT
- DATA ”┌”,”─”,”┐”
- DATA ”│”,” ”,”│”
- DATA ”└”,”─”,”┘”
- FOR I=0 TO 8
- READ B$(I)
- NEXT
- M$(0)=”┿”
- M$(1)=”╂”
- M$(2)=” ”
- ’---
- X=6:Y=10:SX=19:SY=3
- OX=5:OY=1:T$=”initialize”
- GOSUB @PUTBOX
- ’---BGショキカ
- FOR P=1 TO 0 STEP -1
- BGPAGE P
- FOR Y=0 TO 63
- FOR X=0 TO 63
- BGPUT 0,X,Y,0,0,0,0
- BGPUT 1,X,Y,0,0,0,0
- NEXT
- NEXT
- NEXT
- ’---
- PCG=0
- N=13:GOSUB @DEFSYS
- N=14:GOSUB @DEFSYS
- N=57:GOSUB @DEFSYS
- N=59:GOSUB @DEFSYS
- N=60:GOSUB @DEFSYS
- N=224:GOSUB @DEFSYS
- N=225:GOSUB @DEFSYS
- N=226:GOSUB @DEFSYS
- N=231:GOSUB @DEFSYS
- ’---
- @START
- FLOW=-1:REQ=1
- ’---
- @MLOOP
- OLDB=B:B=BUTTON()
- IF FLOW==REQ GOTO @MSKIP
- FLOW=REQ:B=0:OLDB=0
- ON FLOW GOSUB @GI,@TI
- @MSKIP
- ON FLOW GOSUB @GM,@TM
- VSYNC 1
- GOTO @MLOOP
- ’---
- @PUTBOX
- OX=OX+X:OY=OY+Y
- N=0:GOSUB @PUTLINE
- FOR J=0 TO SY-3
- N=3:GOSUB @PUTLINE
- NEXT
- N=6:GOSUB @PUTLINE
- LOCATE OX,OY:PRINT T$
- RETURN
- ’---
- @PUTLINE
- LOCATE X,Y
- PRINT B$(N);
- N=N+1
- FOR I=0 TO SX-2
- PRINT B$(N);
- NEXT
- PRINT B$(N+1);
- Y=Y+1
- RETURN
- ’┌───────┐
- ’│メイロサクセイ│
- ’└───────┘
- @MAZE
- GP=1:GPAGE GP:GCLS 0
- ’---
- CM=4
- CK=12
- CD=11
- C1=13
- C2=14
- ’---
- INPUT”Ж「メイロヲ、セイセイシマスカ」(Y/N)”;K$
- IF K$!=”Y” GOTO @MLOAD
- ’---アタラシクツクル
- @MNEW
- PRINT”Ж「メイロヲツクリマス」”
- INPUT”Ж「ヨコサイス゛」(16―256)”;MX
- INPUT”Ж「タテサイス゛」(12―192)”;MY
- IF MX<16 THEN MX=16
- IF MX>256 THEN MX=256
- IF MY<12 THEN MY=12
- IF MY>192 THEN MY=192
- ’---サイス゛ヲ3ケタス゛ツノモシ゛レツニヘンカン
- K$=”0”+STR$(MX):L=LEN(K$)
- MEM$=MID$(K$,L-3,3)
- K$=”0”+STR$(MY):L=LEN(K$)
- MEM$=MEM$+MID$(K$,L-3,3)
- ’---ホソ゛ンシテオク
- PRINT”Ж「チョットマッテテネ」”
- GOSUB @MKMZ
- PRINT”Ж「メイロヲホソ゛ンシマス」”
- SAVE”GRP1:MAP”
- SAVE”MEM:MAP”
- RETURN
- ’---カコノマッフ゜ヲヨミコム
- @MLOAD
- ’INPUT”Ж「メイロヲ、ヨミコミマスカ」(Y/N)”;K$
- ’IF K$!=”Y” THEN RETURN
- PRINT”Ж「メイロヲヨミコミマス」”
- LOAD”GRP1:MAP”,FALSE
- IF RESULT!=TRUE GOTO @MNEW
- LOAD”MEM:MAP”,FALSE
- IF RESULT!=TRUE GOTO @MNEW
- MX=VAL(MID$(MEM$,0,3))
- MY=VAL(MID$(MEM$,3,3))
- RETURN
- ’---オフ゛シ゛ェクトノハイチ
- @OBJSET
- ’PRINT”SIZE:”;MX;”,”;MY
- ’PRINT”Ж「イヘ゛ントヲハイチシマス」”
- IX=0
- ’--- カキ゛
- C=CK:SC=2:N=15
- GOSUB @SETPOS
- ’---
- C=CD:SC=2:N=31
- GOSUB @SETPOS
- ’---
- C=C1:SC=2:N=30
- GOSUB @SETPOS
- ’---
- C=C2:SC=2:N=63
- GOSUB @SETPOS
- ’---
- OBJSP=SP-16
- RETURN
- ’---セットイチヲカクニン
- @SETPOS
- X=RND(254)+1
- Y=RND(190)+1
- IF GSPOIT(X,Y)!=CM GOTO @SETPOS
- ’---
- GPSET X,Y,C
- O(IX,_X)=X*16+7
- O(IX,_Y)=Y*16+7
- O(IX,_N)=N
- O(IX,_S)=SC
- SPSET SP,N,SC,0,0,0
- SP=SP+1
- IX=IX+1
- RETURN
- ’┌────┐
- ’│ケ゛-ム│
- ’└────┘
- @GI
- CLS
- VISIBLE 1,1,0,0,0,0
- BGPAGE 0
- DX=26:DY=22
- BGCLIP 1,1,DX,DY
- ’---
- GOSUB @MAZE
- ’---
- _X=0:_Y=1:_N=2:_S=3
- SP=16
- GOSUB @OBJSET
- CLS
- GPAGE 0:GCLS 0
- ’---
- N=ASC(”В”)
- FOR X=0 TO 255 STEP 8
- GPUTCHR X,0,”BGF”,N,14,1
- GPUTCHR X,23*8,”BGF”,N,14,1
- NEXT
- FOR Y=1*8 TO 22*8 STEP 8
- GPUTCHR 0,Y,”BGF”,N,14,1
- GPUTCHR 27*8,Y,”BGF”,N,14,1
- FOR X=28*8 TO 31*8 STEP 8
- GPUTCHR X,Y,”BGF”,N,14,1
- NEXT
- NEXT
- GPAGE GP
- ’---
- LS=3
- GOSUB @PUTMASK
- ’---
- OX=-5:OY=-4
- WX=OX*16-8:WY=OY*16-8
- VX=0:VY=0:VS=0
- BGOFS PG,WX,WY
- GOSUB @PUTBG
- ’---
- SPPAGE 1:SPCLR
- SPPAGE 0
- ’---PLAYER
- SPSET 0,128,2,0,0,PR
- SPOFS 0,13*8,11*8-8
- SPANIM 0,2,8,0
- SPSET 1,15,2,0,0,PR
- SPOFS 1,13*8,11*8
- ’---GOLD
- SPSET SP,13,3,0,0,PR
- SPOFS SP,28*8+2,1*8
- LOCATE 28,3:PRINT”000”
- SP=SP+1
- ’---KEY
- SPSET SP,14,3,0,0,PR
- SPOFS SP,28*8+2,5*8
- LOCATE 28,7:PRINT”000”
- SP=SP+1
- ’---
- KM=0:KW=0
- LOCATE 1,23:PRINT”Й:”;
- VISIBLE 1,1,0,1,1,1
- ’PNLTYPE ”OFF”
- RETURN
- ’┌───────┐
- ’│ケ゛-ムメイン│
- ’└───────┘
- @GM
- LOCATE 3+KM,23
- K$=”■”:IF KW>16 THEN K$=” ”
- PRINT K$;
- KW=KW+1:KW=KW AND 31
- ’---
- K$=INKEY$()
- IF K$==”” GOTO @KSKIP
- K=ASC(K$)
- IF K<ASC(” ”) GOTO @KSKIP
- IF K>ASC(”Z”) GOTO @KSKIP
- ’---
- IF KM<16 GOTO @KPUT
- LOCATE 3,23
- PRINT” ”;
- KM=0
- @KPUT
- LOCATE 3+KM,23
- PRINT K$;
- KM=KM+1
- ’---
- @KSKIP
- GOSUB @CTRL
- GOSUB @SCRL
- GOSUB @OBJECT
- RETURN
- ’┌────────┐
- ’│オフ゛シ゛ェクト│
- ’└────────┘
- @OBJECT
- FOR IX=0 TO OBJSP-1
- X=O(IX,_X)-WX-7
- Y=O(IX,_Y)-WY-7
- SPOFS IX+16,X,Y
- NEXT
- RETURN
- ’┌─────┐
- ’│スクロ-ル│
- ’└─────┘
- @SCRL
- IF VS==0 THEN RETURN
- ’---
- ST=2
- VS=VS-ST
- WX=WX+VX*ST
- WY=WY+VY*ST
- BGOFS PG,WX,WY
- RETURN
- ’┌───┐
- ’│ソウサ│
- ’└───┘
- @CTRL
- IF VS!=0 THEN RETURN
- ’---
- ’IF OLDB!=0 GOTO @LSKIP
- IF B!=16 GOTO @LSKIP
- LS=LS+1:IF LS>18 THEN LS=3
- GOSUB @PUTMASK
- @LSKIP
- ’---
- D=-1:VS=0
- IF B AND 1 THEN D=3:BX=0:BY=0
- IF B AND 2 THEN D=1:BX=0:BY=11
- IF B AND 4 THEN D=2:BX=0:BY=0
- IF B AND 8 THEN D=0:BX=15:BY=0
- IF D==-1 THEN RETURN
- ’---ススムシ゛ュンヒ゛
- SPCHR 0,128+D*2
- VX=V(D,0):VY=V(D,1)
- ’---ススメルカ?
- X=OX+VX+5+1
- Y=OY+VY+4+1
- N=GSPOIT(X,Y)
- IF N==-1 THEN RETURN
- IF N==0 THEN RETURN
- ’---ホウコウコ゛トニヒョウシ゛
- VS=16
- IF D==1 OR D==3 GOTO @MV_V
- ’---
- OX=OX+VX
- FOR BY=0 TO 31
- GOSUB @PUTBLK
- NEXT
- RETURN
- ’---
- @MV_V
- OY=OY+VY
- FOR BX=0 TO 31
- GOSUB @PUTBLK
- NEXT
- RETURN
- ’┌─────────┐
- ’│ライトヒョウケ゛ン│
- ’└─────────┘
- @PUTMASK
- ’---ク゛ラフィックニカク
- GPAGE 0
- O=64
- GFILL 8,8,8+DX*8-1,8+DY*8-1,0
- X=FLOOR(DX/2)-1
- Y=FLOOR(DY/2)-1
- L=LS
- GCIRCLE O+X,O+Y,L,1
- IF LS<8 GOTO @PMSKIP
- GCIRCLE O+X,O+Y,L-1,1
- L=L-1
- @PMSKIP
- GCIRCLE O+X,O+Y,L-1,2
- GPAINT O+X,O+Y,2
- ’---ク゛ラフィックカラセイセイ
- COLOR 1
- FOR Y=0 TO DY-1
- FOR X=0 TO DX-1
- C=GSPOIT(O+X,O+Y)
- LOCATE X+1,Y+1
- PRINT M$(C)
- NEXT
- NEXT
- COLOR 0
- GPAGE GP
- RETURN
- ’┌────────┐
- ’│BGノヒョウシ゛│
- ’└────────┘
- @PUTBG
- FOR BY=0 TO 15
- FOR BX=0 TO 15
- GOSUB @PUTBLK
- NEXT
- NEXT
- RETURN
- ’┌──────────────┐
- ’│2x2フ゛ロックノヒョウシ゛│
- ’└──────────────┘
- @PUTBLK
- X=BX+OX
- Y=BY+OY
- ’---カヘ゛
- N=0:C=15
- IF X<0 OR Y<0 GOTO @PBSKIP
- IF X>=MX OR Y>=MY GOTO @PBSKIP
- ’---
- G=GSPOIT(X,Y):C=9:N=1
- IF G==0 THEN N=0
- ’---
- @PBSKIP
- X=X*2:Y=Y*2
- X=X AND 63:Y=Y AND 63
- BGPUT PG,X,Y,W(N,1),C,0,0
- BGPUT PG,(X+1) AND 63,Y,W(N,2),C,0,0
- Y=Y+1:Y=Y AND 63
- BGPUT PG,X,Y,W(N,3),C,0,0
- BGPUT PG,(X+1) AND 63,Y,W(N,4),C,0,0
- RETURN
- ’┌───────┐
- ’│メイロサクセイ│
- ’└───────┘
- @MKMZ
- TX=1:TY=1
- GPSET TX,TY,CM
- PC=0:PR=100/(MX*MY)
- PRINT ”Р”;TIME$
- LY=CSRY
- ’---
- @LOOP
- X=TX:Y=TY
- LOCATE 0,LY
- PRINT PC;”% ”
- V=RND(2)
- IF V==0 THEN V=-1
- ’---
- @MOVELOOP
- D=RND(4)
- C=4:PX=X:PY=Y
- ’---
- @DIRLOOP
- X=PX+V(D,0)
- Y=PY+V(D,1)
- IF X<1 OR X>MX-2 GOTO @DIRNEXT
- IF Y<1 OR Y>MY-2 GOTO @DIRNEXT
- ’---サユウ
- _X=X:_Y=Y
- O=1:GOSUB @WALL
- IF R GOTO @DIRNEXT
- O=-1:GOSUB @WALL
- IF R GOTO @DIRNEXT
- ’---マエ
- O=0:GOSUB @WALL
- IF R GOTO @DIRNEXT
- ’---マエノサユウ
- X=CX:Y=CY
- O=1:GOSUB @WALL
- IF R GOTO @DIRNEXT
- O=-1:GOSUB @WALL
- IF R GOTO @DIRNEXT
- ’---
- X=_X:Y=_Y
- GPSET X,Y,CM
- GOTO @MOVELOOP
- ’---
- @DIRNEXT
- C=C-1:IF C==0 GOTO @POSNEW
- D=D+V:D=D AND 3
- GOTO @DIRLOOP
- ’---
- @POSNEW
- PC=PC+PR
- TX=TX+1
- IF TX<MX-2 GOTO @POSCHK
- TX=1:TY=TY+1
- IF TY==MY-1 GOTO @POSEND
- @POSCHK
- CX=TX:CY=TY:GOSUB @WALL2
- IF R==FALSE GOTO @POSNEW
- GOTO @LOOP
- ’---
- @POSEND
- PRINT ”Р”;TIME$
- RETURN
- ’---
- @WALL
- I=D+O:I=I AND 3
- CX=X+V(I,0):CY=Y+V(I,1)
- ’---
- @WALL2
- R=FALSE
- IF CX<1 OR CX>MX-2 THEN RETURN
- IF CY<1 OR CY>MY-2 THEN RETURN
- IF GSPOIT(CX,CY)==0 THEN RETURN
- R=TRUE
- RETURN
- ’┌────┐
- ’│タイトル│
- ’└────┘
- @TI
- VISIBLE 1,1,0,0,0,1
- CLS:GPAGE 0:GCLS 0
- BGMSTOP
- LOCATE 0,6
- PRINT” й й й й й й йй”
- PRINT” и и и и зи зи з”
- PRINT” и и и и зи зи ┓ з”
- PRINT” ий ий и и зи зи ййз”
- PRINT” и зи ижзиж иж з”
- PRINT” и зи и зи и ━ з”
- PRINT” и зи и зи и з”
- PRINT” ж ж ж ж жж”
- LOCATE 8,17
- PRINT”PUSH ANY BUTTON”
- LOCATE 3,22
- PRINT”(C)2011 SmileBoom Co.Ltd.”
- ’---
- _X=0:_Y=1:_R=2:_W=3
- ’---
- FOR I=0 TO OMAX-1
- GOSUB @MKRING
- NEXT
- RETURN
- ’---
- @MKRING
- O(I,_X)=RND(200)+24
- O(I,_Y)=RND(150)+20
- O(I,_R)=0
- O(I,_W)=RND(60)
- RETURN
- ’---
- @TM
- FOR I=0 TO OMAX-1
- ’---
- IF O(I,_W)==0 GOTO @WDMOVE
- O(I,_W)=O(I,_W)-1
- GOTO @WDNEXT
- ’---
- @WDMOVE
- X=O(I,_X):Y=O(I,_Y)
- R=O(I,_R)
- GCIRCLE X,Y,R,0
- R=R+4
- IF R<100 GOTO @WDSKIP
- GOSUB @MKRING
- GOTO @WDNEXT
- ’---
- @WDSKIP
- O(I,_R)=R
- GCIRCLE X,Y,R,5
- ’---
- @WDNEXT
- ’---
- NEXT
- ’---
- GOSUB @ANYBUT
- IF R==FALSE THEN RETURN
- ’---
- REQ=0
- RETURN
- ’
- @ANYBUT
- R=FALSE
- IF OLDB THEN RETURN
- IF B==0 THEN RETURN
- R=TRUE
- RETURN
- ’┌───────────────┐
- ’│システムスフ゜ライトノテイキ゛│
- ’└───────────────┘
- @DEFSYS
- SPPAGE 0
- N=N*4
- B=FLOOR(N/256)
- N=N AND 255
- K$=”SPU”+STR$(B)
- CHRREAD(K$,N),C1$
- CHRREAD(K$,N+1),C2$
- CHRREAD(K$,N+2),C3$
- CHRREAD(K$,N+3),C4$
- SPPAGE 1
- CHRSET ”SPS0”,PCG,C1$
- CHRSET ”SPS0”,PCG+1,C2$
- CHRSET ”SPS0”,PCG+2,C3$
- CHRSET ”SPS0”,PCG+3,C4$
- PCG=PCG+4
- SPPAGE 0
- RETURN