先日発売された「IchigoCake BASIC」
hello002.stores.jp
を使って、3D迷路ゲームを作ってみました。
以前作った3D迷路の移植・拡張です。
2画面で遊ぶと、NINTENDO 3dsで遊んでいる気分になります(^_^)
遊び方
- プログラム実行後に数秒待つと、Cake画面に迷路の3Dビュー、Jam画面に迷路のマップが表示されます。マップの左上からスタートして、右下のゴール「G」を目指してください。
- 移動操作は、カーソルキー↑=前進、←=左を向く、→=右を向く、↓=後ろを向く、です。
- マップは、自分が一度歩いた場所しか表示されません。まずは歩き回って迷路を探索しましょう。
- ゴールした後は、何かキーを押すとリプレイします。やめる時はESCキーでプログラムを止めてください。
プログラム
コード容量が4Kバイトに増えたお陰でプログラムが1スロットに収まり、配列変数の個数が増えたので迷路エリアが1.5倍になりました。
※4/17修正:「UART 0」を指定して、PCコマンドのエラーを解決
1 '*3D-Maze CK 2 CLV:UART 0:VIDEO 0 3 [0]=9:FOR X=1 TO 13:[X]=1:NEXT:[14]=3 4 FOR Y=1 TO 9:[Y*15]=8:[Y*15+14]=2:NEXT 5 [150]=12:FOR X=1 TO 13:[150+X]=4:NEXT:[164]=6 6 [200]=226:[201]=225:[202]=227:[203]=224 7 SRND ANA()+TICK() 8 FOR Y=0 TO 9 9 PC.SOUND1 0,4,Y 10 FOR X=0 TO 13 11 @DIR 12 D=RND(4):IF D=0 && Y>0 GOTO @DIR 13 Z=X+Y*15 14 IF D=0 GSB @UP 15 IF D=1 GSB @RIGHT:IF D=-1 GOTO @DIR 16 IF D=2 GSB @DOWN:IF D=-1 GOTO @DIR 17 IF D=3 GSB @LEFT:IF D=-1 GOTO @DIR 18 NEXT:NEXT 19 PC.SOUND1 0,4,#FF 20 P=0:Q=0:D=1:[0]=[0]|16 21 VIDEO 1:GSB @3DV:GSB @MAP:GSB @PLAYER:CLT 22 @GLOOP 23 LC 25,23:?TICK()/60; 24 K=INKEY() 25 IF K<28 || K>31 GOTO @GLOOP 26 IF K=28 GSB @PLEFT 27 IF K=29 GSB @PRIGHT 28 IF K=30 GSB @PUP 29 IF K=31 GSB @PDOWN 30 GSB @3DV 31 GSB @PLAYER 32 WAIT 20:CLK 33 IF P<>14 || Q<>10 GOTO @GLOOP 34 LC 9,11:?"*** GOAL ***" 35 PC.SOUND 4,0,4,2,4,4,4,#FF:WAIT 30 36 PC.SOUND 4,6,4,1,4,4,4,#FF:WAIT 30 37 PC.SOUND 4,0,4,2,4,4,4,#FF:WAIT 30 38 PC.SOUND 4,#FF,4,#FF,4,#FF,4,#FF 39 CLK 40 IF !INKEY() CONT 41 RUN 42 @UP 43 [Z]=[Z]+2:[Z+1]=[Z+1]+8:RTN 44 @RIGHT 45 [Z+1]=[Z+1]+4:[Z+16]=[Z+16]+1:RTN 46 @DOWN 47 [Z+15]=[Z+15]+2:[Z+16]=[Z+16]+8:RTN 48 @LEFT 49 IF [Z]&4>0 D=-1:RTN 50 [Z]=[Z]+4:[Z+15]=[Z+15]+1:RTN 51 @PUP 52 H=P+Q*15:S=([H]>>D)%2:IF S RTN 53 LC P*2+1,Q*2+1:?CHR$(0) 54 P=P-(D=3)+(D=1):Q=Q-(D=0)+(D=2) 55 H=P+Q*15:[H]=[H]|16 56 U=P*2+1:V=Q*2+1 57 LC U,V:?CHR$(0) 58 N=[H] 59 IF N&1=0 LC U,V-1:?CHR$(0) 60 IF N&2=0 LC U+1,V:?CHR$(0) 61 IF N&4=0 LC U,V+1:?CHR$(0) 62 IF N&8=0 LC U-1,V:?CHR$(0) 63 RTN 64 @PLEFT 65 D=D-1:IF D<0 D=3 66 RTN 67 @PRIGHT 68 D=D+1:IF D>3 D=0 69 RTN 70 @PDOWN 71 D=D+2:IF D>3 D=D-4 72 RTN 73 @3DV 74 PC.CLEAR 11 75 PC.SOUND1 0,4,0 76 U=P:V=Q:E=21:F=15 77 GSB @CHECK:IF S GOTO @VEND 78 E=14:F=9:GSB @LWALL:GSB @RWALL 79 U=U-(D=3)+(D=1):V=V-(D=0)+(D=2):E=8:F=4 80 GSB @CHECK:IF S GOTO @VEND 81 PC.LINE 38,18,46,26,1 82 PC.LINE 46,18,38,26,1 83 @VEND 84 PC.SOUND1 0,4,#FF 85 RTN 86 @CHECK 87 N=[U+V*15]:S=(N>>D)%2 88 L=D-1:IF L<0 L=L+4 89 IF (N>>L)%2 THEN GSB @LWALL ELSE GSB @LROAD 90 R=D+1:IF R>3 R=R-4 91 IF (N>>R)%2 THEN GSB @RWALL ELSE GSB @RROAD 92 IF S GSB @WALL 93 RTN 94 @LWALL 95 IF S PC.LINE 42-F,22-F,42-F,22+F,1 96 PC.LINE 42-E,22-E,42-F,22-F,1 97 PC.LINE 42-E,22+E,42-F,22+F,1 98 RTN 99 @RWALL 100 IF S PC.LINE 42+F,22-F,42+F,22+F,1 101 PC.LINE 42+F,22-F,42+E,22-E,1 102 PC.LINE 42+F,22+F,42+E,22+E,1 103 RTN 104 @LROAD 105 IF !S PC.LINE 42-F,22-F,42-F,22+F,1 106 PC.LINE 42-E,22-F,42-F,22-F,1 107 PC.LINE 42-E,22+F,42-F,22+F,1 108 IF P=U && Q=V RTN 109 PC.LINE 42-E,22-E,42-E,22+E,1 110 RTN 111 @RROAD 112 IF !S PC.LINE 42+F,22-F,42+F,22+F,1 113 PC.LINE 42+F,22-F,42+E,22-F,1 114 PC.LINE 42+F,22+F,42+E,22+F,1 115 IF P=U && Q=V RTN 116 PC.LINE 42+E,22-E,42+E,22+E,1 117 RTN 118 @WALL 119 PC.LINE 42-F,22-F,42+F,22-F,1 120 PC.LINE 42-F,22+F,42+F,22+F,1 121 RTN 122 @MAP 123 CLS 124 FOR Y=0 TO 22 125 FOR X=0 TO 30:?CHR$(1);:NEXT:? 126 NEXT 127 FOR Y=0 TO 10:FOR X=0 TO 14 128 N=[X+Y*15]:W=(N>>4)%2 129 IF !W GOTO @NOWALK 130 U=X*2+1:V=Y*2+1 131 LC U,V:?CHR$(0) 132 IF N&2=0 LC U+1,V:?CHR$(0) 133 IF N&4=0 LC U,V+1:?CHR$(0) 134 @NOWALK 135 NEXT:NEXT 136 LC 29,21:?"G" 137 LC 20,23:?"TIME="; 138 RTN 139 @PLAYER 140 LC P*2+1,Q*2+1:?CHR$([200+D]) 141 LC 0,23:?"X,Y=";P;",";Q;" "; 142 RTN