Ahora resulta que el programa no funciona correctamente y entrega el mensaje de error B Integrer Out Of Range en la linea 410. Por otra parte, en el archivo LAB1.TAP contenido en el fichero descargado tanto de KyEnter como del blog (es el mismo) le faltaba la línea 120 que ha sido añadido y adjuntado al nuevo fichero que ha sido subido a la red e incluido su link de descarga en la última actualización del blog del proyecto. Aun habiéndole añadido la linea que le faltaba, el programa sigue dando el mismo error.
El listado adjunto es tal como lo he extraido desde el BASin de Paul Dunn, con sus símbolos y todo. Si alguien observa algo raro en este programa, aparte de que el algoritmo para la generación de laberintos pueda ser correcto, puede echarle mano cuantas veces quiera.
Código: Seleccionar todo
10 BORDER 0: PAPER 0: INK 7: CLS : GO SUB 9100
12 :
15 REM \{vi} Inicializacion de las dimensiones \{vn}
17 :
20 DIM a$(25,35)
22 :
25 REM \{vi} Se "marca" el contorno y el interior del laberinto \{vn}
27 :
30 LET A$(1)=" ": LET A$(25)=A$(1)
40 FOR N=2 TO 24: LET A$(N)=" ": NEXT N
42 :
45 REM \{vi} Inicializacion del contador de "direcciones" \{vn}
47 :
50 DIM C(120,2): LET CO=2
52 :
55 REM \{vi} Se asigna la posicion de inicio. Impresion inicial del contenido del laberinto \{vn}
57 :
60 LET V=13: LET H=3: LET A$(V,H)="\::": GO SUB 9000
65 :
100 REM \{vi} Construccion del laberinto \{vn}
105 :
110 GO SUB 400: IF NOT LI THEN GO SUB 300: GO TO 100+400*(NOT V AND NOT H): REM \{vi} Si V=0 y H=0 el laberinto esta terminado \{vn}
120 IF LI>1 THEN GO SUB 200
130 IF (RND>.6 OR LI=1) AND A$(V-2,H)=" " THEN LET A$(V-1,H)="\::": LET A$(V-2,H)="\::": PRINT AT V-4,H-3;"\::";AT V-5,H-3;"\::": LET V=V-2: GO TO 100
140 IF (RND>.5 OR LI=1) AND A$(V,H+2)=" " THEN LET A$(V,H TO H+2)="\::\::\::": PRINT AT V-3,H-2;"\::\::": LET H=H+2: GO TO 100
150 IF (RND>.5 OR LI=1) AND A$(V+2,H)=" " THEN LET A$(V+1,H)="\::": LET A$(V+2,H)="\::": PRINT AT V-2,H-3;"\::";AT V-1,H-3;"\::": LET V=V+2: GO TO 100
160 IF (RND>.5 OR LI=1) AND A$(V,H-2)=" " THEN LET A$(V,H-2 TO H)="\::\::\::": PRINT AT V-3,H-5;"\::\::": LET H=H-2: GO TO 100
170 GO TO 130
175 :
200 REM \{vi} La posicion actual queda almacenada. El contador se incrementa \{vn}
205 :
210 LET C(CO,1)=V: LET C(CO,2)=H: LET CO=CO+1: RETURN
250 :
300 REM \{vi} La posicion del "contador de direcciones" se reduce \{vn}
305 :
310 LET CO=CO-1: LET V=C(CO,1): LET H=C(CO,2): RETURN
395 :
400 REM \{vi} La variable LI toma el numero de "caminos" posibles \{vn}
405 :
410 LET LI=(A$(V+2,H)=" ")+(A$(V-2,H)=" ")+(A$(V,H+2)=" ")+(A$(V,H-2)=" ")
420 RETURN
425 :
500 REM \{vi}El laberinto esta totalmente terminado \{vn}
505 :
510 PRINT #0;"TERMINADO": PAUSE 0
520 PRINT #0;AT 1,0;"Otro laberinto (s/n)?": PAUSE 0
530 IF INKEY$="s" OR INKEY$="S" THEN RUN
540 IF INKEY$"n" AND INKEY$"N" THEN GO TO 530
550 STOP
8900 :
9000 REM \{vi} Ejemplo de impresion del laberinto \{vn}
9005 :
9010 PRINT AT 0,0;: FOR N=3 TO 23: PRINT A$(N,3 TO 33): NEXT N: RETURN
9050 :
9100 REM \{vi} El grafico "A" puede tomar cualquier forma \{vn}
9105 :
9110 FOR N=USR "A" TO USR "A"+7: POKE N,INT (RND*256): NEXT N: RETURN