Pygame - quit wird nicht erkannt

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Ner0x
User
Beiträge: 1
Registriert: Mittwoch 15. April 2020, 00:54

Hallo liebes Forum,
ich bin relativ neu in Pygame eingestiegen und wollte soeben mit meinem zweiten Spiel anfangen. Ich hab genauso gestartet, wie beim ersten mal, aber irgendwie funktioniert es nicht mehr, dass Fenster zu schließen.

Code: Alles auswählen

import pygame, sys
from sys import exit
from Sprite import Sprite
from pygame.locals import *


class SSP():
    def __init__(self):

        self.breite = 800
        self.hoehe = 500
        self.win = pygame.display.set_mode((self.breite, self.hoehe))
        self.hintergrund = Sprite("Bilder/Hintergrund.png", [0,0])
        pygame.display.set_caption("Schere Stein Papier V1.0")

    def spielLaueft(self):

        laueft = True
        while laueft:
            
            self.win.fill([255, 255, 255])
            self.win.blit(self.hintergrund.image, self.hintergrund.rect)
            
                
            for event in pygame.event.get():
                pos = pygame.mouse.get_pos()
                
                if event.type == pygame.QUIT:
                    laueft = False
                elif event.type == pygame.KEYDOWN:
                    pass                    
                    if event.key == pygame.K_ESCAPE:
                        laueft = False
                            
               
                    
            pygame.display.flip()

           
               

        pygame.quit()

if __name__ == "__main__":
    s = SSP()
    s.spielLaueft

Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

spielLaueft ist nicht nur falsche geschrieben und hat auch einen Rechtschreibfehler, sondern es wird auch gar nicht aufgerufen. Die Klammern fehlen.

Variablennamen und Methodennamen werden klein_mit_unterstrich geschrieben. Namen sollten aussagekräftig sein, s ist das nicht, und SSP will besser SchereSteinPapierSpiel heißen.
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Ner0x: Weitere Anmerkungen zum Quelltext:

`sys` und `exit()` aus `sys` werden importiert, aber nicht verwendet. Der Sternchen-Import aus `pygames.local` macht ebenfalls keinen Sinn.

Zum Thema aussagekräftige Namen gehört auch, keine Abkürzungen zu verwenden. `win` kann bei Spielen leicht etwas anderes als `window` bedeuten, darum sollte man das auch nicht abkürzen.

Die Klasse ist nicht wirklich eine. Wenn man nur eine `__init__()` und eine weitere Methode hat, dann ist das fast immer eine als Klasse verkleidete Funktion.

Die beiden Listen mit literalen Werten sollten Tupel sein. Listen verwendet man, wenn alle Elemente die gleiche Bedeutung haben. Tupel wenn die Bedeutung des jeweiligen Wertes von seiner Position abhängt.

`pos` wird definiert, aber nicht verwendet. Es ist auch nicht wirklich die richtige Stelle das in der Schleife für jedes Ereignis zu machen.

``if``/``elif`` und das verschachtelte ``if`` können alle zu einer Bedingung zusammengefasst werden. Und da ein Wahrheitswert zugewiesen wird, braucht man gar kein ``if``/``elif`` sondern kann gleich mit dem Ergebnis der Bedingung arbeiten.

Das ``pass`` macht keinen Sinn.

Ungetestet:

Code: Alles auswählen

#!/usr/bin/env python3
import pygame

from Sprite import Sprite


def main():
    breite = 800
    hoehe = 500
    window = pygame.display.set_mode((breite, hoehe))
    pygame.display.set_caption("Schere Stein Papier V1.0")
    hintergrund = Sprite("Bilder/Hintergrund.png", (0, 0))

    laueft = True
    while laueft:
        for event in pygame.event.get():
            laueft = not (
                event.type == pygame.QUIT
                or event.type == pygame.KEYDOWN
                and event.key == pygame.K_ESCAPE
            )
        window.fill((255, 255, 255))
        window.blit(hintergrund.image, hintergrund.rect)
        pygame.display.flip()

    pygame.quit()


if __name__ == "__main__":
    main()
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten