Még gondolkozom, hogyan lehetne szebben megcsinálni ezt, de ha valakinek van ötlete, jöhet.
Azon gondolkodom, egy tömböt kéne létrehozni. Benne lenne az összes lehetséges variáció, és az ahhoz kapcsolódó összes lehetséges irányok. Ezek előre definiálva lennének, így a gépnek nem is kéne számolgatnia, amikor dönt, merre menjenek a szörnyek, csak kiválasztani véletlenszerűen a már előre definiált lehetőségek egyikét. Csak UT változó lenne.
Ha semerre nem lehet menni: UT=0
Ha csak jobbra lehet menni: UT=1
Ha csak balra lehet menni: UT=2
csak le: UT=4
csak fel: UT=8
Jobbra+balra=1+2=3
Jobbra+le=1+4=5
Balra+fel+le=2+8+4=14
bármerre=1+2+4+8=15
Tehát lennének 0-tól 15-ig jelölve az Elágazások Típusai (ET).
Adott lenne egy kétdimenziós tömb:
NUMERIC ET(0 TO 15,1 TO 4)
A tömb második dimenziójához az adott elágazástípushoz tartozó lehetséges mozgásirányok (fel, le, jobbra, balra) tartoznának. Ez 0-nál és 15-nél a legevidensebb:
Nincs út semerre:
ET(0,1)=0
ET(0,2)=0
ET(0,3)=0
ET(0,4)=0
Mindenfele van út:
ET(15,1)=-34 (felfele lép egyet)
ET(15,2)=34 (lefele lép egyet)
ET(15,3)=-1 (balra lép egyet)
ET(15,4)=1 (jobbra lép egyet)
Csak fel és jobbra van út:
ET(9,1)=-34
ET(9,2)=1
ET(9,3)=-34
ET(9,4)=1
Amikor megvizsgálja, merre van út, a fentieket használná fel randommal fűszerezve:
IRANY(SZORNY)=ET(UT,RND(4)+1)
Ha háromfele van irány, kicsit furább, mert a páratlan számú lehetőségeket nem lehet négy tömbdimenzióban arányosan tárolni, tehát az egyik iránynak kétszer kéne lennie. Vagyis pl. nagyobb eséllyel menne lefele, mint balra vagy jobbra, ha lefele, balra és jobbra lehet menni. Ez vagy pont jó is lenne így, vagy mondjuk a drágakő felvételekor úgyis leáll egy pillanatra, olyankor átvariálná a háromirányú utak lehetőségeit véletlenszerűen.
Persze azt is meg kéne csinálni, hogy ha csőben megy egyenesen, akkor ne forduljon meg, ezt külön figyelni kéne, tehát a kétirányú lehetőségeknél lenne egy külön feltétel, hogy ha nem 0 az irány, akkor váltson ellenkezőjére.
Még talán olyat lehetne, hogy ha mind a 4 irányba lehet menni, még egy feltétellel véletlenszerűen döntse el, hogy tartja-e az eredeti irányt, vagy irányt vált. Így ha hosszabb távon falmentes pálya lenne, akkor nem ugrabugrálna összevissza, hanem valamilyen irányt próbálna tartani.
Ma már késő van, de majd kipróbálom ezt.
2210 DEF RAND_SZOR
2220 LET UT,FEL,LE,JO,BA=0
2230 IF SPEEK(255,SZOR(A)-34)<46 THEN LET UT=UT+1:LET FEL=1
2240 IF SPEEK(255,SZOR(A)-34)=112 THEN LET UT=UT+1:LET FEL=1
2250 IF SPEEK(255,SZOR(A)+34)<46 THEN LET UT=UT+4:LET LE=1
2260 IF SPEEK(255,SZOR(A)+34)=112 THEN LET UT=UT+4:LET LE=1
2270 IF SPEEK(255,SZOR(A)-1)<46 THEN LET UT=UT+8:LET BA=1
2280 IF SPEEK(255,SZOR(A)-1)=112 THEN LET UT=UT+8:LET BA=1
2290 IF SPEEK(255,SZOR(A)+1)<46 THEN LET UT=UT+2:LET JO=1
2300 IF SPEEK(255,SZOR(A)+1)=112 THEN LET UT=UT+2:LET JO=1
2310 IF UT=5 OR UT=10 THEN GOTO 2480
2320 IF FEL+LE+JO+BA=0 THEN LET I(A)=0:GOTO 2490
2330 IF FEL+LE+JO+BA=1 THEN LET I(A)=I(A)*(-1):GOTO 2480
2340 SELECT CASE RND(4)
2350 CASE 0
2360 IF FEL=1 THEN LET I(A)=-34:GOTO 2490
2370 GOTO 2340
2380 CASE 1
2390 IF LE=1 THEN LET I(A)=34:GOTO 2490
2400 GOTO 2340
2410 CASE 2
2420 IF JO=1 THEN LET I(A)=1:GOTO 2490
2430 GOTO 2340
2440 CASE 3
2450 IF BA=1 THEN LET I(A)=-1:GOTO 2490
2460 GOTO 2340
2470 END SELECT
2480 IF SPEEK(255,SZOR(A)+I(A))>46 AND SPEEK(255,SZOR(A)+I(A))<>112 THEN GOTO 2340
2490 END DEF