2012-04-21 5 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 = True и start = False (хотя из-за некоторые проблемы отступа с вашим вставленным кодом это не представляется возможным сказать, что это на самом деле работает)

Вы должны позвонить pygame.quit() только в том случае, если хотите завершить сеанс Python.

Мое предложение: если вы хотите позвонить по телефону game() более одного раза, например. в интерактивном сеансе вы должны удалить звонок pygame.quit() внутри game(). Эта функция не инициализирует pygame, и, естественно, все попытки вызвать ее функциональность не удастся.

+0

Traceback (самый последний вызов последнего): Файл "C: \ Users \ МО \ Desktop \ Twerk \ ballbounce_changed.py", строка 180, в игре() Файл «C: \ Users \ Desktop \ М.О. \ Twerk \ ballbounce_changed.py ", строка 109, в игре screen.blit (фон, (0,0)) pygame.error: отображение Поверхность закрыта >>> – ErHunt

+0

@mooeeeep, я изменил отступ теперь, получив вышеуказанную ошибку, когда я пытаюсь существовать, она существует. – ErHunt

+0

@Badr Я не вижу никаких изменений в отступе. Вы должны разделить свой код на гораздо больше функций. Это сделает код более читаемым и добавит информацию в Traceback, когда он терпит неудачу. – moooeeeep

1

Я думаю, это потому, что вы вызываете pygame.quit() вручную. Pygame автоматически выключится, когда ваш скрипт закончится.

Для двойной проверки Pygame работает, вы можете запустить этот шаблонный: http://ninmonkey.googlecode.com/hg/boilerplate/pygame/1.%20blank%20screen/1%20-%20basic.%20pygame%20--nocomments.py

Если вы хотите бросить курить, набор сделано = True. (См. Строку 37 и строку 64 в приведенном выше примере.)

1

Вы назвали pygame.quit(), но я думаю, вам также нужно вызвать sys.exit().

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

Это то, что я делаю во всех своих играх.

Смежные вопросы