simpler Kopfrechner mit Pygame

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Sam123
User
Beiträge: 35
Registriert: Freitag 20. November 2020, 12:25

Hallo zusammen,
ich experimentiere wieder ein wenig mit dem Kopfrechner rum, und verstehe wieder nicht, warum er das macht, was er macht, bzw. wie ich es besser hinkriege. Nach dem dem ENTER wird das Ergebnis ausgewertet, und er stellt sofort wieder eine neue Aufgabe und als Eingabe wird dann wohl nichts eingelesen, weil es viel zu schnell geht?

Und es kommt folgende Fehlermeldung:

text = "richtig!" if ergebnis == int(eingabe) else "falsch!"
ValueError: invalid literal for int() with base 10: ''

Hat jeman ein Tip, wie mans richtig macht?

(Ich versuche es erstmal ohne die Funktionen, weil es für mich momentan so einfacher zu verstehen ist.)

Code: Alles auswählen

import pygame
import random

WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
BLUE = (0, 0, 128)

pygame.init()
pygame.display.set_caption("Kopfrechner")
font = pygame.font.Font('freesansbold.ttf', 50)
clock = pygame.time.Clock()
display = pygame.display.set_mode((800, 300))

status = None
while status != pygame.QUIT:

    zahl_1 = random.randint(1, 101)
    zahl_2 = random.randint(1, 101)
    ergebnis = zahl_1 + zahl_2
    aufgabe = "{0} + {1} = ".format(zahl_1, zahl_2)
    eingabe = ""
    print("aufgabe: ", aufgabe, ergebnis)

    while True:

        display.fill(WHITE)
        text = font.render(aufgabe, True, GREEN, BLUE)
        display.blit(text, (200, 50))

        for event in pygame.event.get():
            #print("event-for-Schleife: ", event)
            if event.type == pygame.QUIT:
                status = pygame.QUIT
                #print("status = pygame.QUIT", event)
                break
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RETURN:
                    status = pygame.K_RETURN
                    #print("status = pygame.RETURN", event)
                    break
                elif event.key == pygame.K_BACKSPACE:
                    eingabe = eingabe[:-1]
                else:
                    eingabe = eingabe + event.unicode

        text = font.render(eingabe, True, GREEN, BLUE)
        display.blit(text, (450, 50))

        if status == pygame.K_RETURN:
            print("ergebnis: ", ergebnis)
            print("eingabe: ", eingabe)
            #print("if Abfrage, status = pygame.K_RETURN")
            text = "richtig!" if ergebnis == int(eingabe) else "falsch!"
            text = font.render(text, True, GREEN, BLUE)
            display.blit(text, (600, 50))
            pygame.display.flip()
            break

        pygame.display.flip()

        clock.tick(30)

        if status == pygame.QUIT:
            break
pygame.quit()
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

An welchen Stellen wird `status` gesetzt?
Benutzeravatar
snafu
User
Beiträge: 6744
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@Sam123
Wenn du innerhalb einer Schleife einen Wert veränderst, dann springt der Wert beim nächsten Durchlauf nicht wieder auf den Ursprungszustand zurück, sondern der bleibt dort, solange bis man ihn erneut verändert. In Verbindung mit dem Status geht dir da vielleicht ein Licht auf. :)
Sam123
User
Beiträge: 35
Registriert: Freitag 20. November 2020, 12:25

Alles klar, danke euch! Ich war fälschlichweise davon ausgegangen, dass in der for-Schleife 'status' immer neu belegt wird.
Antworten