Seite 1 von 1

mein switch hat sich aufgehängt

Verfasst: Donnerstag 23. Juni 2022, 01:46
von IgnibusAurea
Hey Leute, ich hab eine auswahl durch die ich durch switchen möchte und ich möchte das mit der k taste angezeigt und bei wiederholtem drücken eben nicht mehr angezeigt. Nun mein Programm geht durch die untere if anweisung anscheinend nur einmal durch obwohl ich das mit der variable toggle ändere. Bitte, was übersehe ich?

P.S. Bin noch neu bitte nicht all zu hart Fronten wenn ich nicht so sauber Code schreibe. hab bei meinem letzten post schon hart auf die Finger bekommen. Trotzdem danke für konstruktive Kritik

P.P.S Mein Namensgenerator Funktioniert einwand frei aber wie schaffe ich es die Daten aus der Klasse Kunde_Zufall ordentlich zu verarbeiten. Lösungsansatz von mir: "in einer variable zu packen und als liste drüber iterieren". Habe ich dann nicht das Problem das das als String nur jeder Buchstabe Einzel ab gearbeitet wird?


Code: Alles auswählen

import sys

import pygame
import namensgenerator
import time
counter_variablen_erzeugung = 0


class Kunde_Zufall():
    def __init__(self,):
        self.vorname = namensgenerator.gender_auswahl_zufall()
        self.nachname = namensgenerator.nachnamen_auswahl()
        self.geschlecht = namensgenerator.geschlecht()


def erzeuge_var(name_als_string, inhalt_variable):
	globals()[name_als_string] = inhalt_variable



counter_kundengeneriert = 0

def kundenerzeugung():
    global counter_kundengeneriert
    global counter_variablen_erzeugung
    global liste
    kunden_string = str('Kunde')+str(counter_kundengeneriert)
    erzeuge_var(kunden_string,Kunde_Zufall())
    print(counter_kundengeneriert)
    liste += 1
    counter_kundengeneriert += 1
    counter_variablen_erzeugung += 1

def draw_text(text):
    font = pygame.font.SysFont("arial", 25)
    y_pos = x_pos = 5

    text = font.render(text, 1, (0, 0, 0))
    screen.blit(text, (x_pos, y_pos))
    pygame.display.update()




#lol = [["Alina","Krause","12","Weiblich"],["Hans","Peter","34","Mänlich"]]
#print(lol[0])
#print(lol[1])

liste = 0
loop = liste
toggle = 0
pygame.init()
screen = pygame.display.set_mode((800, 800))
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_g:
                kundenerzeugung()
            if event.key == pygame.K_k:
                if toggle == 0:
                    toggle + 1
                if toggle == 1:
                    toggle - 1
                print("Spieler hat Taste gedrückt")

            if event.key == pygame.K_UP:
                if loop < liste:
                    loop += 1
                    print(loop)
                elif loop == liste:
                    loop = 0
                    print(loop)
            if event.key == pygame.K_DOWN:
                if loop > 0:
                    loop -= 1
                    print(loop)
                elif loop == 0:
                    loop = liste
                    print(loop)
    if toggle == 0:
        screen.fill((0, 0, 255))
        draw_text(str(loop))
        pygame.display.update()
    elif toggle == 1:
        screen.fill((0, 0, 0))
        pygame.display.update()


    #gedrueckt = pygame.key.get_pressed()
    # Taste für Spieler 1
    #if gedrueckt[pygame.K_UP]:
    #    print("Spieler hat Pfeiltaste hoch gedrückt")

    #if gedrueckt[pygame.K_DOWN]:
    #    print("Spieler hat Pfeiltaste runter gedrückt")

Re: mein switch hat sich aufgehängt

Verfasst: Donnerstag 23. Juni 2022, 02:39
von Sirius3
Vergiss ganz schnell, dass es `globals` überhaupt gibt.
Erstens benutzt man keine globalen Variablen und zweitens erzeugt man keine Variablennamen dynamisch.
Die Alternative sind Wörterbücher, bzw. in Deinem Fall eine Liste, was den Code nicht nur besser, sondern auch deutlich einfacher macht.
`toogle` ist ein Wahrheitswert, dafür nimmt man False und True, nicht 0 oder 1. Wenn man dessen Wert ändern will, muss man auch der Variablen den neuen Wert zuweisen.

Code: Alles auswählen

import pygame
import namensgenerator

class Kunde_Zufall():
    def __init__(self,):
        self.vorname = namensgenerator.gender_auswahl_zufall()
        self.nachname = namensgenerator.nachnamen_auswahl()
        self.geschlecht = namensgenerator.geschlecht()


def draw_text(text):
    font = pygame.font.SysFont("arial", 25)
    y_pos = x_pos = 5

    text = font.render(text, 1, (0, 0, 0))
    screen.blit(text, (x_pos, y_pos))


loop = 0
kunden = []
toggle = False
pygame.init()
screen = pygame.display.set_mode((800, 800))
running =True 
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running  = False 
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_g:
                kunden.append(Kunde_Zufall())
            if event.key == pygame.K_k:
                toggle = not toggle 
                print("Spieler hat Taste gedrückt")

            if event.key == pygame.K_UP:
                if loop < len(kunden):
                    loop += 1
                    print(loop)
                else:
                    loop = 0
                    print(loop)
            if event.key == pygame.K_DOWN:
                if loop > 0:
                    loop -= 1
                else:
                    loop = len(kunden) - 1
                    print(loop)
    if not toggle:
        screen.fill((0, 0, 255))
        draw_text(str(loop))
        pygame.display.update()
    else:
        screen.fill((0, 0, 0))
        pygame.display.update()

Re: mein switch hat sich aufgehängt

Verfasst: Donnerstag 23. Juni 2022, 06:32
von Sirius3
In einem weitern Schritt muß das Hauptprogramm noch in eine Funktion wandern:

Code: Alles auswählen

import pygame
import namensgenerator

class KundeZufall():
    def __init__(self):
        self.vorname = namensgenerator.gender_auswahl_zufall()
        self.nachname = namensgenerator.nachnamen_auswahl()
        self.geschlecht = namensgenerator.geschlecht()


def draw_text(screen, font, text):
    y_pos = x_pos = 5
    surface = font.render(text, 1, (0, 0, 0))
    screen.blit(surface, (x_pos, y_pos))


def main():
    try:
        pygame.init()
        screen = pygame.display.set_mode((800, 800))
        font = pygame.font.SysFont("arial", 25)

        loop = 0
        toggle = False
        kunden = []
        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    return
                elif event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_g:
                        kunden.append(KundeZufall())
                    elif event.key == pygame.K_k:
                        toggle = not toggle 
                        print("Spieler hat Taste gedrückt")
                    elif event.key == pygame.K_UP:
                        if loop < len(kunden):
                            loop += 1
                        else:
                            loop = 0
                        print(loop)
                    elif event.key == pygame.K_DOWN:
                        if loop > 0:
                            loop -= 1
                        else:
                            loop = len(kunden) - 1
                        print(loop)
            if toggle:
                screen.fill((0, 0, 0))
            else:
                screen.fill((0, 0, 255))
                draw_text(screen, font, str(loop))
            pygame.display.update()
    finally:
        pygame.quit()


if __name__ == "__main__":
    main()