Created
September 30, 2017 09:29
-
-
Save shreyansh26/c20b06b392584144a6e1bf9f99284c05 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Implementation of classic arcade game Pong | |
try: | |
import simplegui | |
except ImportError: | |
import SimpleGUICS2Pygame.simpleguics2pygame as simplegui | |
import random | |
# initialize globals - pos and vel encode vertical info for paddles | |
WIDTH = 600 | |
HEIGHT = 400 | |
BALL_RADIUS = 10 | |
PAD_WIDTH = 8 | |
PAD_HEIGHT = 80 | |
HALF_PAD_WIDTH = PAD_WIDTH / 2 | |
HALF_PAD_HEIGHT = PAD_HEIGHT / 2 | |
LEFT = False | |
RIGHT = True | |
paddle1_pos=HEIGHT/2.5 | |
paddle2_pos=HEIGHT/2.5 | |
paddle1_vel=0 | |
paddle2_vel=0 | |
paddle_vel=5 | |
ball_pos=[WIDTH/2, HEIGHT/2] | |
ball_vel=[0,1] | |
score1=0 | |
score2=0 | |
# initialize ball_pos and ball_vel for new bal in middle of table | |
# if direction is RIGHT, the ball's velocity is upper right, else upper left | |
def spawn_ball(direction): | |
global ball_pos, ball_vel # these are vectors stored as lists | |
ball_pos=[WIDTH/2, HEIGHT/2] | |
ball_vel[0]=-(random.randrange(180,320) / 100) | |
if direction: | |
ball_vel[0]*=-1 | |
ball_vel[1]= -random.randrange(80, 200) / 100 | |
# define event handlers | |
def new_game(): | |
global paddle1_pos, paddle2_pos, paddle1_vel, paddle2_vel # these are numbers | |
global score1, score2 # these are ints | |
spawn_ball(0) | |
def draw(canvas): | |
global score1, score2, paddle1_pos, paddle2_pos, ball_pos, ball_vel | |
# draw mid line and gutters | |
canvas.draw_line([WIDTH / 2, 0],[WIDTH / 2, HEIGHT], 1, "White") | |
canvas.draw_line([PAD_WIDTH, 0],[PAD_WIDTH, HEIGHT], 1, "White") | |
canvas.draw_line([WIDTH - PAD_WIDTH, 0],[WIDTH - PAD_WIDTH, HEIGHT], 1, "White") | |
# update ball | |
ball_pos[0] += ball_vel[0] | |
ball_pos[1] += ball_vel[1] | |
if (ball_pos[0]<= PAD_WIDTH + BALL_RADIUS or ball_pos[0]>= WIDTH-PAD_WIDTH-BALL_RADIUS): | |
ball_vel[0]*=-1 | |
if ball_pos[0]>WIDTH/2: | |
if (ball_pos[1]<paddle2_pos or ball_pos[1]>paddle2_pos+PAD_HEIGHT): | |
score1+=1 | |
spawn_ball(LEFT) | |
else: | |
ball_vel[0]+= .1 *ball_vel[0] | |
if ball_pos[0]<WIDTH/2: | |
if (ball_pos[1]<paddle1_pos or ball_pos[1]>paddle1_pos+PAD_HEIGHT): | |
score2+=1 | |
spawn_ball(RIGHT) | |
else: | |
ball_vel[0]+= .1 *ball_vel[0] | |
if ball_pos[1] <= BALL_RADIUS or ball_pos[1] >= (HEIGHT - BALL_RADIUS): | |
ball_vel[1] *= -1 | |
# draw ball | |
canvas.draw_circle(ball_pos,BALL_RADIUS,2,"White","Green") | |
# update paddle's vertical position, keep paddle on the screen | |
global paddle1_vel, paddle2_vel | |
if (paddle1_pos <= HEIGHT - PAD_HEIGHT and paddle1_vel > 0) or (paddle1_pos >= 0 and paddle1_vel < 0) : | |
paddle1_pos += paddle1_vel | |
elif (paddle2_pos <= HEIGHT - PAD_HEIGHT and paddle2_vel > 0) or (paddle2_pos >= 0 and paddle2_vel < 0) : | |
paddle2_pos += paddle2_vel | |
# draw paddles | |
canvas.draw_polygon([[0,paddle1_pos],[PAD_WIDTH,paddle1_pos], [PAD_WIDTH,paddle1_pos+PAD_HEIGHT],[0,paddle1_pos+PAD_HEIGHT]],1,"Green","White") | |
canvas.draw_polygon([[WIDTH-PAD_WIDTH,paddle2_pos],[WIDTH,paddle2_pos], [WIDTH,paddle2_pos+PAD_HEIGHT],[WIDTH-PAD_WIDTH,paddle2_pos+PAD_HEIGHT]],1,"Green","White") | |
# determine whether paddle and ball collide | |
# draw scores | |
canvas.draw_text(str(score1), [225, 80], 60, "pink") | |
canvas.draw_text(str(score2), [350, 80], 60, "pink") | |
def keydown(key): | |
global paddle1_vel, paddle2_vel | |
#Player1 | |
if key==simplegui.KEY_MAP["w"]: | |
paddle1_vel= -paddle_vel | |
if key==simplegui.KEY_MAP["s"]: | |
paddle1_vel= +paddle_vel | |
#Player2 | |
if key==simplegui.KEY_MAP["up"]: | |
paddle2_vel= -paddle_vel | |
if key==simplegui.KEY_MAP["down"]: | |
paddle2_vel= +paddle_vel | |
def keyup(key): | |
global paddle1_vel, paddle2_vel | |
#Player1 | |
if key==simplegui.KEY_MAP["w"]: | |
paddle1_vel= 0 | |
if key==simplegui.KEY_MAP["s"]: | |
paddle1_vel= 0 | |
#Player2 | |
if key==simplegui.KEY_MAP["up"]: | |
paddle2_vel= 0 | |
if key==simplegui.KEY_MAP["down"]: | |
paddle2_vel= 0 | |
# create frame | |
frame = simplegui.create_frame("Pong", WIDTH, HEIGHT) | |
frame.set_draw_handler(draw) | |
frame.set_keydown_handler(keydown) | |
frame.set_keyup_handler(keyup) | |
frame.add_button("Restart",new_game,200) | |
# start frame | |
new_game() | |
frame.start() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment