Source Code:
' QBasic Advanced Pong for the PC Version 2.0
'
'This program is similar to the original Pong game, where a ball bounced
'across the screen and the players used paddles to bounce the ball back and
'forth. However, in the original Pong, players could only move up and down.
'In this game they can move left and right as well. Also different from the
'original Pong game, the ball can be cradled in this game. You will see what
'that means as you play the game.
'
'Controls:
'For Player 1, who is the blue paddle on the right, "8" is up, "2" is down,
'"6" is right, "4" is left, and "5" is the brake, which stops his movement.
'For Player 2, who is the red paddle on the left, "I" is up, "M" or "," is
'down, "L" is right, "J" is left, and "K" is the brake, which stops his movement.
'Press "F5" to start the game
'
'
'(More, press Page Down)
'If the game flickers too much, or goes too fast, make the number after
'"Flicker.Control =" bigger. If the game goes too slow, make the number
'smaller. Remember, on slower computers, there is always a trade-off
'between graphics quality and game speed.
Flicker.Control = 60000
'
'On some computers, the beep that this program does may slow down game play.
'If this is the case, make the number after "noise =" 0. If you want the beep
'make the number 1.
noise = 0
'
'This is Version 2.0 of Advanced Pong for the PC, differing from Version 1.0
'in the fact that it's easier to control, and the graphics are slightly
'better. Also, this version gives the user "Flicker.Control", and "noise",
'to allow the program to run better on their system.
'
'
'Programmed by Jeff Lewis
'
'
'
'
'
'
startover:
SCREEN 10
CLS
PRINT "What is the name of player 1?"
INPUT player1.name$
PRINT "What is the name of player 2?"
INPUT player2.name$
PRINT "How many rounds do you want to play?"
INPUT round.total
player1.score = 0
player2.score = 0
rounds = 0
new:
rounds = rounds + 1
'draw the field
SCREEN 7
CLS
PAINT (5, 5), (2)
LINE (0, 0)-(3, 199), 0, BF
LINE (0, 199)-(319, 194), 0, BF
LINE (318, 199)-(314, 0), 0, BF
PAINT (1, 1), (15), (2)
LINE (0, 0)-(0, 200), 0
LINE (1, 74)-(3, 144), 0, BF
LINE (314, 74)-(319, 144), 0, BF
LINE (1, 0)-(319, 20), 15, BF
LINE (0, 0)-(320, 15), 0, BF
LINE (317, 0)-(319, 199), 0, BF
LOCATE 1, 1
IF player1.score > player2.score THEN
COLOR 9
ELSE
COLOR 12
END IF
IF player1.score = player2.score THEN
COLOR 15
END IF
PRINT "Score:"; " "; player2.name$; ":"; player2.score; " "; player1.name$; ":"; player1.score
IF rounds > round.total THEN
GOTO quit
END IF
player1.x = 300
player1.y = 95
player2.x = 12
player2.y = 95
player1.move$ = "n"
player2.move$ = "n"
ball.x = 163
ball.y = 3 * INT(55 * RND) + 26
x = INT(2 * RND)
IF x = 1 THEN
ball.ns = 3
ELSE
ball.ns = -3
END IF
x = INT(2 * RND)
IF x = 1 THEN
ball.ew = 3
ELSE
ball.ew = -3
END IF
ball.x.2 = ball.x
ball.y.2 = ball.y
player1.x.2 = player1.x
player1.y.2 = player1.y
player2.x.2 = player2.x
player2.y.2 = player2.y
player1.ns = 0
player1.ew = 0
player2.ns = 0
player2.ew = 0
a:
CIRCLE (ball.x.2, ball.y.2), 6, 2
PAINT (ball.x.2, ball.y.2), (2), (2)
LINE (player1.x.2, player1.y.2 + 1)-(player1.x.2 + 6, player1.y.2 + 23), 2, BF
LINE (player2.x.2, player2.y.2 + 1)-(player2.x.2 + 6, player2.y.2 + 23), 2, BF
LINE (player1.x, player1.y + 1)-(player1.x + 6, player1.y + 23), 9, BF
LINE (player2.x, player2.y + 1)-(player2.x + 6, player2.y + 23), 12, BF
CIRCLE (ball.x, ball.y), 6, 14
PAINT (ball.x, ball.y), (14), (14)
FOR count = 1 TO Flicker.Control
NEXT count
ball.x.2 = ball.x
ball.y.2 = ball.y
player1.x.2 = player1.x
player1.y.2 = player1.y
player2.x.2 = player2.x
player2.y.2 = player2.y
ball.x = ball.x + ball.ew
ball.y = ball.y + ball.ns
player1.x = player1.x + player1.ew
player1.y = player1.y + player1.ns
player2.x = player2.x + player2.ew
player2.y = player2.y + player2.ns
IF ball.x - 6 <= 6 AND ball.y >= 74 AND ball.y <= 144 THEN
GOTO goal.1
END IF
IF ball.x + 6 >= 312 AND ball.y >= 74 AND ball.y <= 144 THEN
GOTO goal.2
END IF
IF ball.y - 6 <= 20 THEN
ball.ns = 3
END IF
IF ball.y + 6 >= 194 THEN
ball.ns = -3
END IF
IF ball.x - 6 <= 6 THEN
ball.ew = 3
END IF
IF ball.x + 6 >= 312 THEN
ball.ew = -3
END IF
IF ball.x + 6 >= player1.x AND ball.x - 6 <= player1.x + 6 AND ball.y >= player1.y AND ball.y <= player1.y + 24 THEN
ball.ew = -ball.ew
IF noise = 1 THEN
BEEP
END IF
END IF
IF ball.x + 6 >= player2.x AND ball.x - 6 <= player2.x + 6 AND ball.y >= player2.y AND ball.y <= player2.y + 24 THEN
ball.ew = -ball.ew
IF noise = 1 THEN
BEEP
END IF
END IF
IF player1.y <= 20 THEN
player1.ns = 3
END IF
IF player1.y + 24 >= 194 THEN
player1.ns = -3
END IF
IF player1.x <= 6 THEN
player1.ew = 3
END IF
IF player1.x + 6 >= 312 THEN
player1.ew = -3
END IF
IF player2.y <= 20 THEN
player2.ns = 3
END IF
IF player2.y + 24 >= 194 THEN
player2.ns = -3
END IF
IF player2.x <= 6 THEN
player2.ew = 3
END IF
IF player2.x + 6 >= 312 THEN
player2.ew = -3
END IF
move$ = INKEY$
SELECT CASE move$
CASE "p"
LOCATE 12, 3
COLOR 15
PRINT "Game Paused, Hit Space to Continue"
WHILE INKEY$ <> " "
WEND
LINE (10, 44)-(310, 144), 2, BF
CASE "q"
GOTO quit
'player1 change in movement
CASE "8"
player1.ns = -3
CASE "6"
player1.ew = 3
CASE "2"
player1.ns = 3
CASE "4"
player1.ew = -3
CASE "5"
player1.ew = 0
player1.ns = 0
'player2 change in movement
CASE "i"
player2.ns = -3
CASE "l"
player2.ew = 3
CASE ","
player2.ns = 3
CASE "m"
player2.ns = 3
CASE "j"
player2.ew = -3
CASE "k"
player2.ew = 0
player2.ns = 0
END SELECT
GOTO a
goal.1:
LOCATE 14, 2
COLOR 9
PRINT "Goal!"
player1.score = player1.score + 1
WHILE INKEY$ <> " "
WEND
GOTO new
goal.2:
COLOR 4
LOCATE 14, 35
PRINT "Goal!"
player2.score = player2.score + 1
WHILE INKEY$ <> " "
WEND
GOTO new
quit:
LOCATE 12, 6
COLOR 4
PRINT " Game Over "
LOCATE 13, 6
PRINT "Do you want to play again? y/n"
DO
y.n$ = INKEY$
LOOP UNTIL y.n$ = "y" OR y.n$ = "n"
IF y.n$ = "y" THEN
GOTO startover
END IF
|