Compucolor.org – Virtual Media

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