2012-04-21 18 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(によるあなたの貼り付けコードといくつかのインデントの問題のために、これは実際に動作することを伝えることはできませんが)
  • を設定しました

pygame.quit()に電話するのは、Pythonセッションを終了するときだけです。

私の提案:game()を複数回呼び出す場合は、インタラクティブセッションではへのコールをgame()内に削除する必要があります。この関数はpygameを初期化しません。当然、その機能を呼び出すすべての試みは失敗します。

+0

トレースバック(最新の呼び出しの最後): ファイル "C:\ユーザーは、MO \デスクトップ\ Twerkの\ ballbounce_changed.py \"( ゲームでは、行180) ファイル「C:\ユーザーは、MO \ Desktopを\ \\ Twerk \ ballbounce_changed.py "、行109、ゲーム内 screen.blit(背景、(0,0)) pygame.error:ディスプレイ表面終了 >>> – ErHunt

+0

@mooeeeep、私は今インデントを変更しました私が存在しようとすると上記のエラーが発生し、存在します。 – ErHunt

+0

@Badrインデントの変更はありません。コードをはるかに多くの機能に分割する必要があります。それはコードをより読みやすくし、失敗したときにTracebackに情報を追加します。 – moooeeeep

1

あなたはpygame.quit()を手動で呼び出すためだと思います。スクリプトが終了すると、Pygameは自動的に終了します。 =真行わhttp://ninmonkey.googlecode.com/hg/boilerplate/pygame/1.%20blank%20screen/1%20-%20basic.%20pygame%20--nocomments.py

あなたが終了したい、セット:ダブルチェックpygameのに

あなたはこの定型を実行することができ、取り組んでいます。 (上の例の37行目と64行目を参照してください。)

1

あなたはpygame.quit()を呼び出しましたが、sys.exit()も呼び出す必要があると思います。

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

これは私のすべてのゲームで行います。

関連する問題