( BREAKOUT/FIGFORTH FOR MICROTAN AFTER MMSFORTH/BREAKFORTH ) ( USE "4" FOR LEFT; "6" FOR RIGHT ANDY BIGGS AUG 81 ) : TASK ; 600 @ RANDOMISE -2 CONSTANT -2 -1 CONSTANT -1 0 VARIABLE BSPEED 0 VARIABLE SPVAR 0 VARIABLE SCORE 0 VARIABLE XPOS 0 VARIABLE YPOS 1 VARIABLE PPOS 1 VARIABLE YDIR 1 VARIABLE XDIR 0 VARIABLE BEST : INIT GOFF CLS 0 CLINE ." SPEED (1-10, 1 FASTEST) " IN# 1 MAX 10 MIN 5 * BSPEED ! 0 CLINE ." HOW MANY BALLS? " IN# GCLS GON 608 32 255 FILL 64 16 DO I 0 GSET I 1 GSET I 62 GSET I 63 GSET LOOP 704 128 255 FILL 0 SCORE ! GOFF 0 CLINE ." BREAKOUT IN FORTH" 1 CLINE ." BEST: " BEST ? 2 CLINE ." SCORE: 0" 2 16 PTC ." BALL:" ; : PCLR PPOS @ 992 + 3 0 FILL ; : PSET PPOS @ 992 + 3 3 FILL ; ( BREAKOUT 2 OF 6 WANB AUG 81) : PADDLE 01 C@ 52 = IF 0 1 C! PCLR -1 PPOS @ + 1 MAX PPOS ! PSET ENDIF 01 C@ 54 = IF 0 1 C! PCLR 1 PPOS @ + 28 MIN PPOS ! PSET ENDIF ; : CFUDGE HERE 2 - DP ! LATEST PFA DUP CFA ! ; HEX : BOPON [ B586 , 0020 , A6F0 , 4CB5 , 0447 , ] ; CFUDGE : BOPOFF [ A958 , 8D00 , BFCB , C28D , 4CBF , 0447 , ] ; CFUDGE DECIMAL : XCHK XPOS @ 2 < IF XDIR @ MINUS XDIR ! 2 XPOS ! BOPON ENDIF XPOS @ 61 > IF XDIR @ MINUS XDIR ! 61 XPOS ! BOPON ENDIF ; ( BREAKOUT PART 3 WANB AUG81 ) : YCHK YPOS @ 16 < IF 1 YDIR ! 16 YPOS ! 1 SPVAR C! BOPON ENDIF YPOS @ 36 < IF SPVAR C@ 4 MIN SPVAR C! ENDIF YPOS @ 31 < IF SPVAR C@ 3 MIN SPVAR C! ENDIF YPOS @ 27 < IF SPVAR C@ 2 MIN SPVAR C! ENDIF ; : #CASE: SWAP 2 * + @ EXECUTE ; #CASE: GETDIR -2 -1 -1 1 1 2 ; : PCHK 0 YPOS @ 58 > IF 59 YPOS ! XPOS @ PPOS @ 2 * - DUP -1 > OVER 6 < AND IF -1 YDIR ! BOPON GETDIR XDIR ! ELSE DROP 1+ ENDIF ENDIF ; ( BREAKOUT PART 4 WANB AUG 81 ) : CLR XPOS @ 2 - 252 AND 2+ DUP 4 + SWAP DO YPOS @ I GCLR LOOP YPOS @ 40 - ABS SCORE +! 2 7 PTC GOFF SCORE ? BOPON GON YDIR @ MINUS YDIR ! ; : BALLCHK YDIR @ YPOS +! XDIR @ XPOS +! XCHK YCHK PCHK YPOS @ XPOS @ ?GPT IF CLR ENDIF ; : BALL YPOS @ XPOS @ GCLR BALLCHK DUP 0= IF YPOS @ XPOS @ GSET BOPOFF ENDIF ; : GAMECHK SCORE @ 2040 MOD 0= IF 704 128 255 FILL ENDIF ; : DELAY BSPEED C@ SPVAR C@ * 0 DO LOOP ; ( BREAKOUT PART5 WANB AUG 81 ) : BREAKOUT BEGIN INIT GON 0 PSET DO 2000 BSPEED C@ / 0 DO DELAY PADDLE LOOP 2 22 PTC GOFF I 1+ . GON 5 SPVAR C! 2 SRND 1 = IF 1 ELSE -1 ENDIF XDIR ! 1 YDIR ! 58 SRND 2+ XPOS ! 40 YPOS ! BEGIN 5 0 DO PADDLE LOOP BALL GAMECHK DELAY UNTIL BOPOFF LOOP SCORE @ BEST @ MAX BEST ! 11 6 PTC GOFF ." PLAY AGAIN? Y/N " 0 BEGIN DROP KEY DUP 89 = DUP ROT 78 = OR UNTIL 0= UNTIL ; ;S