10 REM Z80 MAZE LEARNER AI - VERSION 5C AMENDED JULY 2026 20 REM RANDOM BACKBONE WITH CONNECTED BRANCHES 30 DIM A0(144),B0(144),C0(144),D0(144),W0(144),M0(20) 40 L1=.5:G1=.8 50 R=0:B=0:T=0:I=2:L=0:F=0 60 CLS 70 PRINT "Z80 MAZE LEARNER AI" 80 PRINT "VERSION 5C" 90 PRINT "CONNECTED BRANCH GENERATOR" 100 GOSUB 1000 110 GOSUB 9600 115 GOSUB 9800 120 REM START NEW RUN 130 R=R+1 140 IF R>20 THEN 780 150 X=1:Y=1:A=1:D=1 160 M=0:S=0:O=0:W=0 170 F1=0.0:N=0 180 GOSUB 8000 190 REM MAIN MOVE LOOP 200 IF O=1 THEN 500 210 M=M+1 220 IF M<=K THEN 250 230 M=K 240 GOTO 500 250 GOSUB 2000 260 A=X:D=Y 270 GOSUB 3000 280 GOSUB 8500 290 IF O=1 THEN 500 300 GOTO 200 500 REM END OF RUN 510 M0(R)=FLT(M) 525 GOSUB 09720 530 IF O<>1 THEN 00570 540 IF B<>0 THEN 00560 550 B=M 555 GOTO 00570 560 IF M>=B THEN 00570 565 B=M 570 CLS 580 CURS1,1:PRINT "Z80 MAZE LEARNER AI" 590 CURS1,2:PRINT "RUN ";R;" RESULTS" 600 CURS1,4 610 IF O=1 THEN PRINT "EXIT FOUND" 620 IF O<>1 THEN PRINT "EXIT NOT FOUND" 630 CURS1,6:PRINT "MOVES ";M 640 CURS1,7:PRINT "SCORE ";S 650 CURS1,8 660 IF B=0 THEN PRINT "BEST -" 670 IF B<>0 THEN PRINT "BEST ";B 680 CURS1,10:PRINT "MAZE ";U;" X ";V 690 CURS1,11:PRINT "MOVE LIMIT ";K 700 CURS1,13:PRINT "VIEW MOVES CHART Y/N" 710 GOTO780:INPUT I0$ 720 IF I0$="Y" THEN 740 730 IF I0$="y" THEN 740 735 GOTO 780 740 CLS 750 GOSUB 7000 780 REM POST RUN MENU 790 CLS 800 IF R>=20 THEN 900 810 CURS1,3:PRINT "WHAT NEXT?" 820 CURS1,5:PRINT "1 RUN SAME MAP" 830 CURS1,6:PRINT "2 START FRESH MAP" 840 CURS1,7:PRINT "3 EXIT" 850 GOTO 120:CURS1,9:INPUT Q 860 IF Q=1 THEN 120 870 IF Q=2 THEN 960 880 IF Q=3 THEN 990 890 GOTO 790 900 REM MENU AFTER RUN 20 910 CURS1,3:PRINT "20 RUN LIMIT REACHED" 920 CURS1,5:PRINT "1 START FRESH MAP" 930 CURS1,6:PRINT "2 EXIT" 935 CURS1,8:INPUT Q 940 IF Q=1 THEN 960 945 IF Q=2 THEN 990 950 GOTO 790 960 REM START FRESH MAP 965 R=0:B=0:T=0:I=2:L=0:F=0 970 GOSUB 1000 975 GOSUB 9600 980 GOTO 120 990 CLS 995 END 1000 REM SETUP SCREEN 1010 CLS 1020 CURS1,1:PRINT "Z80 MAZE LEARNER AI" 1030 CURS1,2:PRINT "VERSION 5C - SETUP" 1040 CURS1,4:PRINT "MAZE WIDTH 5 TO 12" 1050 CURS1,5:INPUT U 1060 IF U>=5 THEN 1080 1070 U=5 1080 IF U<=12 THEN 1100 1090 U=12 1100 CURS1,7:PRINT "MAZE HEIGHT 5 TO 12" 1110 CURS1,8:INPUT V 1120 IF V>=5 THEN 1140 1130 V=5 1140 IF V<=12 THEN 1160 1150 V=12 1160 J=U*V 1170 K=J*8 1180 CURS1,10:PRINT "MAP TYPE" 1190 CURS1,11:PRINT "1 FIXED 2 RANDOM" 1200 CURS1,12:INPUT G 1210 IF G=1 THEN 1240 1212 CLS 1220 IF G=2 THEN 1240 1230 G=1 1240 CLS 1250 CURS1,3:PRINT "Z80 MAZE LEARNER AI" 1260 CURS1,4:PRINT "VERSION 5C" 1270 CURS1,7 1280 IF G=1 THEN PRINT "BUILDING FIXED MAP..." 1282 IF G=1 THEN PRINT "MAP TYPE: SIMPLE" 1284 IF G=2 THEN PRINT "MAP TYPE: RANDOM" 1290 IF G=2 THEN PRINT "GENERATING RANDOM MAP..." 1300 CURS1,9 1310 IF G=2 THEN PRINT "PLEASE WAIT A LONG TIME- MICROBEE IS WORKING" 1320 GOSUB 9300 1330 RETURN 2000 REM CHOOSE BEST LEGAL ACTION 2010 H=(Y-1)*U+X 2020 B1=-999.0 2030 N=0 2040 REM TEST NORTH 2050 C=X:E=Y-1 2060 GOSUB 5000 2090 B1=A0(H) 2100 N=1 2120 REM TEST SOUTH 2130 C=X:E=Y+1 2140 GOSUB 5000 2170 IF B0(H)<=B1 THEN 2210 2180 B1=B0(H) 2190 N=2 2200 REM CONTINUE TO WEST TEST 2210 REM TEST WEST 2220 C=X-1:E=Y 2230 GOSUB 5000 2260 IF C0(H)<=B1 THEN 2300 2270 B1=C0(H) 2280 N=3 2300 REM TEST EAST 2310 C=X+1:E=Y 2320 GOSUB 5000 2350 IF D0(H)<=B1 THEN 2390 2360 B1=D0(H) 2370 N=4 2390 REM ADAPTIVE RANDOM LEGAL ACTION 2400 GOSUB 9790 2410 P=INT(RND*FLT(I)) 2420 IF P<>0 THEN 2600 2430 GOTO 2470 2470 N=INT(RND*4.0)+1 2480 C=X:E=Y 2490 IF N<>1 THEN 2510 2500 E=Y-1 2510 IF N<>2 THEN 2530 2520 E=Y+1 2530 IF N<>3 THEN 2550 2540 C=X-1 2550 IF N<>4 THEN 2570 2560 C=X+1 2570 GOSUB 5000 2600 RETURN 3000 REM TAKE ACTION AND LEARN 3010 Z=(Y-1)*U+X 3020 C=X:E=Y 3030 IF N<>1 THEN 3050 3040 E=Y-1 3050 IF N<>2 THEN 3070 3060 E=Y+1 3070 IF N<>3 THEN 3090 3080 C=X-1 3090 IF N<>4 THEN 3110 3100 C=X+1 3110 GOSUB 5000 3120 F1=-1.0 3130 IF W=0 THEN 3170 3140 F1=-2.0 3150 GOTO 3230 3170 X=C:Y=E 3180 Z=(Y-1)*U+X 3190 IF W0(Z)<>3.0 THEN 3230 3200 F1=100.0 3210 O=1 3230 S=S+INT(F1) 3240 Z=(D-1)*U+A 3250 T1=F1 3260 IF W=1 THEN 3300 3270 IF O=1 THEN 3300 3280 H=Z 3290 GOSUB 4000 3300 Z=H 3310 T1=F1+G1*Q1 3320 IF N<>1 THEN 3340 3330 A0(Z)=A0(Z)+L1*(T1-A0(Z)) 3340 IF N<>2 THEN 3360 3350 B0(Z)=B0(Z)+L1*(T1-B0(Z)) 3360 IF N<>3 THEN 3380 3370 C0(Z)=C0(Z)+L1*(T1-C0(Z)) 3380 IF N<>4 THEN 3400 3390 D0(Z)=D0(Z)+L1*(T1-D0(Z)) 3400 RETURN 4000 REM FIND BEST LEGAL FUTURE Q 4010 Z=(Y-1)*U+X 4020 Q1=-999.0 4030 REM TEST NORTH 4040 C=X:E=Y-1 4050 GOSUB 5000 4070 IF W=1 THEN 4110 4080 Q1=A0(Z) 4090 REM TEST SOUTH 4110 C=X:E=Y+1 4130 GOSUB 5000 4150 IF W=1 THEN 4200 4160 IF B0(Z)<=Q1 THEN 4200 4170 Q1=B0(Z) 4200 REM TEST WEST 4210 C=X-1:E=Y 4220 GOSUB 5000 4240 IF W=1 THEN 4290 4250 IF C0(Z)<=Q1 THEN 4290 4260 Q1=C0(Z) 4290 REM TEST EAST 4300 C=X+1:E=Y 4310 GOSUB 5000 4330 IF W=1 THEN 4380 4340 IF D0(Z)<=Q1 THEN 4380 4350 Q1=D0(Z) 4380 RETURN 5000 REM CHECK WALL AND MAP COLLISION 5010 W=0 5020 IF C<1 THEN 5300 5030 IF C>U THEN 5300 5040 IF E<1 THEN 5300 5050 IF E>V THEN 5300 5060 Z=(E-1)*U+C 5070 IF W0(Z)=1.0 THEN 5300 5080 RETURN 5300 W=1 5310 RETURN 7000 REM HIRES2 LEARNING EFFICIENCY CHART 7010 CLS 7020 HIRES2 7030 REM DRAW OUTER GRAPH FRAME 7040 PLOT 48,30 TO 48,220 7050 PLOT 48,220 TO 500,220 7060 PLOT 500,220 TO 500,30 7070 PLOT 500,30 TO 48,30 7080 REM DRAW 25 PERCENT GUIDE LINES 7090 PLOT 48,75 TO 500,75 7100 PLOT 48,120 TO 500,120 7110 PLOT 48,165 TO 500,165 7120 REM DRAW ONE BAR FOR EACH COMPLETED RUN 7130 FOR P=1 TO R 7140 C=100-INT(M0(P)*100.0/FLT(K)) 7150 IF C>=0 THEN 7170 7160 C=0 7170 IF C<=100 THEN 7190 7180 C=100 7190 E=C*180/100 7200 X=54+(P-1)*22 7210 Y=30+E 7220 REM DRAW FILLED BAR 12 PIXELS WIDE 7230 FOR Q=X TO X+11 7240 PLOT Q,30 TO Q,Y 7250 NEXT Q 7260 NEXT P 7270 REM TITLE AND Y AXIS UNITS 7280 CURS1,1:PRINT "LEARNING EFFICIENCY"; 7290 CURS1,2:PRINT "HIGHER BARS ARE BETTER"; 7300 CURS1,3:PRINT "100%"; 7310 CURS1,6:PRINT "75%"; 7320 CURS1,9:PRINT "50%"; 7330 CURS1,12:PRINT "25%"; 7340 CURS1,15:PRINT "0%"; 7350 REM X AXIS RUN NUMBERS 7360 CURS7,15:PRINT "1"; 7370 CURS20,15:PRINT "5"; 7380 CURS33,15:PRINT "10"; 7390 CURS47,15:PRINT "15"; 7400 CURS60,15:PRINT "20"; 7410 CURS31,15:PRINT "RUN"; 7420 CURS1,16:PRINT "PRESS RETURN"; 7430 INPUT I0$ 7440 CLS 7445 GOSUB 9800 7450 RETURN 8000 REM DRAW VERSION 5C UNIFIED DASHBOARD 8010 CLS 8015 GOSUB 9800 8020 CURS1,1:PRINT "Z80 MAZE LEARNER AI" 8030 CURS1,2:PRINT "VERSION 5C ";U;" X ";V 8040 REM DRAW COMPLETE VISIBLE TILE GRID 8045 PCG 8050 FOR Q=0 TO V+1 8060 FOR P=0 TO U+1 8070 GOSUB 9120 8080 NEXT P 8090 NEXT Q 8100 NORMAL 8110 REM RIGHT SIDE PANEL 8120 CURS36,1:PRINT "RUN" 8130 CURS36,2:PRINT "MOVE" 8140 CURS36,3:PRINT "SCORE" 8150 CURS36,4:PRINT "BEST" 8160 CURS36,6:PRINT "ACTION" 8170 CURS36,7:PRINT "REWARD" 8180 CURS36,9:PRINT "STATE" 8190 CURS36,10:PRINT "EXPLORE" 8200 CURS36,11:PRINT "Q VALUES" 8205 CURS45,11:PRINT FRE(0) 8210 CURS36,12:PRINT "N" 8215 NORMAL 8220 CURS36,13:PRINT "S" 8230 CURS36,14:PRINT "W" 8240 CURS36,15:PRINT "E" 8245 NORMAL 8250 GOSUB 09260 8260 REM BRANCH MAZE ENGINE - VERSION 5C (disabled - maze now full height at 12x12, no spare row) 8270 GOSUB 8500 8280 RETURN 8500 REM UPDATE DASHBOARD 8510 CURS48,1:PRINT [A16 32]; 8520 CURS48,1:PRINT R;"/20"; 8530 CURS48,2:PRINT [A16 32]; 8540 CURS48,2:PRINT M;"/";K; 8550 CURS48,3:PRINT [A16 32]; 8560 CURS48,3:PRINT S; 8570 CURS48,4:PRINT [A16 32]; 8580 CURS48,4 8590 IF B=0 THEN PRINT "-"; 8600 IF B<>0 THEN PRINT B; 8610 CURS48,9:PRINT [A16 32]; 8620 CURS48,9 8630 Z=(Y-1)*U+X 8640 PRINT Z; 8650 CURS48,10:PRINT [A16 32]; 8660 CURS48,10 8670 PRINT "1:";I;" "; 8680 GOSUB 09260 8690 GOSUB 8700 8695 GOSUB 8800 8699 RETURN 8700 REM UPDATE ACTION AND REWARD 8710 CURS48,6:PRINT [A16 32]; 8720 CURS48,6 8730 IF N=0 THEN PRINT "-"; 8740 IF N=1 THEN PRINT "NORTH"; 8750 IF N=2 THEN PRINT "SOUTH"; 8760 IF N=3 THEN PRINT "WEST"; 8770 IF N=4 THEN PRINT "EAST"; 8780 CURS48,7:PRINT [A16 32]; 8790 CURS48,7:PRINT F1; 8795 RETURN 8800 REM UPDATE Q VALUES 8810 Z=(D-1)*U+A 8820 CURS42,12:PRINT [A22 32]; 8830 CURS42,12:PRINT A0(Z); 8840 CURS42,13:PRINT [A22 32]; 8850 CURS42,13:PRINT B0(Z); 8860 CURS42,14:PRINT [A22 32]; 8870 CURS42,14:PRINT C0(Z); 8880 CURS42,15:PRINT [A22 32]; 8890 CURS42,15:PRINT D0(Z); 8900 GOSUB 8920 8910 RETURN 8920 REM UPDATE OLD AND NEW VISIBLE TILES 8930 P=A 8940 Q=D 8950 GOSUB 9120 8955 PCG 8960 P=X 8970 Q=Y 8975 NORMAL 8980 GOSUB 9120 8990 NORMAL 8995 RETURN 9000 REM GET MAP PCG PAIR USING STATE Z 9010 I0$="ab" 9020 IF W0(Z)=1.0 THEN 9060 9030 IF W0(Z)=2.0 THEN 9080 9040 IF W0(Z)=3.0 THEN 9100 9050 RETURN 9060 I0$="cd" 9070 RETURN 9080 I0$="ef" 9090 RETURN 9100 I0$="gh" 9110 RETURN 9120 REM DRAW VISIBLE TILE AT P,Q 9130 I0$="cd" 9140 IF P<1 THEN 9220 9150 IF P>U THEN 9220 9160 IF Q<1 THEN 9220 9170 IF Q>V THEN 9220 9180 Z=(Q-1)*U+P 9190 GOSUB 9000 9200 IF P<>X THEN 9220 9210 IF Q<>Y THEN 9220 9215 I0$="ij" 9220 PCG 9230 CURS P*2+2,Q+3 9240 PRINT I0$; 9250 RETURN 9260 REM UPDATE MODE LINE - VERSION 4B 9261 CURS36,16:PRINT [A28 32]; 9262 CURS36,16 9263 IF R>1 THEN 09266 9264 PRINT "MODE INITIALISING"; 9265 RETURN 9266 IF B<>0 THEN 09270 9267 PRINT "MODE LEARNING"; 9268 RETURN 9270 IF T>=30 THEN 09274 9271 PRINT "MODE LEARNING"; 9272 RETURN 9274 IF L>=2 THEN 09278 9275 PRINT "MODE EXPLORING"; 9276 RETURN 9278 IF T>=55 THEN 09282 9279 PRINT "MODE EXPLORING"; 9280 RETURN 9282 IF L>=4 THEN 09286 9283 PRINT "MODE SOLVING"; 9284 RETURN 9286 IF T>=80 THEN 09290 9287 PRINT "MODE SOLVING"; 9288 RETURN 9290 IF L>=6 THEN 09294 9291 PRINT "MODE OPTIMISING"; 9292 RETURN 9294 IF T>=90 THEN 09296 9295 GOTO 09291 9296 IF F>=2 THEN 09298 9297 GOTO 09291 9298 PRINT "MODE MASTERED"; 9299 RETURN 9300 REM SELECT VERSION 5 MAP TYPE 9310 IF G=1 THEN 09400 9320 GOSUB 10000 9330 RETURN 9400REM BUILD FIXED VERTICAL WALL MAZE 9410 FOR Z=1 TO 120 9415 W0(Z)=0.0 9420 NEXT Z 9430 P=0 9440 Q=2 9445 GOTO 09460 9460 FOR C=2 TO U-1 9470 P=1-P 9480 IF P=0 THEN 09560 9490 FOR E=2 TO V-1 9500 IF E=Q THEN 09520 9510 Z=(E-1)*U+C 9515 W0(Z)=1.0 9520 NEXT E 9530 IF Q=2 THEN 09550 9540 Q=2 9545 GOTO 09560 9550 Q=V-1 9560 NEXT C 9570 W0(1)=2.0 9580 W0(J)=3.0 9590 RETURN 9600 REM RESET Q VALUES AND RESULTS 9610 FOR Z=1 TO 120 9620 A0(Z)=0.0 9630 B0(Z)=0.0 9640 C0(Z)=0.0 9650 D0(Z)=0.0 9660 NEXT Z 9670 FOR P=1 TO 20 9680 M0(P)=0.0 9700 NEXT P 9710 RETURN 9720 REM UPDATE LEARNING CONFIDENCE - VERSION 4B 9730 IF O=1 THEN 09750 9731 RETURN 9750 L=L+1 9751 T=T+8 9752 IF B<>0 THEN 09760 9753 T=T+7 9754 F=1 9755 GOTO 09780 9760 IF M>=B THEN 09766 9761 T=T+8 9762 F=1 9763 GOTO 09780 9766 IF M>B+2 THEN 09774 9767 T=T+8 9768 F=F+1 9769 GOTO 09780 9774 T=T-2 9775 F=0 9776 IF M>B+2 THEN 09779 9777 T=T+3 9778 GOTO 09780 9779 T=T-2 9780 IF L<=3 THEN 09782 9781 T=T+4 9782 IF F<=2 THEN 09784 9783 T=T+4 9784 IF T>=0 THEN 09786 9785 T=0 9786 IF T<=100 THEN 09788 9787 T=100 9788 GOSUB 09790 9789 RETURN 9790 REM SET EXPLORE DIVISOR 9791 I=2 9792 IF T<20 THEN 09799 9793 I=3 9794 IF T<40 THEN 09799 9795 I=5 9796 IF T<60 THEN 09799 9797 I=8 9799 RETURN 9800 REM SETUP VERSION 4A PCG TILE LIBRARY 9810 RESTORE 9900 9820 FOR P=65040 TO 65199 9830 READ C 9840 POKE P,C 9850 NEXT P 9860 RETURN 9900 REM PCG A - FLOOR LEFT 9901 DATA 0,0,0,32,0,0,0,0,0,0,0,4,0,0,0,0 9910 REM PCG B - FLOOR RIGHT 9911 DATA 0,0,0,0,0,4,0,0,0,0,0,32,0,0,0,0 9920 REM PCG C - WALL LEFT 9921 DATA 255,146,146,146,255,73,73,73,255,146,146,146,255,73,73,73 9930 REM PCG D - WALL RIGHT 9931 DATA 255,73,73,73,255,146,146,146,255,73,73,73,255,146,146,146 9940 REM PCG E - START FLAG LEFT 9941 DATA 240,252,195,192,192,192,195,222,240,192,192,192,192,192,192,192 9950 REM PCG F - START FLAG RIGHT 9951 DATA 0,0,128,96,24,96,128,0,0,0,0,0,0,0,0,0 9960 REM PCG G - FINISH FLAG LEFT 9961 DATA 255,153,153,230,230,153,153,255,0,0,0,0,0,0,0,0 9970 REM PCG H - FINISH FLAG RIGHT 9971 DATA 255,207,207,51,51,207,207,255,3,3,3,3,3,3,3,3 9980 REM PCG I - BEE LEFT 9981 DATA 8,4,59,123,121,59,7,15,28,31,28,31,15,7,9,16 9990 REM PCG J - BEE RIGHT 9991 DATA 16,32,220,222,158,220,224,240,56,248,56,248,240,224,144,8 10000 REM VERSION 5A RANDOM GUARANTEED PATH 10010 REM BEGIN WITH EVERY CELL AS A WALL 10020 FOR Z=1 TO 120 10030 W0(Z)=1.0 10040 NEXT Z 10050 REM BEGIN PATH AT TOP LEFT 10055 REM RANDOMIZE 10060 X=1:Y=1 10070 Z=1 10080 W0(Z)=0.0 10090 REM STOP WHEN BOTTOM RIGHT IS REACHED 10100 IF X<>U THEN 10130 10110 IF Y=V THEN 10240 10120 REM X LIMIT REACHED - MUST MOVE SOUTH 10125 GOTO 10190 10130 IF Y<>V THEN 10160 10140 REM Y LIMIT REACHED - MUST MOVE EAST 10150 GOTO 10180 10160 REM RANDOMLY CHOOSE EAST OR SOUTH 10170 P=INT(RND*2.0) 10175 IF P=0 THEN 10190 10180 X=X+1 10185 GOTO 10200 10190 Y=Y+1 10200 Z=(Y-1)*U+X 10210 W0(Z)=0.0 10220 GOTO 10100 10240 REM ADD BRANCHES FOR RANDOM MODE 10250 IF G=1 THEN 10270 10260 GOSUB 12000 10270 REM MARK START AND FINISH 10280 W0(1)=2.0 10290 W0(J)=3.0 10300 RETURN 12000 REM VERSION 5B CONNECTED BRANCH GENERATOR 12010 REM OPEN ABOUT 30 PERCENT OF TOTAL CELLS 12020 Q=INT(FLT(J)*.30) 12030 H=0 12040 A=0 12050 D=J*30 12060 REM H COUNTS SUCCESSFUL NEW PASSAGE CELLS 12070 IF H>=Q THEN 12430 12080 REM A PREVENTS AN ENDLESS SEARCH 12090 A=A+1 12100 IF A>D THEN 12430 12110 REM SELECT RANDOM EXISTING PASSAGE 12120 X=INT(RND*FLT(U))+1 12130 Y=INT(RND*FLT(V))+1 12140 Z=(Y-1)*U+X 12150 IF W0(Z)=1.0 THEN 12070 12160 REM SELECT RANDOM DIRECTION 12170 N=INT(RND*4.0)+1 12180 C=X:E=Y 12190 IF N<>1 THEN 12210 12200 E=Y-1 12210 IF N<>2 THEN 12230 12220 E=Y+1 12230 IF N<>3 THEN 12250 12240 C=X-1 12250 IF N<>4 THEN 12270 12260 C=X+1 12270 REM REJECT POSITIONS OUTSIDE MAZE 12280 IF C<1 THEN 12070 12290 IF C>U THEN 12070 12300 IF E<1 THEN 12070 12310 IF E>V THEN 12070 12320 Z=(E-1)*U+C 12330 IF W0(Z)<>1.0 THEN 12070 12340 W0(Z)=0.0 12350 H=H+1 12360 GOTO 12070 12430 RETURN