-
-
Save vinothpandian/4337527 to your computer and use it in GitHub Desktop.
| #PONG pygame | |
| import random | |
| import pygame, sys | |
| from pygame.locals import * | |
| pygame.init() | |
| fps = pygame.time.Clock() | |
| #colors | |
| WHITE = (255,255,255) | |
| RED = (255,0,0) | |
| GREEN = (0,255,0) | |
| BLACK = (0,0,0) | |
| #globals | |
| WIDTH = 600 | |
| HEIGHT = 400 | |
| BALL_RADIUS = 20 | |
| PAD_WIDTH = 8 | |
| PAD_HEIGHT = 80 | |
| HALF_PAD_WIDTH = PAD_WIDTH / 2 | |
| HALF_PAD_HEIGHT = PAD_HEIGHT / 2 | |
| ball_pos = [0,0] | |
| ball_vel = [0,0] | |
| paddle1_vel = 0 | |
| paddle2_vel = 0 | |
| l_score = 0 | |
| r_score = 0 | |
| #canvas declaration | |
| window = pygame.display.set_mode((WIDTH, HEIGHT), 0, 32) | |
| pygame.display.set_caption('Hello World') | |
| # helper function that spawns a ball, returns a position vector and a velocity vector | |
| # if right is True, spawn to the right, else spawn to the left | |
| def ball_init(right): | |
| global ball_pos, ball_vel # these are vectors stored as lists | |
| ball_pos = [WIDTH/2,HEIGHT/2] | |
| horz = random.randrange(2,4) | |
| vert = random.randrange(1,3) | |
| if right == False: | |
| horz = - horz | |
| ball_vel = [horz,-vert] | |
| # define event handlers | |
| def init(): | |
| global paddle1_pos, paddle2_pos, paddle1_vel, paddle2_vel,l_score,r_score # these are floats | |
| global score1, score2 # these are ints | |
| paddle1_pos = [HALF_PAD_WIDTH - 1,HEIGHT/2] | |
| paddle2_pos = [WIDTH +1 - HALF_PAD_WIDTH,HEIGHT/2] | |
| l_score = 0 | |
| r_score = 0 | |
| if random.randrange(0,2) == 0: | |
| ball_init(True) | |
| else: | |
| ball_init(False) | |
| #draw function of canvas | |
| def draw(canvas): | |
| global paddle1_pos, paddle2_pos, ball_pos, ball_vel, l_score, r_score | |
| canvas.fill(BLACK) | |
| pygame.draw.line(canvas, WHITE, [WIDTH / 2, 0],[WIDTH / 2, HEIGHT], 1) | |
| pygame.draw.line(canvas, WHITE, [PAD_WIDTH, 0],[PAD_WIDTH, HEIGHT], 1) | |
| pygame.draw.line(canvas, WHITE, [WIDTH - PAD_WIDTH, 0],[WIDTH - PAD_WIDTH, HEIGHT], 1) | |
| pygame.draw.circle(canvas, WHITE, [WIDTH//2, HEIGHT//2], 70, 1) | |
| # update paddle's vertical position, keep paddle on the screen | |
| if paddle1_pos[1] > HALF_PAD_HEIGHT and paddle1_pos[1] < HEIGHT - HALF_PAD_HEIGHT: | |
| paddle1_pos[1] += paddle1_vel | |
| elif paddle1_pos[1] == HALF_PAD_HEIGHT and paddle1_vel > 0: | |
| paddle1_pos[1] += paddle1_vel | |
| elif paddle1_pos[1] == HEIGHT - HALF_PAD_HEIGHT and paddle1_vel < 0: | |
| paddle1_pos[1] += paddle1_vel | |
| if paddle2_pos[1] > HALF_PAD_HEIGHT and paddle2_pos[1] < HEIGHT - HALF_PAD_HEIGHT: | |
| paddle2_pos[1] += paddle2_vel | |
| elif paddle2_pos[1] == HALF_PAD_HEIGHT and paddle2_vel > 0: | |
| paddle2_pos[1] += paddle2_vel | |
| elif paddle2_pos[1] == HEIGHT - HALF_PAD_HEIGHT and paddle2_vel < 0: | |
| paddle2_pos[1] += paddle2_vel | |
| #update ball | |
| ball_pos[0] += int(ball_vel[0]) | |
| ball_pos[1] += int(ball_vel[1]) | |
| #draw paddles and ball | |
| pygame.draw.circle(canvas, RED, ball_pos, 20, 0) | |
| pygame.draw.polygon(canvas, GREEN, [[paddle1_pos[0] - HALF_PAD_WIDTH, paddle1_pos[1] - HALF_PAD_HEIGHT], [paddle1_pos[0] - HALF_PAD_WIDTH, paddle1_pos[1] + HALF_PAD_HEIGHT], [paddle1_pos[0] + HALF_PAD_WIDTH, paddle1_pos[1] + HALF_PAD_HEIGHT], [paddle1_pos[0] + HALF_PAD_WIDTH, paddle1_pos[1] - HALF_PAD_HEIGHT]], 0) | |
| pygame.draw.polygon(canvas, GREEN, [[paddle2_pos[0] - HALF_PAD_WIDTH, paddle2_pos[1] - HALF_PAD_HEIGHT], [paddle2_pos[0] - HALF_PAD_WIDTH, paddle2_pos[1] + HALF_PAD_HEIGHT], [paddle2_pos[0] + HALF_PAD_WIDTH, paddle2_pos[1] + HALF_PAD_HEIGHT], [paddle2_pos[0] + HALF_PAD_WIDTH, paddle2_pos[1] - HALF_PAD_HEIGHT]], 0) | |
| #ball collision check on top and bottom walls | |
| if int(ball_pos[1]) <= BALL_RADIUS: | |
| ball_vel[1] = - ball_vel[1] | |
| if int(ball_pos[1]) >= HEIGHT + 1 - BALL_RADIUS: | |
| ball_vel[1] = -ball_vel[1] | |
| #ball collison check on gutters or paddles | |
| if int(ball_pos[0]) <= BALL_RADIUS + PAD_WIDTH and int(ball_pos[1]) in range(paddle1_pos[1] - HALF_PAD_HEIGHT,paddle1_pos[1] + HALF_PAD_HEIGHT,1): | |
| ball_vel[0] = -ball_vel[0] | |
| ball_vel[0] *= 1.1 | |
| ball_vel[1] *= 1.1 | |
| elif int(ball_pos[0]) <= BALL_RADIUS + PAD_WIDTH: | |
| r_score += 1 | |
| ball_init(True) | |
| if int(ball_pos[0]) >= WIDTH + 1 - BALL_RADIUS - PAD_WIDTH and int(ball_pos[1]) in range(paddle2_pos[1] - HALF_PAD_HEIGHT,paddle2_pos[1] + HALF_PAD_HEIGHT,1): | |
| ball_vel[0] = -ball_vel[0] | |
| ball_vel[0] *= 1.1 | |
| ball_vel[1] *= 1.1 | |
| elif int(ball_pos[0]) >= WIDTH + 1 - BALL_RADIUS - PAD_WIDTH: | |
| l_score += 1 | |
| ball_init(False) | |
| #update scores | |
| myfont1 = pygame.font.SysFont("Comic Sans MS", 20) | |
| label1 = myfont1.render("Score "+str(l_score), 1, (255,255,0)) | |
| canvas.blit(label1, (50,20)) | |
| myfont2 = pygame.font.SysFont("Comic Sans MS", 20) | |
| label2 = myfont2.render("Score "+str(r_score), 1, (255,255,0)) | |
| canvas.blit(label2, (470, 20)) | |
| #keydown handler | |
| def keydown(event): | |
| global paddle1_vel, paddle2_vel | |
| if event.key == K_UP: | |
| paddle2_vel = -8 | |
| elif event.key == K_DOWN: | |
| paddle2_vel = 8 | |
| elif event.key == K_w: | |
| paddle1_vel = -8 | |
| elif event.key == K_s: | |
| paddle1_vel = 8 | |
| #keyup handler | |
| def keyup(event): | |
| global paddle1_vel, paddle2_vel | |
| if event.key in (K_w, K_s): | |
| paddle1_vel = 0 | |
| elif event.key in (K_UP, K_DOWN): | |
| paddle2_vel = 0 | |
| init() | |
| #game loop | |
| while True: | |
| draw(window) | |
| for event in pygame.event.get(): | |
| if event.type == KEYDOWN: | |
| keydown(event) | |
| elif event.type == KEYUP: | |
| keyup(event) | |
| elif event.type == QUIT: | |
| pygame.quit() | |
| sys.exit() | |
| pygame.display.update() | |
| fps.tick(60) |
uhh?
line 155, in
draw(window)
File "c:\Users\n\Desktop\ codes\games\pong.py", line 109, in draw
if int(ball_pos[0]) >= WIDTH + 1 - BALL_RADIUS - PAD_WIDTH and int(ball_pos[1]) in range(paddle2_pos[1] - HALF_PAD_HEIGHT,paddle2_pos[1] + HALF_PAD_HEIGHT,1):
pygame 2.0.0.dev8 (SDL 2.0.12, python 3.8.3)
Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
File "/data/user/0/ru.iiec.pydroid3/files/temp_iiec_codefile.py", line 155, in
draw(window)
File "/data/user/0/ru.iiec.pydroid3/files/temp_iiec_codefile.py", line 101, in draw
if int(ball_pos[0]) <= BALL_RADIUS + PAD_WIDTH and int(ball_pos[1]) in range(paddle1_pos[1] - HALF_PAD_HEIGHT,paddle1_pos[1] + HALF_PAD_HEIGHT,1):
TypeError: 'float' object cannot be interpreted as an integer
pygame 2.1.0 (SDL 2.0.16, Python 3.10.0)
Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
File "e:\python saves#PONG pygame.py", line 157, in
draw(window)
File "e:\python saves#PONG pygame.py", line 111, in draw
if int(ball_pos[0]) >= WIDTH + 1 - BALL_RADIUS - PAD_WIDTH and int(ball_pos[1]) in range(paddle2_pos[1] - HALF_PAD_HEIGHT,paddle2_pos[1]
- HALF_PAD_HEIGHT,1):
TypeError: 'float' object cannot be interpreted as an integer
PS E:\python saves>
What this error?
Traceback (most recent call last):
File "C:\Users\anjel\OneDrive\Área de Trabalho\progamas úteis\Pong.py", line 168, in
draw(window)
File "C:\Users\anjel\OneDrive\Área de Trabalho\progamas úteis\Pong.py", line 120, in draw
if int(ball_pos[0]) >= WIDTH + 1 - BALL_RADIUS - PAD_WIDTH and int(ball_pos[1]) in range(
TypeError: 'float' object cannot be interpreted as an integer
Nice and Simple code. Just one feedback. Please update all the lines having / to // as python 3 does not give back Integer with normal division symbol if the variables being used are not integer. hence creating a Type Error. for example:
ball_pos = [WIDTH/2,HEIGHT/2] to ball_pos = [WIDTH//2,HEIGHT//2]
Otherwise users will get TypeError: integer argument expected, got float Rest is perfect.
Worked like a charm! Or should I say PyCharm?! >:-}
Working on it