I receive a "pygame.error: display Surface quit" when trying to run the main.py file.
from Asteroid import Asteroid
import neat
import pygame
pygame.init()
neat.config.Config
Screenw, Screenh = 500, 500
windo = pygame.display.set_mode((Screenw, Screenh))
game = Asteroidick.Game()
game.__init__(windo)
running = True
while running:
game.loop()
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
key = pygame.key.name(event.key)
game.input(key)
pygame.quit()
Here's the Asteroid file
import pygame
import random
pygame.init()
class Game:
red = random.randrange(256)
green = random.randrange(256)
blue = random.randrange(256)
userred = 0
usergreen = 0
userblue = 0
userlist = [userred, usergreen, userblue]
points = 0 #this number increases every time you input the right color value.
teext = f"Points: {points}" # + points
i = 0
def __init__(self, screen):
pygame.display.set_caption("Asteroiiid")
self.screen = screen
self.screen.fill((255, 255, 255))
def checker(self):
righty = True
if(self.userlist[0] != self.red):
righty = False
else:
self.points += 1
if(self.userlist[1] != self.green):
righty = False
else:
self.points += 1
if(self.userlist[2] != self.blue):
righty = False
else:
self.points += 1
if righty:
self.points += 1
self.red = random.randrange(256)
self.green = random.randrange(256)
self.blue = random.randrange(256)
self.userlist[0] = 0
self.userlist[1] = 0
self.userlist[2] = 0
self.i = 0
def loop(self):
self.teext = f"Points: {self.points}"
if self.i == 3:
self.checker()
#<----------ERROR OCCURS HERE----------------->
self.screen.fill((self.red, self.green, self.blue))
font = pygame.font.SysFont("Arial", 24)
score = font.render(self.teext, True, (0,0,0))
redval = font.render(str(self.userlist[0]), True, (255,0,0))
greenval = font.render(str(self.userlist[1]), True, (0, 255, 0))
blueval = font.render(str(self.userlist[2]), True, (0,0,255))
self.screen.blit(score,(0,0))
self.screen.blit(redval,(400,100))
self.screen.blit(greenval,(400,200))
self.screen.blit(blueval,(400,300))
pygame.display.flip()
def input(self, key):
if (key == 'up'):
self.userlist[self.i] += 1
if (key == 'return'):
self.i = self.i + 1
else:
self.loop()
#I think I'll just have the user enter values
pygame.quit()
If I comment out self.screen.fill((self.red,self.green,self.blue))
line, I receive a different error on the fonts.
I have been slowly building this file up and I've just moved the window to main. It worked before when I did not pass window to Asteroid. The init method also doesn't get errors, either.
When pygame.quit() is executed, all installed PyGame modules are deinstalled. All modules that were installed with the corresponding init
call (or pygame.init()
) are deinstalled. Every following call to a PyGame API function will cause an error. You must not call pygame.quit()
in the application loop. Call it after the application loop.
while running:
game.loop()
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
key = pygame.key.name(event.key)
game.input(key)
#<--|
pygame.quit()