Search code examples
pythonpygamepong

My paddles aren't moving in python in my pong remake


I changed the way my code is and now my paddles stopped moving. Anyone know why? Ignore the ball, for now, I haven't finished coding that yet. Before I changed my code, I didn't define my shapes I just drew them. Now that I defined them nothing will move. I only included relevant code.

    rectY1 = 240
    rectY2 = 240
    Y1change = 0
    Y2change = 0
    ballX = 320
    ballY = 240
    ballXvel = 0
    ballYvel = 0
    paddle1 = pygame.Rect(18,rectY1,10,120)
    paddle2 = pygame.Rect(620,rectY2,10,120)
    ball = pygame.Rect(ballX,ballY,30,30)
    def drawshapes():   
        pygame.draw.rect(DISPLAY, WHITE, paddle1)
        pygame.draw.rect(DISPLAY, WHITE, paddle2)
        pygame.draw.rect(DISPLAY, WHITE, ball)
    DISPLAY = pygame.display.set_mode((640,480),0,32)
    while True:
        for event in pygame.event.get():
            if event.type==QUIT:
                pygame.quit()
                sys.exit()
            if event.type == KEYDOWN :
                if event.key == K_SPACE :
                    ballXvel += 10
                    ballYvel += 10
        keys = pygame.key.get_pressed()

        Y1change = 0
        Y2change = 0
    #make paddles move
        if keys[K_UP]:
            Y2change -= 10

        if keys[K_DOWN]:
            Y2change += 10

        if keys[ord('w')]:
            Y1change -= 10

        if keys[ord('s')]:
            Y1change += 10
    #stop paddles at edges 
        if rectY1 < 5 :
            rectY1 = 5
        if rectY1 > 355 :
            rectY1 = 355
        if rectY2 < 5 :
            rectY2 = 5
        if rectY2 > 355 :
            rectY2 = 355

        ballX += ballXvel
        ballY += ballYvel
        rectY1 += Y1change
        rectY2 += Y2change
        DISPLAY.fill(BLACK)
        drawshapes()
        pygame.display.update()
        fpsClock.tick(FPS)

Solution

  • The code never updates the Paddle rect. Sure rectY1 and rectY2 are updated, but this is never applied to paddle1 and paddle2.

    Before drawshapes(), apply the changes to the paddle rects:

        rectY1 += Y1change
        rectY2 += Y2change
        paddle1.y = rectY1   # <-- HERE - Update the paddle's rect
        paddle2.y = rectY2   #            which is used to draw it
        DISPLAY.fill(BLACK)
    

    But I think your code would be simpler if it tracked the changes directly on the paddle1.x and paddle1.y etc.