穴掘り法で迷路を作るプログラムで、IchigoJam S(1.4.3)とR(1.5β1)の速度を比較しました。
動画はこちら。
【IchigoJam】穴掘り法迷路の速度比較
Sだと迷路完成まで19~20秒かかりますが、Rだと2秒ほどでできます。
ゲームプログラムで迷路を作る時に、これまでは時間節約のために棒倒し法で作ることが多かったのですが、棒倒し法だと正解の道が片方の壁際へ偏ることが多いです。
Rで2秒で作れるなら、今後は穴掘り法を使っても良さそうです。
プログラム
穴掘り法で道を掘る手順は以下のとおりです。
- 道を掘る方向を、上下左右4方向から乱数で決める。ただし迷路の外へ出てしまう方向、既に道になっている方向、掘ると他の道へつながってしまう方向へは掘らない。
- 掘る方向が2方向以上選べる場所は、スタック(配列変数)に記録しておく。
- 掘るのに行き詰まったら、スタックの1つ前の位置に戻って、別方向へ掘る(分かれ道)。
- スタックが無くなったら完成。
10 '*MAZE DRILL 20 CLV:CLS:SRND TICK():CLT 30 LET [94],-1,0,1,0,0,-1,0,1 40 FOR J=0 TO 22 50 FOR I=0 TO 30:?CHR$(1);:NEXT:? 60 NEXT 70 X=1:Y=1:LC X,Y:?CHR$(0) 80 @LOOP 90 E=0 100 FOR D=0 TO 3 110 GSB @CHK 120 IF C E=E+1<<D 130 NEXT 140 IF E=0 IF P=0 GOTO @END ELSE GSB @POP:GOTO @LOOP 150 D=RND(4):IF E&(1<<D) ELSE CONT 160 IF E-(1<<D)>0 GSB @PUSH 170 FOR I=1 TO 2 180 X=X+[94+D*2]:Y=Y+[95+D*2] 190 LC X,Y:?CHR$(0) 200 NEXT 210 GOTO @LOOP 220 @END 230 T=TICK()/60 240 LC 0,23:?T;"sec."; 250 CONT 260 @CHK 270 U=X+2*[94+D*2]:V=Y+2*[95+D*2] 280 C=SCR(U,V) 290 IF U<0 OR U>30 C=0 300 IF V<0 OR V>22 C=0 310 RTN 320 @PUSH 330 P=P+1:[P]=X+Y*32:RTN 340 @POP 350 X=[P]%32:Y=[P]/32:P=P-1:RTN