SUBROUTINE PDLMOV # # THIS SUBROUTINE CONTROLS THE MOTION OF THE PLAYER'S PADDLE. # IMPLICIT INTEGER (A-Z) INCLUDE SY:UVT100.DAT INCLUDE SY:BRKOUT.CMN # # NEWDIR IS SET BY THE UNSOLICITED INPUT AST ROUTINE, INPAST, # WHENEVER THE PLAYER HITS A KEY ON THE KEYBOARD. IF NONZERO, # IT INDICATES THE DIRECTION THE PADDLE IS TO BE MOVED. # IF (NEWDIR > 0) [ IF (NEWDIR == LEFT) #MOVE TO LEFT PDLY = PDLY - 1 ELSE IF (NEWDIR == RIGHT) #MOVE TO RIGHT PDLY = PDLY + 1 NEWDIR = 0 #CLEAR MOTION INDICATOR IF (PDLY < LMAR) [ #DO NOT MOVE OUT OF BOUNDS PDLY = LMAR RETURN ] ELSE IF (PDLY+2 > RMAR) [ PDLY = RMAR - 2 RETURN ] # # DISPLAY PADDLE AT NEW LOCATION. THE PADDLE IS THREE COLUMNS WIDE. # TO ELIMINATE THE NEED TO ERASE THE OLD PADDLE LOCATION, FIVE # CHARACTERS, INCLUDING A SPACE ON EACH END, ARE OUTPUT. HOWEVER, # IF THE PADDLE IS AT THE EDGE OF THE PLAYING AREA, THE LEFT OR # RIGHT SPACE CANNOT BE DISPLAYED. # IF (PDLY > LMAR .AND. PDLY+2 < RMAR) [ CALL UVT100(CUP,BMAR,PDLY-1) DO I = 1,5 OUTBUF(LEN+I) = PDLCHR(I) LEN = LEN + 5 ] ELSE [ IF (PDLY == LMAR) [ CALL UVT100(CUP,BMAR,LMAR) DO I = 1,4 OUTBUF(LEN+I) = PDLCHR(I+1) LEN = LEN + 4 ] ELSE [ CALL UVT100(CUP,BMAR,RMAR-3) DO I = 1,4 OUTBUF(LEN+I) = PDLCHR(I) LEN = LEN + 4 ] ] ] ELSE #IF NO PADDLE MOTION, HOME CURSOR CALL UVT100(CUP,1,1) #TO ELIMINATE ANNOYING CURSOR FLICKER RETURN #AROUND BALL. END