0
import pygame
pygame.init()

pygame.display.set_caption('...SHON...PONG...')

icon=pygame.image.load('icon.png')

pygame.display.set_icon(icon)

FPS=50
fpsClock=pygame.time.Clock()
screenh=500
screenw=300

screen=pygame.display.set_mode((screenh,screenw))

black =((0,0,0))


paddle1=pygame.image.load('paddle1.png')
paddle1_rect=paddle1.get_rect()
paddle1_y=100
paddle1_x=10


paddle2=pygame.image.load('paddle2.png')
paddle2_rect=paddle1.get_rect()
paddle2_y=100
paddle2_x=471

  
ball=pygame.image.load('player.png')
ball_rect=ball.get_rect()
ball_x=240
ball_y=130

ball_y_speed=2
ball_x_speed=2

speed=15

paddle1_rect.x=paddle1_x
paddle1_rect.y=paddle1_y

paddle2_rect.x=paddle2_x
paddle2_rect.y=paddle2_y

ball_rect.x=ball_x
ball_rect.y=ball_y



def ball_movement():
    global ball_x, ball_y, ball_x_speed, ball_y_speed
    ball_x -=ball_x_speed
    ball_y +=ball_y_speed

def ball_collide_screen():
    global ball_x, ball_y, ball_x_speed, ball_y_speed
    if ball_y + screenw >= 600:
        ball_y_speed = -2
    
    if ball_y + screenw <= 300:
        ball_y_speed = -2


def ball_collide_paddles():
    global ball_rect, paddle1_rect, paddle2_rect
    if paddle1_rect.right - ball_rect.left <= 0:
        print('ho')

running=True
while running:

    

    screen.fill((0,0,0))

    screen.blit(paddle1, (paddle1_x,paddle1_y))

    screen.blit(paddle2, (paddle2_x,paddle2_y))

    screen.blit(ball, (ball_x, ball_y))

    ball_collide_screen()

    ball_movement()

    ball_collide_paddles()

    pygame.display.update()

    fpsClock.tick(FPS)

    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            running=False
            pygame.quit()

        if event.type==pygame.KEYDOWN:
            if event.key==pygame.K_w:
            
                paddle1_y-= speed

            if event.key==pygame.K_z:
            
                paddle1_y+=speed
                
            if event.key==pygame.K_UP:
                
                paddle2_y-=speed

            if event.key==pygame.K_DOWN:
                
                paddle2_y+=speed

*i am getting problems with the pygame colliderect function. i put a print function whenever the ball collides with paddle and it continues print collide as long as the program is running.....i read somewhere that the rect position has to be matching with the balls initial position and i have tried doing that but all in vain .....i have been doing pygame for a while and i have encountered this problem trying to make this pong game *

1 Answers1

0

You must update the location of the pygame.Rect objects, after moving the objects and before the collision detection:

def ball_movement():
    global ball_x, ball_y, ball_x_speed, ball_y_speed
    ball_x -=ball_x_speed
    ball_y +=ball_y_speed

    ball_rect.x=ball_x
    ball_rect.y=ball_y
running=True
while running:
    # [...]

    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            running=False
            pygame.quit()

        if event.type==pygame.KEYDOWN:
            if event.key==pygame.K_w:            
                paddle1_y-= speed
            if event.key==pygame.K_z:            
                paddle1_y+=speed                
            if event.key==pygame.K_UP:
                paddle2_y-=speed
            if event.key==pygame.K_DOWN:
                paddle2_y+=speed

    paddle1_rect.x=paddle1_x
    paddle1_rect.y=paddle1_y
    paddle2_rect.x=paddle2_x
    paddle2_rect.y=paddle2_y

Note, you don't need the variables ball_x, ball_y, paddle1_x, paddle1_y, paddle2_x and paddle2_y at all.
Use ball_rect.x, ball_rect.y, paddle1_rect.x, paddle1_rect.y, paddle2_rect.x and paddle2_rect.y instead.

import pygame
pygame.init()

pygame.display.set_caption('...SHON...PONG...')
#icon = pygame.image.load('icon.png')
#pygame.display.set_icon(icon)
FPS = 50
fpsClock = pygame.time.Clock()
screenh = 500
screenw = 300
screen = pygame.display.set_mode((screenh,screenw))
black = ((0,0,0))

#paddle1 = pygame.image.load('paddle1.png')
paddle1 = pygame.Surface((5, 50))
paddle1.fill((255, 255, 255))
paddle1_rect = paddle1.get_rect(topleft = (10, 100))
#paddle2 = pygame.image.load('paddle2.png')
paddle2 = pygame.Surface((5, 50))
paddle2.fill((255, 255, 255))
paddle2_rect = paddle1.get_rect(topleft = (471, 100))
#ball = pygame.image.load('player.png')
ball = pygame.Surface((5, 5))
ball.fill((255, 255, 255))
ball_rect = ball.get_rect(topleft = (240, 130))

ball_x_speed = 2
ball_y_speed = 2
speed = 15

def ball_movement():
    ball_rect.x += ball_x_speed
    ball_rect.y += ball_y_speed

def ball_collide_screen():
    global ball_x_speed, ball_y_speed
    if ball_rect.left <= 0:
        ball_x_speed = 2
    if ball_rect.right >= screen.get_width():
        ball_x_speed = -2
    if ball_rect.top <=  0:
        ball_y_speed = 2
    if ball_rect.bottom >= screen.get_height():
        ball_y_speed = -2

def ball_collide_paddles():
    if paddle1_rect.right - ball_rect.left <= 0:
        print('ho')

running=True
while running:
    screen.fill((0,0,0))
    screen.blit(paddle1, paddle1_rect)
    screen.blit(paddle2, paddle2_rect)
    screen.blit(ball, ball_rect)
    pygame.display.update()

    fpsClock.tick(FPS)
    
    ball_collide_screen()
    ball_movement()
    ball_collide_paddles()

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running=False
            pygame.quit()

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_w:
                paddle1_rect.y -= speed
            if event.key == pygame.K_s:
                paddle1_rect.y += speed
            if event.key == pygame.K_UP:
                paddle2_rect.y -= speed
            if event.key == pygame.K_DOWN:
                paddle2_rect.y += speed

Rabbid76
  • 202,892
  • 27
  • 131
  • 174