10
20 ON ERROR REPORT:PRINT" at line ";ERL:PROC_exit
30 IF INKEY-256=&83 OR INKEY-256=&84 MODE 0:OSCLI"GSCALE16"
40 *ESCOFF
50 *FX4,1
60
70 max%=384:DIM path% max%*2
80 DIM world% 48
90
100 maze%=1:speed%=5
110
120 REPEAT
130 CLG:CLS:PRINTTAB(8,2)"Nibbles!"TAB(5,3)"Ben Ryves 2009"
140 M%=0:REPEAT:PRINTTAB(6,6-M%)" "TAB(17,6-M%)" "TAB(6,5+M%)"*"TAB(17,5+M%)"*"TAB(8,5)"Speed: ";speed%TAB(8,6)"Maze: ";maze%
150 K%=INKEY0:ON K%-135 PROC_menuDn,PROC_menuUp,PROC_menuToggle,PROC_menuToggle ELSE
160 UNTILK%=13ORK%=27
170 IF K%=27:PROC_exit
180 *REFRESHOFF
190
200 CLG:PRINTTAB(7,4)"Get ready!";:*REFRESH
210
220 ON maze% PROC_maze1,PROC_maze2,PROC_maze3,PROC_maze4 ELSE PROC_maze0
230 CLG:FORY%=0TO15:FORX%=0TO23STEP8:IFworld%?(Y%*3+X%DIV8):FORZ%=0TO7:MOVE(X%+Z%)*64,Y%*64:PLOT97+((FN_world(X%+Z%,Y%)=0)AND2),63,63:NEXT
240 NEXT:NEXT
250 len%=4:head%=2*(len%-1):tail%=0:X%=11:Y%=8:FORI%=0TOmax%:path%?(I%*2)=X%:path%?(I%*2+1)=Y%:NEXT:PROC_world(X%,Y%,TRUE)
260 S%=(9-speed%)*5+3:U%=1:V%=0:A%=X%:B%=Y%:gameOver%=FALSE:points%=-1:IFFN_apple
270
280 REPEAT:IF NOTFN_apple M%=path%?tail%:N%=path%?(tail%+1):PROC_world(M%,N%,FALSE):MOVEM%*64,N%*64:PLOT99,63,63:tail%=(tail%+2)MODmax%
290 X%=(X%+U%+24)MOD24:Y%=(Y%+V%+16)MOD16:gameOver%=FN_world(X%,Y%)
300 head%=(head%+2)MODmax%:path%?head%=X%:path%?(head%+1)=Y%:PROC_world(X%,Y%,TRUE):MOVEX%*64,Y%*64:PLOT97,63,63
310 *REFRESH
320 T%=TIME+S%:oU%=U%:oV%=V%:REPEAT:K%=INKEY0:IFK%=27:gameOver%=TRUE
330 ON K%-135 PROC_lt,PROC_rt,PROC_dn,PROC_up ELSE
340 UNTIL TIME>=T%
350 UNTILgameOver%
360 REPEAT:UNTILINKEY0=-1:REPEAT:UNTILINKEY0<>-1
370 *REFRESHON
380 CLG:PRINTTAB(8,3)STR$points%;" points"TAB(4,5)"Play again? (Y/N)";
390 REPEAT:K$=GET$:UNTILK$="Y"ORK$="y"ORK$="N"ORK$="n"
400 UNTILK$="N"ORK$="n"
410 *ESCON
420 *FX4,0
430 PRINT:END
440
450 DEFFN_apple:IF X%<>A%ORY%<>B% =FALSE
460 REPEAT:A%=RND(24)-1:B%=RND(16)-1
470 UNTILFN_world(A%,B%)=0
480 MOVEA%*64+32,B%*64+32:PLOT145,31,0:points%=points%+1:=TRUE
490
500 DEFPROC_world(X%,Y%,V%)P%=Y%*3+X%DIV8:X%=X%AND7:IF V% world%?P%=world%?P%OR2^X% ELSE world%?P%=world%?P%ANDNOT(2^X%)
510 ENDPROC
520 DEFFN_world(X%,Y%)P%=Y%*3+X%DIV8:X%=X%AND7:=world%?P%AND2^X%
530
540 DEFPROC_maze0:FORI%=0TO47STEP4:world%!I%=0:NEXT:ENDPROC
550 DEFPROC_maze1:PROC_maze0:FORI%=0TO23:PROC_world(I%,0,TRUE):PROC_world(I%,15,TRUE):NEXT:FORI%=0TO15:PROC_world(0,I%,TRUE):PROC_world(23,I%,TRUE):NEXT:ENDPROC
560 DEFPROC_maze2:PROC_maze1:FORI%=5TO10:PROC_world(0,I%,FALSE):PROC_world(23,I%,FALSE):NEXT:FORI%=5TO18:PROC_world(I%,5,TRUE):PROC_world(I%,10,TRUE):NEXT:ENDPROC
570 DEFPROC_maze3:PROC_maze2:FORI%=6TO9:PROC_world(5,I%,TRUE):PROC_world(18,I%,TRUE):NEXT:FORI%=10TO13:PROC_world(I%,5,FALSE):PROC_world(I%,10,FALSE):NEXT:ENDPROC
580 DEFPROC_maze4:PROC_maze1
590 FORI%=10TO13:PROC_world(I%,0,FALSE):PROC_world(I%,15,FALSE):PROC_world(I%,12,TRUE):NEXT
600 FORI%=6TO9:PROC_world(0,I%,FALSE):PROC_world(23,I%,FALSE):PROC_world(3,I%,TRUE):NEXT
610 FORI%=1TO3:PROC_world(9,I%,TRUE):PROC_world(14,I%,TRUE):PROC_world(9,15-I%,TRUE):PROC_world(14,15-I%,TRUE):PROC_world(I%,5,TRUE):PROC_world(I%,10,TRUE):PROC_world(23-I%,5,TRUE):PROC_world(23-I%,10,TRUE):NEXT
620 ENDPROC
630
640 DEFPROC_lt:IFoU%<>1 U%=-1:V%=0
650 ENDPROC
660 DEFPROC_rt:IFoU%<>-1 U%=1:V%=0
670 ENDPROC
680 DEFPROC_up:IFoV%<>-1 U%=0:V%=1
690 ENDPROC
700 DEFPROC_dn:IFoV%<>1 U%=0:V%=-1
710 ENDPROC
720
730 DEFPROC_menuToggle:M%=1-M%:ENDPROC
740 DEFPROC_menuUp:IF M% maze%=(maze%+1)MOD5 ELSE speed%=(speed%+1)MOD10
750 ENDPROC
760 DEFPROC_menuDn:IF M% maze%=(maze%+4)MOD5 ELSE speed%=(speed%+9)MOD10
770 ENDPROC
780
790 DEFPROC_exit
800 PRINT
810 *REFRESHON
820 *ESCON
830 *FX4,0
840 END