PROGRAM BRKOUT # # THIS IS THE MAIN CONTROL PROGRAM FOR BREAKOUT # ############################################################################## # # # AUTHOR: GLEN HOFFING # # RCA GOVERNMENT COMMUNICATIONS SYSTEMS # # FRONT AND COOPER STS. # # CAMDEN, NJ 08102 # # # # DATE: 27-MAY-82 # # # ############################################################################## IMPLICIT INTEGER (A-Z) INCLUDE SY:UVT100.DAT INCLUDE SY:BRKOUT.CMN EXTERNAL *INPAST,*CNTRLC PARAMETER TMREFN=1 INTEGER*4 ITMP4 DIMENSION BALCTL(24,7),INTRVL(10) REAL SECNDS,RAN,TIMX BYTE NOWRAP(2),PDLDSP(3) % DATA NOWRAP / "24,0 / DATA PDLDSP / BALCHR,SPACE,BALCHR / DATA INTRVL / 500,350,300,250,200,150,125,100,75,50 / DATA BALCTL / 0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1, 0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,1, 0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1, 0,1,0,1,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,1,0,0,1,0, 0,1,0,1,0,0,1,0,1,0,0,1,0,1,0,1,0,0,1,0,1,0,0,1, 0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1, 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1 / DATA BOARD / ULCOR,HORIZ,TDOWN,HORIZ,TDOWN,HORIZ,TDOWN,HORIZ,TDOWN, HORIZ,TDOWN,HORIZ,TDOWN,HORIZ,TDOWN,HORIZ,TDOWN,HORIZ,TDOWN,HORIZ, TDOWN,HORIZ,TDOWN,HORIZ,TDOWN,HORIZ,TDOWN,HORIZ,URCOR, TRIGHT,HORIZ,CROSS,HORIZ,CROSS,HORIZ,CROSS,HORIZ,CROSS,HORIZ, CROSS,HORIZ,CROSS,HORIZ,CROSS,HORIZ,CROSS,HORIZ,CROSS,HORIZ,CROSS, HORIZ,CROSS,HORIZ,CROSS,HORIZ,CROSS,HORIZ,TLEFT, TRIGHT,HORIZ,CROSS,HORIZ,CROSS,HORIZ,CROSS,HORIZ,CROSS,HORIZ, CROSS,HORIZ,CROSS,HORIZ,CROSS,HORIZ,CROSS,HORIZ,CROSS,HORIZ,CROSS, HORIZ,CROSS,HORIZ,CROSS,HORIZ,CROSS,HORIZ,TLEFT, TRIGHT,HORIZ,CROSS,HORIZ,CROSS,HORIZ,CROSS,HORIZ,CROSS,HORIZ, CROSS,HORIZ,CROSS,HORIZ,CROSS,HORIZ,CROSS,HORIZ,CROSS,HORIZ,CROSS, HORIZ,CROSS,HORIZ,CROSS,HORIZ,CROSS,HORIZ,TLEFT, TRIGHT,HORIZ,CROSS,HORIZ,CROSS,HORIZ,CROSS,HORIZ,CROSS,HORIZ, CROSS,HORIZ,CROSS,HORIZ,CROSS,HORIZ,CROSS,HORIZ,CROSS,HORIZ,CROSS, HORIZ,CROSS,HORIZ,CROSS,HORIZ,CROSS,HORIZ,TLEFT, LLCOR,HORIZ,TUP,HORIZ,TUP,HORIZ,TUP,HORIZ,TUP,HORIZ, TUP,HORIZ,TUP,HORIZ,TUP,HORIZ,TUP,HORIZ,TUP,HORIZ, TUP,HORIZ,TUP,HORIZ,TUP,HORIZ,TUP,HORIZ,LRCOR / DATA DSPCHR / 5*SPACE,LRCOR,URCOR,TLEFT,SPACE,LLCOR,ULCOR, TRIGHT,HORIZ,TUP,TDOWN,CROSS / % DATA PDLCHR / SPACE,3*"157,SPACE,0 / # # GENERATE THE SEED FOR THE PSEUDO-RANDOM NUMBER GENERATOR # TIMX = SECNDS(0.) SEED = TIMX / 100 SEED = SEED * 100 SEED = (TIMX - SEED + 1) * 10000 # # INITIALIZE # CALL GETADR(PRL,NOWRAP) #SET VT100 TO NO WRAPAROUND PRL(2) = 2 CALL WTQIO(SFSMC,5,2,,,PRL) OPEN (UNIT=5,CARRIAGECONTROL='NONE') CALL GETADR(PRL(1),INPAST) #ATTACH VT100 WITH PRL(2) = 0 #AST RECOGNITION CALL GETADR(PRL(3),CNTRLC) CALL WTQIO(IOATA,5,2,,,PRL) PRL(2) = 1 PRL(3) = 0 CALL UVT100(ANSI) #SET VT100 TO ANSI MODE CALL UVT100(RM,5) #SET SCREEN TO WHITE ON BLACK CALL UVT100(RM,7) #DISABLE VT100 AUTOWRAPAROUND CALL UVT100(SCS,0,1) #LOAD STANDARD CHARACTER SET CALL UVT100(SCS,1,2) #LOAD GRAPHICS CHARACTER SET CALL UVT100(SM,8) #ENABLE AUTOREPEAT CALL GETADR(PRL,SHFOUT) #SELECT GRAPHICS SET CALL WTQIO(IOWVB,5,2,,,PRL) OLDSCO = -1 OLDPDL = -1 PDLCNT = 3 #NUMBER OF PADDLES FOR GAME CYCTIM = 4 CALL START #DRAW INITIAL BOARD # # MAIN CONTROL LOOP. ONLY EXIT FROM THIS LOOP IS # GAME ENDING OR PLAYER TYPING CONTROL-C. # REPEAT [ #LOOP EVERY CYCTIM CLOCK TICKS CYCLE = CYCLE + 1 #INCREMENT CURRENT CYCLE NO. IF (CYCLE > 24) #(USED TO CONTROL BALL SPEED) CYCLE = 1 TIMER = TIMER + 1 CALL MARK(TMREFN,CYCTIM,1) #START TIMER. CALL PDLMOV #TEST FOR PADDLE MOTION ITMP4 = (SCORE / 2100) + 1 #SPEED OF BALL IS BASED ON IF (ITMP4 > 10) #PLAYER'S SCORE AND ELAPSED ITMP4 = 10 #TIME SINCE LAST SPEED CHANGE BALIDX = ((TIMER-CURTIM) / INTRVL(ITMP4)) + 1 IF (BALIDX > 7) BALIDX = 7 IF (BALCTL(CYCLE,BALIDX) == 1) #IF OK ON THIS CYCLE, CALL BALMOV #MOVE THE BALL. CALL PDLMOV #TEST FOR PADDLE MOTION. IF (SCORE != OLDSCO) [ #DISPLAY SCORE IF CHANGED CALL UVT100(CUP,2,34) #FROM LAST DISPLAY. WRITE (5,100) SCORE OLDSCO = SCORE ] IF (PDLCNT != OLDPDL) [ #DISPLAY NUMBER OF PADDLES IF (PDLCNT == 1) #IF CHANGED FROM LAST DISPLAY PDLDSP(1) = SPACE IF (PDLCNT == 2) PDLDSP(3) = SPACE CALL UVT100(CUP,BMAR,37) CALL GETADR(PRL,PDLDSP) PRL(2) = 3 CALL WTQIO(IOWVB,5,2,,,PRL) PRL(2) = 1 OLDPDL = PDLCNT ] CALL WAITFR(TMREFN) #WAIT FOR END OF THIS CYCLE ] UNTIL (NEWDIR == -1) #PLAYER REQUEST TO END GAME CALL GETADR(PRL,SHFIN) #REENABLE NORMAL CHARACTER SET CALL WTQIO(IOWVB,5,2,,,PRL) CALL UVT100(ED,2) #ERASE SCREEN CALL UVT100(CUP,1,1) #HOME CURSOR CALL EXIT #EXIT TASK 100 FORMAT (I6) END