Listing of file='TURRET.BAS;02' on disk='vmedia/joystick-sideB-sector.ccvf'
0 REM *** LASER TURRET *** 1 REM ONE PLAYER CAN FIRE THE LASER BY PUSHING THE BUTTON 2 REM ON HIS JOYSTICK, AND THE OTHER PLAYER HAS TO 3 REM MANOEUVRE CLOSE ENOUGH TO BOMB THE LASER BY PUSHING 4 REM HIS BUTTON. THE LASER IS AT THE CENTER OF THE SCREEN 5 REM (BLUE DOT) AND THE JOYSTICK CONTROLS DIRECTION OF FIRE. 6 REM THE OTHER JOYSTICK CONTROLS THE SPEED OF A GREEN DOT. 7 I = PEEK (33209):IF I = 0 THEN 7 8 I = RND (- I) 10 PLOT 6,6,12,15:PRINT "LASER TURRET":PRINT 20 INPUT "TYPE <RETURN> WHEN READY";A$ 50 PLOT 12,29,17,3,32,16,6,4,96 60 LX = 64* RND (1):LY = 32* RND (1) 70 KT = 5 100 KT = KT- 1:IF KT > 0 GOTO 300 101 KT = 5 102 A = INP (247):REM CHECK PUSH BUTTON REGISTER 103 A = A- 128- 64:REM 128=>EOC FLAG ON A/D, 64=>BUTTON ON NO. 3 104 IF A > 0 GOTO 300 105 JN = 254 110 GOSUB 2000: REM READ JOYSTICK COORDS 115 REM THE LASER IS CENTER-SCREEN, ADJUST COORDS 120 X = X- 63:Y = Y- 63 130 REM FIRE THE LASER BY DRAWING A VECTOR IN WHITE THEN BLACK 160 PLOT 6,7,2,63,63,242,63+ X,63+ Y,255 170 FOR I= 1 TO 200:NEXT I 180 PLOT 6,0,2,63,63,242,63+ X,63+ Y,255 185 PLOT 3,32,16,6,4,96 190 CH = PEEK (28672+ 128* TY+ 2* TX): REM CHECK REFRESH RAM FOR DOT 200 IF CH < > 96 GOTO 800:REM IF DOT NOT FOUND, IT IS DESTROYED 300 JN = 252 305 REM NOW LET THE OTHER GUY HAVE A CHANCE TO MOVE 310 GOSUB 2000 320 REM THE JOYSTICK ACTS LIKE AN ACCELERATOR ON A CAR 330 REM THIS IS NECESSARY OR ELSE IT IS IMPOSSIBLE TO HIT THE 340 REM MOVING TARGET BECAUSE HE CAN ZAP RIGHT ACROSS THE 350 REM SCREEN IN ONE MOVE!!! 480 CC = 2 485 X = LX+ (X- 63)/ 10:Y = LY+ (Y- 63)/ 10:REM SLOW DOWN TARGET 490 GOSUB 1000 500 A = INP (247): REM SEE IF "BOMBER" HAS PUSHED HIS BUTTON 505 A = A- 128 510 IF A > 64 THEN A = A- 64 520 A = A- 32:REM 32=> PUSH BUTTON ON NO. 2 JOYSTICK 530 IF A > 0 GOTO 100 535 REM CHECK IF "BOMBER" IS WITHIN 100 OF THE "LASER" 540 R = (X- 63)* (X- 63)+ (Y- 63)* (Y- 63) 550 IF R > 100 GOTO 100 560 LX = 32:LY = 16 570 PLOT 8,6,65:PRINT " LASER DESTROYED":PRINT 580 GOTO 820 795 REM "BOMBER" IS DESTROYED 800 LX = INT (LX/ 2):LY = 31- INT (LY/ 4) 810 PLOT 8,6,65:PRINT " BLOWN AWAY!":PRINT 815 REM DISPLAY A FLASHING "EXPLOSION" AT LX,LY ON THE SCREEN 820 PLOT 3,LX,LY 825 FOR I= 1 TO 10 830 FOR J= 1 TO 25:NEXT J:PLOT 6,4,42,26:FOR J= 1 TO 25:NEXT J:PLOT 6,1,42,26 835 NEXT I 840 PLOT 6,2,3,0,4:INPUT "ANOTHER GAME (Y/N) ? ";A$ 850 IF A$ = "Y" GOTO 7 860 PLOT 12: END 1000 REM ROUTINE TO PLOT A MOVING POINT ON THE SCREEN 1005 IF X < 0 THEN X = 0 1010 IF X > 127 THEN X = 127 1020 IF Y < 0 THEN Y = 0 1030 IF Y > 127 THEN Y = 127 1045 PLOT 6,CC 1050 TX = INT (X/ 2):TY = 31- INT (Y/ 4) 1052 SX = INT (LX/ 2):SY = 31- INT (LY/ 4) 1057 IF SX > 61 AND SY= 31 THEN SX = 62 1060 IF TX> 61 AND TY= 31 THEN TX= 62 1080 PLOT 3,SX,SY,32 1090 PLOT 3,TX,TY,96 1100 LX = X:LY = Y 1110 RETURN 2000 REM ROUTINE TO READ X-Y COORDS OF JOYSTICK NO. JN 2005 OUT JN+ 1,1 2010 REM GET X-COORD AS A VALUE FROM 0 TO 255 2020 X = INP (JN+ 1) 2030 OUT JN,1 2040 REM SAME FOR Y-COORD 2050 Y = INP (JN) 2055 REM NOTE HOW THE RAW DATA IS CONVERTED TO SCREEN COORDS 2060 X = X- 70:Y = Y- 70: REM OTHER "FIXES" CAN BE USED ALSO 2065 REM THE COORDS MUST BE CUT OFF AT TOP AND BOTTOM 2070 IF X > 127 THEN X = 127 2080 IF X < 0 THEN X = 0 2090 IF Y > 127 THEN Y = 127 2100 IF Y < 0 THEN Y = 0 2200 RETURN