'===========================================================================
' Subject: JOYSTICK PADDLE WARS               Date: Year of 1994           
'  Author: The ABC Programmer                 Code: QB, QBasic, PDS        
'  Origin: JOYSTICK,PADDLE,WARS             Packet: GAMES.ABC
'===========================================================================
'================================================
' JOYSTICK PADDLE WARS GAME by William Yu (1994)
'
' Requires a joystick installed
' There's no calibration, so you may have to
' change the joystick values to match your own
' or make a calibration at startup.
' The keyboard will not function properly unless
' you remove all occurances of STICK and STRIG
'================================================

DIM PAD(80), SHADOW(80), BALL(25)
CLS
SCREEN 7
V = STICK(0)
LOCATE 25, 8: COLOR 9: PRINT "Press a key to continue..."
LOCATE 1, 4: COLOR 10: PRINT "PADDLE WARS"; : COLOR 2: PRINT " VERSION 1.0"; : COLOR 13: PRINT " (C) 1994"
LOCATE 3, 8: COLOR 14: PRINT "PROGRAMMED BY WILLIAM YU"
LOCATE 5, 5: COLOR 12: PRINT CHR$(24): LOCATE 6, 3: PRINT CHR$(27); " * "; CHR$(26)
LOCATE 7, 5: PRINT CHR$(25)
CIRCLE (100, 42), 4, 12: PAINT (100, 42), 12
CIRCLE (115, 36), 4, 9: PAINT (115, 36), 9
CIRCLE (130, 42), 4, 10: PAINT (130, 42), 10
CIRCLE (115, 50), 4, 14: PAINT (115, 50), 14
LOCATE 8, 2: COLOR 11: PRINT "JOYSTICK": LOCATE 6, 20: PRINT "SHOOT"
LOCATE 10, 1: COLOR 15: PRINT "SIMPLE INSTRUCTIONS:"
LOCATE 12, 1: COLOR 7: PRINT "Red looking balls will fall from the sky"
PRINT "Your mission is to destroy those balls!"
PRINT "Easy no?"
PRINT : PRINT "To chicken out, press"; : COLOR 15: PRINT " ESC"
PRINT
COLOR 10: PRINT "You may use your keypad, but it will go"
PRINT "slower because of the joystick"
PRINT "interference."
PRINT : COLOR 14: PRINT "Arrow keys to move, "; : COLOR 12: PRINT "ENTER"; : COLOR 14: PRINT " to shoot"
I$ = INPUT$(1)
PADDLEPLAY:
CLS
CIRCLE (160, 150), 20, 10, , , 1 / 9
PAINT (160, 150), 10
GET (134, 145)-(186, 155), PAD
LINE (0, 200)-(320, 180), 11, BF
X = 135: Y = 145: Z = 185
CIRCLE (X + 25, 190), 20, 3, , , 1 / 9
PAINT (X + 24, 190), 3
GET (134, 185)-(186, 195), SHADOW
PSET (140, 190), 11
PSET (140, 150), 0
LINE (0, 20)-(1, 140), 9, BF
LINE (2, 20)-(10, 140), 11, BF
LINE (10, 20)-(10, 140), 3
LINE (8, 20)-(8, 140), 15

RANDOMIZE TIMER
A = INT((300 - 20 + 1) * RND + 20)
E2 = INT((280 - 20 + 1) * RND + 20)
E3 = INT((280 - 20 + 1) * RND + 20)
CIRCLE (A, 20), 4, 12
PAINT (A, 20), 12
GET (A - 5, 14)-(A + 5, 24), BALL
E = A - 5: F = 14
M = 20: N = 3

DO
  T = STICK(0)
  S = STICK(1)
  FOR C = 1 TO 10
    IF T = C THEN GOSUB MOVELEFT
    IF S = C THEN GOSUB UP
  NEXT C
  FOR CC = V + V - 10 TO V + V
    IF T = CC THEN GOSUB MOVERIGHT
    IF S = CC THEN GOSUB DOWN
  NEXT CC
  V$ = INKEY$
    IF V$ = CHR$(0) + "K" THEN GOSUB MOVELEFT
    IF V$ = CHR$(0) + "M" THEN GOSUB MOVERIGHT
    IF V$ = CHR$(0) + "H" THEN GOSUB UP
    IF V$ = CHR$(0) + "P" THEN GOSUB DOWN
    IF V$ = CHR$(13) THEN GOSUB SHOOT
    IF V$ = "+" AND N < 6 THEN N = N + 1
    IF V$ = "-" AND N > 1 THEN N = N - 1
    IF STRIG(0) THEN GOSUB SHOOT
    IF STRIG(2) THEN GOSUB SHOOT
    IF STRIG(4) THEN GOSUB SHOOT
    IF STRIG(6) THEN GOSUB SHOOT
  GOSUB ENEMY
  LOCATE 1, 1: COLOR 15: PRINT "SCORE: "; : COLOR 14: PRINT " Computer:"; : COLOR 12: PRINT EN; : COLOR 14: PRINT "You:"; : COLOR 10: PRINT P
LOOP UNTIL V$ = CHR$(27)
GOTO QUITPLAY

ENEMY:
F = F + 2
IF P >= 5 THEN F2 = F2 + 1
IF P >= 25 THEN F3 = F3 + 1.5
PUT (E, F), BALL, PSET
IF P >= 5 THEN PUT (E2, F2), BALL, PSET
IF P >= 25 THEN PUT (E3, F3), BALL, PSET
IF F >= 165 THEN EN = EN + 1: PUT (E, F), BALL: F = 14: RANDOMIZE TIMER: E = INT((300 - 20 + 1) * RND + 20)
IF F2 >= 165 THEN EN = EN + 1: PUT (E2, F2), BALL: F2 = 14: RANDOMIZE TIMER: E2 = INT((280 - 20 + 1) * RND + 20)
IF F3 >= 165 THEN EN = EN + 1: PUT (E3, F3), BALL: F3 = 14: RANDOMIZE TIMER: E3 = INT((280 - 20 + 1) * RND + 20)
RETURN

MOVELEFT:
IF X <= 5 THEN RETURN
X = X - N
PUT (X, Y), PAD, PSET
PUT (X, Z), SHADOW, PSET
RETURN

MOVERIGHT:
IF X >= 262 THEN RETURN
X = X + N
PUT (X, Y), PAD, PSET
PUT (X, Z), SHADOW, PSET
RETURN

UP:
IF Y <= 145 THEN RETURN
Y = Y - 2
IF Z > 180 THEN Z = Z - 1
PUT (X, Y), PAD, PSET
PUT (X, Z), SHADOW, PSET
RETURN

DOWN:
IF Y >= 168 THEN RETURN
Y = Y + 2
IF Z < 189 THEN Z = Z + 1
PUT (X, Y), PAD, PSET
PUT (X, Z), SHADOW, PSET
RETURN

SHOOT:
LINE (0, M)-(10, M + 1), 0, BF
M = M + 1
IF P >= 25 THEN LINE (X + 15, Y - 5)-(X + 15, Y - 100 - P), 9
IF P >= 25 THEN LINE (X + 14, Y - 5)-(X + 14, Y - 100 - P), 11
IF P >= 25 THEN LINE (X + 39, Y - 5)-(X + 39, Y - 100 - P), 9
IF P >= 25 THEN LINE (X + 38, Y - 5)-(X + 38, Y - 100 - P), 11
LINE (X + 26, Y - 5)-(X + 26, Y - 100 - P), 11
LINE (X + 25, Y - 5)-(X + 25, Y - 100 - P), 9
FOR D = 1 TO 200: NEXT D
FOR T = 18 TO 25
IF X = E - T AND F > 40 - P THEN P = P + 1: PUT (E, F), BALL: F = 14: RANDOMIZE TIMER: E = INT((300 - 20 + 1) * RND + 20): EXIT FOR
IF X = E2 - T AND F2 > 40 - P THEN P = P + 1: PUT (E2, F2), BALL: F2 = 14: RANDOMIZE TIMER: E2 = INT((280 - 20 + 1) * RND + 20): EXIT FOR
IF X = E3 - T AND F3 > 40 - P THEN P = P + 1: PUT (E3, F3), BALL: F3 = 14: RANDOMIZE TIMER: E3 = INT((280 - 20 + 1) * RND + 20): EXIT FOR
IF P >= 25 AND X = E - T + 15 AND F > 40 - P THEN P = P + 1: PUT (E, F), BALL: F = 14: RANDOMIZE TIMER: E = INT((300 - 20 + 1) * RND + 20): EXIT FOR
IF P >= 25 AND X = E2 - T + 15 AND F2 > 40 - P THEN P = P + 1: PUT (E2, F2), BALL: F2 = 14: RANDOMIZE TIMER: E2 = INT((280 - 20 + 1) * RND + 20): EXIT FOR
IF P >= 25 AND X = E3 - T + 15 AND F3 > 40 - P THEN P = P + 1: PUT (E3, F3), BALL: F3 = 14: RANDOMIZE TIMER: E3 = INT((280 - 20 + 1) * RND + 20): EXIT FOR
IF P >= 25 AND X = E - T - 13 AND F > 40 - P THEN P = P + 1: PUT (E, F), BALL: F = 14: RANDOMIZE TIMER: E = INT((300 - 20 + 1) * RND + 20): EXIT FOR
IF P >= 25 AND X = E2 - T - 13 AND F2 > 40 - P THEN P = P + 1: PUT (E2, F2), BALL: F2 = 14: RANDOMIZE TIMER: E2 = INT((280 - 20 + 1) * RND + 20): EXIT FOR
IF P >= 25 AND X = E3 - T - 13 AND F3 > 40 - P THEN P = P + 1: PUT (E3, F3), BALL: F3 = 14: RANDOMIZE TIMER: E3 = INT((280 - 20 + 1) * RND + 20): EXIT FOR
NEXT T
LINE (X + 26, Y - 5)-(X + 25, Y - 100 - P), 0, BF
IF P >= 25 THEN LINE (X + 15, Y - 5)-(X + 14, Y - 100 - P), 0, BF
IF P >= 25 THEN LINE (X + 39, Y - 5)-(X + 38, Y - 100 - P), 0, BF
IF M = 140 THEN GOTO STOPPLAY
RETURN

STOPPLAY:
LOCATE 10, 11: COLOR 15: PRINT "ANOTHER GAME? <Y/N>"
HUH:
I$ = INPUT$(1)
IF UCASE$(I$) = "Y" THEN GOTO PADDLEPLAY
IF UCASE$(I$) = "N" THEN GOTO QUITPLAY
GOTO HUH

QUITPLAY:
LOCATE 10, 11: COLOR 15: PRINT "THANKS FOR PLAYING!!!"
SLEEP 1

