Reyzor
Reyzor

Reputation: 1

Pygame Pong paddles not showing up

I'm working on a Ping Pong game in Pygame. Having some trouble getting the paddles to display on screen within a class. I have a feeling either my constructor init method is incorrect (although not throwing up any errors) or the display colour is overwriting the paddles.

Here's my code.

Program.py

import sys
import pygame

from settings import Settings
from paddles import Paddles
import game_functions as gf


def run_game():
    # Initialise pygame, settings and screen object.
    pygame.init()

    ai_settings = Settings()
    screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))
    pygame.display.set_caption('Ping Pong')


    # Start the main loop for the game.
    while True:
        gf.check_events()
        gf.update_screen(ai_settings,screen)

    #Make paddles
    paddles = Paddles(screen)


run_game()

paddles.py

import pygame
import sys

class Paddles():

    def __init__(self, screen):
        self.screen = screen
        self.paddle_l = pygame.draw.rect(screen, (255, 255, 255), [15, 250, 10, 100])
        self.paddle_r = pygame.draw.rect(screen, (255, 255, 255), [780, 250, 10, 100])

    def paddles(self):
        pass

settings.py

class Settings():
    """A class to store all settings for Ping Pong"""

    def __init__(self):
        """Initialise the game's settings."""
        # Screen settings
        self.screen_width = 800
        self.screen_height = 600
        self.bg_colour = (0,0,0)

game_functions.py

import sys
import pygame

def check_events():
    """Respond to keypresses and mouse events."""
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

def update_screen(ai_settings, screen):
    """Update images on the screen and flip to the new screen."""
    # Redraw the screen during each pass through the loop.
    screen.fill(ai_settings.bg_colour)


    pygame.display.flip()

Like I said I'm not getting any errors, the game window just opens to a black background. The code worked when I put it inside a normal function but not a class.

What am I doing wrong? How do I get the paddles to display?

Upvotes: 0

Views: 319

Answers (1)

Wes Doyle
Wes Doyle

Reputation: 2287

Is there a reason you're setting paddles outside of the "main loop?"

Moving paddles into your update_screen method gets them showing, at the very least. However, this is newing up a new Paddles object each time update_screen is called.

def update_screen(ai_settings, screen):
    """Update images on the screen and flip to the new screen."""
    # Redraw the screen during each pass through the loop.
    screen.fill(ai_settings.bg_colour)
    paddles = Paddles(screen)
    pygame.display.flip()

Upvotes: 1

Related Questions