Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
312 views
in Technique[技术] by (71.8m points)

python - pygame.error: video system not initialized

I don't seem to able to get rid of this error, when I try to exist the game. the game runs fine but only get the error when I try to exist the game.

import pygame
from pygame import *
import random
import time
import os
import sys
from pygame.locals import *


black = (0,0,0)
white = (255,255,255)

pygame.init()

def game():

 os.environ['SDL_VIDEO_CENTERED'] = '1'
 mouse.set_visible(False)

#screen
screen_width = 800
screen_height = 500
screen = pygame.display.set_mode([screen_width,screen_height])
#load images etc.
backdrop = pygame.image.load('bg.jpg').convert_alpha()
menu = pygame.image.load('green.jpg').convert_alpha()
ballpic = pygame.image.load('ball.gif').convert_alpha()
mouseball = pygame.image.load('mouseball.gif').convert_alpha()
display.set_caption('Twerk')
back = pygame.Surface(screen.get_size())

def text(text,x_pos,color,font2=28):
    tfont = pygame.font.Font(None, font2)

    text=tfont.render(text, True, color)
    textpos = text.get_rect(centerx=back.get_width()/2)
    textpos.top = x_pos
    screen.blit(text, textpos)

start = False
repeat = False
while start == False:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            start = True
            #falling = True
            #finish = True

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                start = True
    #game over screen
    screen.blit(menu,[0,0])
    pygame.display.set_caption("TWERK")

    #Text
    #"Welcome to Escape"
    #needs replacing with logo 
    text("Twerk",60,white,300)

    #"Instructions"
    text("Instructions",310,white)
    text("----------------------------------------------------------------------------------------",320,white)
    text("Avoid the the enemies",340,white)
    text("Last as long as you can!",360,white)
    text("Press space to start",420,white)
    pygame.display.flip()


while start == True:
positionx=[]
positiony=[]
positionxmove=[]
positionymove=[]
falling = False
finish = False
score=0
enemies=4
velocity=1

for i in range(enemies):
  positionx.append(random.randint(300,400)+random.randint(-300,200))
  positiony.append(random.randint(200,340)+random.randint(-200,100))
  positionxmove.append(random.randint(1,velocity))
  positionymove.append(random.randint(1,velocity))


font = pygame.font.Font(None, 28)
text = font.render('Starting Twerk... ', True, (100,100,100))
textRect = text.get_rect()
textRect.centerx = screen.get_rect().centerx
textRect.centery = screen.get_rect().centery

screen.blit(backdrop, (0,0))
screen.blit(text, textRect)
pygame.display.update()
game=time.localtime()

while start == True:
  end=time.localtime()
  score= (end[1]-game[1])*3600 + (end[4]-game[4])*60 + end[5]-game[5]
  if score > 1: break

first=True
strtTime=time.localtime()

while not finish or falling:
  screen.blit(backdrop, (0,0))
  for i in range(enemies):
    screen.blit(ballpic,(positionx[i],positiony[i]))
    (mousex,mousey)=mouse.get_pos()
    screen.blit(mouseball,(mousex,mousey))
    display.update()
    strt = time.localtime()

  if first:
    while True:
      end=time.localtime()
      score= (end[3]-strt[3])*3600 + (end[4]-strt[4])*60 + end[5]-strt[5]
      if score > 3: break
    first = False

  if falling:
    for i in range(enemies):
      positionymove[i]=1000
      positionxmove[i]=0


  for i in range(enemies): positionx[i]=positionx[i]+positionxmove[i]
  for i in range(enemies): positiony[i]=min(600,positiony[i]+positionymove[i])

  if falling:
    falling=False
    for posy in positiony:
      if posy<600: falling=True


  if not falling:
    for i in range(enemies):
      for j in range(i+1,enemies):
        if abs(positionx[i]-positionx[j])<20 and abs(positiony[i]-positiony[j])<20:
          temp=positionxmove[i]
          positionxmove[i]=positionxmove[j]
          positionxmove[j]=temp
          temp=positionymove[i]
          positionymove[i]=positionymove[j]
          positionymove[j]=temp

    for i in range(enemies):  
      if positionx[i]>600: positionxmove[i]*=-1
      if positionx[i]<0: positionxmove[i]*=-1
      if positiony[i]>440: positionymove[i]*=-1
      if positiony[i]<0: positionymove[i]*=-1

    for i in range(enemies):
      if abs(positionx[i]-mousex)<40 and abs(positiony[i]-mousey)<40:
        falling = True
        finish = True
        #start = False
        endTime=time.localtime()
        score= (endTime[3]-strtTime[3])*3600 + (endTime[4]-strtTime[4])*60 + endTime[5]-strtTime[5]
        break

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

          if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
              pygame.quit()




game()

This is the error I get, I've changed quit() to QUIT but still no luck.

Traceback (most recent call last):
File "C:UsersMODesktopTwerkallbounce_changed.py", line 171, in <module>
 game()
File "C:UsersMODesktopTwerkallbounce_changed.py", line 160, in game
 for event in pygame.event.get():
 pygame.error: video system not initialized

thank you :)

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You should stop your main loop when you want to exit the game.

My suggestions, either of

  • call exit() after pygame.quit()
  • set finish = True and start = False (though due to some indentation issues with your pasted code it's not possible to tell that this would actually work)

You should call pygame.quit() only when you want to terminate your Python session.

My suggestion: if you want to call game() more than once, e.g. in an interactive session, you should remove the call to pygame.quit() inside game(). This function uninitializes pygame and naturally all attempts to call its functionality will fail then.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...