ich habe diesmal versucht, einen einfachen Kopfrechner mit Pygame darzustellen.
Hab schon folgendes Grundgerüst.
time.sleep(3) habe ich eingebaut, damit er nach der Eingabe und Bestätigung mit ENTER nicht sofort zur nächsten Aufgabe springt und man etwas länger die Ausgabe "richtig!" oder "falsch!" sehen kann. Das Problem ist, während er "schläft" nimmt er die Zeichen von der Tastatur auf, die dann bei der nächsten Aufgabe angezeigt werden. Woher kommt das? Ich dachte, die Zeichen von der Tastatur würden erst beim nächsten Schleifendurchlauf (der inneren while-Schleife) aufgenommen?
Vielen Dank im Voraus!
Code: Alles auswählen
import pygame, sys
from pygame.locals import *
import random
import time
pygame.init()
clock = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((1000, 300))
pygame.display.set_caption("Kopfrechner")
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
BLUE = (0, 0, 128)
fontObj = pygame.font.Font('freesansbold.ttf', 50)
while True:
zahl_1 = random.randint(1, 101)
zahl_2 = random.randint(1, 101)
ergebnis = zahl_1 + zahl_2
eingabe = ""
eingabe_abgeschlossen = False
while eingabe_abgeschlossen != True:
DISPLAYSURF.fill(WHITE)
anzeige = "{0} + {1} = ".format(zahl_1, zahl_2)
SurfaceObj_anzeige = fontObj.render(anzeige, True, GREEN, BLUE)
DISPLAYSURF.blit(SurfaceObj_anzeige, (200, 50))
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RETURN:
eingabe_abgeschlossen = True
if ergebnis == int(eingabe):
anzeige_richtig_falsch = fontObj.render("richtig!", True, GREEN, BLUE)
DISPLAYSURF.blit(anzeige_richtig_falsch, (600, 50))
else:
anzeige_richtig_falsch = fontObj.render("falsch!", True, GREEN, BLUE)
DISPLAYSURF.blit(anzeige_richtig_falsch, (600, 50))
elif event.key == pygame.K_BACKSPACE:
eingabe = eingabe[:-1]
else:
eingabe = eingabe + event.unicode
anzeige_eingabe = fontObj.render(eingabe, True, GREEN, BLUE)
DISPLAYSURF.blit(anzeige_eingabe, (450, 50))
pygame.display.flip()
clock.tick(30)
time.sleep(5)