SHIROのIchigoJam日記

マイコン「IchigoJam」(イチゴジャム)の電子工作とプログラミングをメインに

なんちゃって3D迷路 デモ版

3D迷路ゲーム「なんちゃって3D迷路」のデモバージョンです。自動でプレイするので、キー操作はできません。見るだけです。
いわゆる「左手法」で、遠回りしながらゴールまで進みます。
ゴールに着くと、新しい迷路を作って再スタートします。
プログラムは3分割なので、スロット0〜2など連続した3スロットに保存して、LRUN0などで実行してください。

※8/15修正

  • マップ表示を一般的なLCを使う方法に変更。多少古いファームウェアでも動作します。

【スロット0】(迷路作成、ゲームプレイ)

1 '*3D-MAZE DEMO*
2 CLV:G=FILE()+1:[0]=9:FORX=1TO8:[X]=1:NEXT:[9]=3
3 FORY=1TO8:[Y*10]=8:[Y*10+9]=2:NEXT
4 [90]=12:FORX=1TO8:[90+X]=4:NEXT:[99]=6
5 FORY=0TO8:FORX=0TO8
6 D=RND(4):IFD=0ANDY>0GOTO6
7 Z=X+Y*10
8 IFD=0GOSUB24
9 IFD=1GOSUB25:IFD=-1GOTO6
10 IFD=2GOSUB27:IFD=-1GOTO6
11 IFD=3GOSUB29:IFD=-1GOTO6
12 NEXT:NEXT
13 P=0:Q=0:D=1:CLT:BEEP20:H=14:LRUNG+1
14 BEEP20:H=15:LRUNG
15 IFRND(10)<1BEEP20:H=16:LRUNG+1
16 N=[P+Q*10]
17 C=D-2:IFC<0C=C+4
18 C=C+1:IFC>3C=C-4
19 IF(N>>C)%2GOTO18
20 IFC<>DBEEP20:D=C:H=21:LRUNG
21 BEEP20:D=C:P=P-(D=3)+(D=1):Q=Q-(D=0)+(D=2):H=22:LRUNG
22 IFP<>9ORQ<>9GOTO15
23 BEEP20,30:LC4,10:?"*** GOAL! ***":RUN
24 [Z]=[Z]+2:[Z+1]=[Z+1]+8:RETURN
25 IF([Z+1]&4)>0D=-1:RETURN
26 [Z+1]=[Z+1]+4:[Z+11]=[Z+11]+1:RETURN
27 IF([Z+10]&2)>0D=-1:RETURN
28 [Z+10]=[Z+10]+2:[Z+11]=[Z+11]+8:RETURN
29 IF([Z]&4)>0D=-1:RETURN
30 [Z]=[Z]+4:[Z+10]=[Z+10]+1:RETURN

【スロット1】(3Dビュー)

1 CLS:U=P:V=Q:E=10:F=8:GOSUB6:IF!FGOTO5
2 E=7:F=5:GOSUB12:GOSUB14
3 U=U-(D=3)+(D=1):V=V-(D=0)+(D=2):E=4:F=2:GOSUB6:IF!FGOTO5
4 LC9,9:?CHR$(#89,0,#86):LC10,10:?CHR$(1):LC9,11:?CHR$(#86,0,#89)
5 LC22,0:?"X,Y=";P;",";Q:LC22,2:?"TIME=";TICK()/60:WAIT60:LRUNFILE()-1,H
6 N=[U+V*10]:S=(N>>D)%2:L=D-1:IFL<0L=L+4
7 IF(N>>L)%2THENGOSUB12 ELSEGOSUB16
8 R=D+1:IFR>3R=R-4
9 IF(N>>R)%2THENGOSUB14 ELSEGOSUB19
10 IFSGOSUB22:F=0
11 RETURN
12 IFSGOSUB23
13 FORX=10-ETO10-F:GOSUB25:NEXT:RETURN
14 IFSGOSUB24
15 FORX=10+FTO10+E:GOSUB25:NEXT:RETURN
16 IF!SGOSUB23
17 FORX=10-ETO10-F:GOSUB26:NEXT:IFP=UANDQ=VRETURN
18 FORY=10-ETO10+E:LC10-E,Y:?CHR$(#85):NEXT:RETURN
19 IF!SGOSUB24
20 FORX=10+FTO10+E:GOSUB26:NEXT:IFP=UANDQ=VRETURN
21 FORY=10-ETO10+E:LC10+E,Y:?CHR$(#8A):NEXT:RETURN
22 FORX=11-FTO9+F:GOSUB26:NEXT:RETURN
23 FORY=10-FTO10+F:LC10-F,Y:?CHR$(#8A):NEXT:RETURN
24 FORY=10-FTO10+F:LC10+F,Y:?CHR$(#85):NEXT:RETURN
25 LCX,X:?CHR$(#89):LCX,20-X:?CHR$(#86):RETURN
26 LCX,10-F:?CHR$(#8C):LCX,10+F:?CHR$(#83):RETURN

【スロット2】(マップ表示)

1 CLS
2 ?CHR$(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)
3 FOR Y=1 TO 17 STEP 2
4 ?CHR$(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1)
5 ?CHR$(1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1)
6 NEXT
7 ?CHR$(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1)
8 ?CHR$(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)
9 FOR Y=0 TO 9
10 FOR X=0 TO 9
11 N=[X+Y*10]/2
12 U=X*2+1
13 V=Y*2+1
14 IF N%2 LC U+1,V:?CHR$(1)
15 N=N/2
16 IF N%2 LC U,V+1:?CHR$(1)
17 NEXT
18 NEXT
19 IF D=0 C=#E2
20 IF D=1 C=#E1
21 IF D=2 C=#E3
22 IF D=3 C=#E0
23 LC P*2+1,Q*2+1:?CHR$(C)
24 LC 19,19:?"G"
25 LC 22,0:?"X,Y=";P;",";Q
26 LC 22,2:?"TIME=";TICK()/60
27 WAIT180
28 LRUNFILE()-2,H