2016-07-15 6 views
0

Ich bin neu bei Python, so ist das Problem bei meinem Code wahrscheinlich ein dummer. Gleich nachdem das Bild des Spielers sich bewegt hat, stürzt das Fenster des Pygame ohne Fehlermeldung am IDLE ab.Pygame Absturz direkt nach einer Aktion

ich benutze Python 2.7. Hier ist der Code:

import pygame,sys 
from pygame.locals import * 

pygame.init() 
dis=pygame.display.set_mode((1084,638),0,32) 
pygame.display.set_caption('ledders and snakes') 

FPS=30 
fpsClock=pygame.time.Clock() 
White=(255,255,255) 
img=pygame.image.load('smal.gif') 
bg = pygame.image.load("under.gif") 

cax=150 
cay=150 
di='right' 
flag=True 

while flag: 
    dis.blit(bg, (0, 0)) 
    if di=='right': 
     cax+=10 
     cay-=10 
     if cax==280: 
      di='down' 
    elif di=='down': 
     cay+=10 
     cax+=10 
     if cax==410: 
      flag=False 


    dis.blit(img,(cax,cay)) 

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

    pygame.display.update() 
    fpsClock.tick(FPS) 
+0

Funktioniert es, wenn es über die Befehlszeile ausgeführt wird? Es gibt manchmal Probleme mit Tk-basierten Anwendungen, die auf IDLE laufen (das ist auch Tk). – cdarke

Antwort

0

Ich sehe durch Ihr Programm und das Problem ist, dass Sie flag = False wenn if cax == 410 setzen. Aus diesem Grund wird Ihr Programm beendet, da die Bedingung nach nur ein paar Sekunden zu True wird. Aber es gibt viele Dinge, die man beachten sollte, so habe ich einige Änderungen (nicht im Programm, sondern in Namen):

import pygame 
import sys 
from pygame.locals import * 

pygame.init() 
SIZE = WIDTH, HEIGHT = 1084, 638 # Have a reference to WIDTH and HEIGHT. 
screen = pygame.display.set_mode(SIZE, 0, 32) # 'screen' is the convention and describes the variable better than 'dis'. 
pygame.display.set_caption('ledders and snakes') 

FPS = 30 
clock = pygame.time.Clock() # Use lowercase for variables. 
WHITE = (255, 255, 255) # Use CAPS for constants. 
img = pygame.Surface((32, 32)) # Used these two lines because I don't have your image. 
img.fill((0, 0, 255)) 
bg = pygame.Surface((32, 32)) # Used these two lines because I don't have your image. 
bg.fill((255, 0, 0)) 

cax = 150 # Since I don't know your program I can't tell if these are describable variables or not. 
cay = 150 
direction = 'right' # 'di' isn't describable enough. 
running = True # 'flag' seems like an indescribable variable. 

while running: 
    screen.blit(bg, (0, 0)) 
    if direction == 'right': 
     cax += 10 
     cay -= 10 
     if cax == 280: 
      direction = 'down' 
    elif direction == 'down': 
     cay += 10 
     cax += 10 
     if cax == 410: 
      running = False 

    screen.blit(img, (cax, cay)) 

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

    pygame.display.update() 
    clock.tick(FPS) 

Auch setzen Räume zwischen den Betreibern als "== 'oder nach dem Komma wie' (0 , 0) "anstelle von (0,0). Und verwenden Sie Variablennamen mit Kleinbuchstaben, wobei Wörter durch Unterstriche getrennt sind. Versuchen Sie, PEP8 zu folgen, solange es keinen Sinn macht, es zu brechen.

+0

danke für die Bemerkungen !! und ich weiß, dass das Programm gleich nach ein paar Sekunden aus der Schleife kommt, es tut was es soll, aber gleich danach stürzt es ab. – roni280

+0

@ roni280 Das Programm stürzt nicht ab, sondern beendet, weil es keinen Code mehr hat. Es bricht aus der While-Schleife aus und endet. Wenn es abstürzt, gibt es einen Fehler. –

0

ich über das Programm nur abgeschöpft, wenn ich mich nicht falsch (hoffentlich bin ich nicht) halten Sie 10 Hinzufügen das Ergebnis zu CAx, ist, dass Ihre Spieler die Position erreicht, die wird Setzen Sie flag nach nur 26 Iterationen in Ihrer while-Schleife auf false. Dies wird ziemlich schnell passieren.

+0

aber warum ist dieser Absturz direkt nach dem Verlassen der Schleife? – roni280

+0

Es ist Ihre While-Schleife, die den Bildschirm blitzt und aktualisiert. – marcb20012

+0

Keine While-Schleife, kein Blitting und keine Aktualisierung, also erwarte nicht, dass dein Programm noch geöffnet wird. – marcb20012