Azambie
Azambie

Reputation: 45

"pygame.error: display Surface quit" when running the code

I am trying to make a simple moving game with Pygame since I am currently learning it. Whenever i try to run the code I keep on getting a problem saying: "pygame.error: display Surface quit"

I've tried adding "break" at the end but the window closes immediately! I've tried searching for the solution but I can't find one that helps my code.

import pygame
import random
pygame.init()
# Window setup
size = [400, 400]
screen = pygame.display.set_mode(size)
clock = pygame.time.Clock()

# player position
x = size[0] // 2
y = size[1] // 2

# ball position
ballX = random.randrange(0, size[0])
ballY = random.randrange(0, size[1])

# colours
red = pygame.color.Color('#FF8080')
blue = pygame.color.Color('#8080FF')
white = pygame.color.Color('#FFFFFF')
black = pygame.color.Color('#000000')


def CheckOffScreenX(x):
    if x > size[0]:
        x = 0
    elif x < 0:
        x = size[0]
    return x
def CheckOffScreenY(y):
    if y > size[1]:
        y = 0
    elif y < 0:
        y = size[1]
    return y

# Game loop
done = False
while not done:
    screen.fill(black)


    keys = pygame.key.get_pressed()

    #player movement
    if keys[pygame.K_w]:
        y -=1
    if keys[pygame.K_s]:
        y +=1
    if keys[pygame.K_a]:
        x -=1
    if keys[pygame.K_d]:
        x +=1

    # Check offscreen
    x = CheckOffScreenX(x)
    y = CheckOffScreenY(y)

    # draw player
    pygame.draw.circle(screen, red, [x, y], 6)
    pygame.display.flip()

    # draw ball
    pygame.draw.circle(screen, blue, [ballX, ballY], 6)
    pygame.display.flip()

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True
    clock.tick(32)
    pygame.quit()

Any help would be appreciated!

Upvotes: 1

Views: 1105

Answers (1)

Rabbid76
Rabbid76

Reputation: 210878

The issue is the pygame.quit() insider the main loop. pygame.quit() uninitialize all pygame modules. After the modules are uninitialized all further calls to pygyme instructions (in the next frame) will cause a crash.
Do pygame.quit() after the main loop, when the application has end.

done = False
while not done:
    screen.fill(black)

    # [...]

    # pygame.quit() <----- delete

pygame.quit() # <---- add

Note, probably you've added an Indentation when you copied the code.

Upvotes: 3

Related Questions