'===========================================================================
' Subject: PING PONG                          Date: 02-12-96 (00:00)       
'  Author: David A. Wicker                    Code: QB, QBasic, PDS        
'  Origin: www.lookup.com/hompages/62101/b  Packet: GAMES.ABC
'===========================================================================
'
  ' Ping Pong Competition, minimal programming
  ' (C) 1996+ David A. Wicker

  ' LIMITATIONS: NUM LOCK MUST BE ON
  '              REQ. SCREEN 7
  '              B&W GRAPHICS
  '              NO SOUND

  ' FEATURES: Paddle English
  '           Ball Patterns broken at high speeds
  '           Game gets harder as player gets better
  '           Game End at score of 10
  '           Flicker-free graphics

  ' INSTRUCTIONS: Use arrow keystrokes "4" and "6" to move Left and Right
  '               "5" to stop acceleration
  '               "E" to end game
  '               [SPACEBAR] to serve ball

  ' STRATEGIES: Put "English" on the ball as early as you can
  '             Try to beat my best score of 7
  '             before the computer reached 10
 
  RANDOMIZE TIMER
  SCREEN 7, 0, 1, 0
  CH = 120
  PH = 120
  LP = 1
Again:
  CLS
  LOCATE 1, 5
  PRINT PS; TAB(35); CS;
  LINE (CH, 10)-(CH + 39, 13), , BF
  LINE (PH, 196)-(PH + 39, 199), , BF
  K$ = INKEY$
  IF A = 0 THEN
    LOCATE 12, 10
    IF PS < 10 AND CS < 10 THEN
	PRINT "PRESS [SPACEBAR] TO SERVE"
    ELSE
	PRINT "*   G A M E   O V E R   *"
	PCOPY 1, 0
	END
    END IF
    IF K$ = " " THEN
	X = 156
	Y = 106
	DX = INT(RND * 3) * 2 - 3
	DY = LP * INT(RND * 3) + LP
	A = 1
    END IF
  ELSE
    IF CH + 16 < X THEN CH = CH + PS + 1
    IF CH + 16 > X THEN CH = CH - PS - 1
    LINE (X, Y)-(X + 7, Y + 7), , BF
    X = X + DX
    Y = Y + DY
    IF X < 0 OR X > 311 THEN DX = -DX
    IF Y < -4 - DY THEN
	PS = PS + 1
	A = 0
	LP = -1
    END IF
    IF Y > 199 + DY THEN
	CS = CS + 1
	A = 0
	LP = 1
    END IF
    IF Y < 14 - DY AND ABS((X + 4) - (CH + 20)) < 20 THEN
	DY = ABS(DY) + 1
	IF DY > 8 THEN DX = DX + INT(RND * 5) - 2
	Y = 18
	DX = DX + ((X + 4) - (CH + 20)) / 6
Paddle:
	IF ABS(DX) > 8 THEN DX = SGN(DX)
    ELSEIF Y > 189 - DY AND ABS((X + 4) - (PH + 20)) < 20 THEN
	DY = -ABS(DY) - 1
	IF DY < -8 THEN DX = DX + INT(RND * 5) - 2
	Y = 190
	DX = DX + ((X + 4) - (PH + 20)) / 6
	GOTO Paddle
    END IF
  END IF
  IF K$ = "4" THEN APH = APH - 3
  IF K$ = "6" THEN APH = APH + 3
  IF K$ = "5" THEN APH = 0
  IF ABS(APH) > 20 THEN APH = SGN(APH) * 20
  PH = PH + APH
  IF PH < -10 OR PH > 309 THEN APH = -APH
  PCOPY 1, 0
  IF K$ = "E" THEN END
  GOTO Again

