2012-04-21 134 views
0

当我尝试存在游戏时,我似乎无法摆脱此错误。游戏运行良好,但只有在尝试存在游戏时才会出现错误。pygame.error:视频系统未初始化

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() 

这是我得到的错误,我已将quit()更改为QUIT,但仍然没有运气。

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

谢谢:)

回答

1

当你想退出游戏,您应该停止主循环。

我的建议,无论是的

  • 通话exit()pygame.quit()
  • 设置finish = Truestart = False(虽然由于与粘贴的一些代码缩进问题,这是不可能告诉,这将实际工作)

只有当您要终止您的Python会话时,才应该调用pygame.quit()

我的建议:如果您想多次拨打game(),例如在交互式会话中,您应该删除game()pygame.quit()的呼叫。这个函数不会初始化pygame,当然所有尝试调用它的功能都会失败。

+0

回溯(最近通话最后一个): 文件 “C:\用户\ MO \桌面\ Twerk \ ballbounce_changed.py”,线路180,在 游戏() 文件“C:\用户\ MO \桌面\ Twerk \ ballbounce_changed.py“,行109,在游戏 screen.blit(背景,(0,0)) pygame.error:显示表面退出 >>> – ErHunt 2012-04-21 20:45:36

+0

@mooeeeep,我现在改变了缩进当我尝试存在时得到上述错误,它确实存在。 – ErHunt 2012-04-21 20:46:32

+0

@Badr我看不到任何缩进的变化。你应该把你的代码分成更多的功能。这会使代码更具可读性,并在失败时向Traceback添加信息。 – moooeeeep 2012-04-21 20:53:28

1

你调用了pygame.quit(),但我认为你还需要调用sys.exit()。

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

这就是我在我所有的游戏中所做的。