# (c) Hochschule Anhalt, veröffentlicht unter MIT-Lizenz # Button # Autor: Viktor Lysow, Johannes Tümler # Letzte Änderung: 14.03.2024 # Zweck: Knöpfe fürs Startmenü, Auswahl der Spielfigur # Der Nachfolgende Codeblock "BLOCK1" sorgt dafür, dass man aus jeder Datei heraus das Hauptprogramm starten kann. # Dadurch kann man in jeder Datei auf "play" drücken und es wird automatisch main.py gestartet. if __name__=="__main__": import subprocess # Auf Linux oder Mac aktivieren Sie die folgende Zeile und deaktivieren Sie die Zeile danach: #subprocess.call("python3 main.py", shell=True) # die richtige Main-Datei aufrufen (unser eigentliches Hauptprogramm) subprocess.call("main.py", shell=True) # die richtige Main-Datei aufrufen (unser eigentliches Hauptprogramm) exit(0) # nun das Programm hier beenden .. wir wollen ja nur das Hauptprogramm starten und nicht *diese* Datei. # Hinweis fürs Debugging: Das VSCode-Debugging funktioniert jedoch nur, wenn man das Debugging in der "main.py" beginnt! D.h. wer debuggen möchte, muss die main.py öffnen und dort Debug starten. # Ende "BLOCK1" import pygame import sys import sounds from screen import screen from screen import font from screen import feld from KlasseLevelmanagement import LevelManagement aktivButton = False selectedButton = "none" ioerror = False def textObjekt(text, font): textFlaeche = font.render(text, True, (0, 0, 0)) return textFlaeche, textFlaeche.get_rect() def readConfig(): # in unserem Configfile wird Zeile für Zeile der Eintrag gelesen. Aktuell gibt es nur einen Eintrag ;) global selectedButton if not ioerror: try: file1 = open(LevelManagement.configFile, "r") for line in file1: zeile = line.rstrip() selectedButton = zeile file1.close() except: print("Fehler in Konfigurationsdatei. Nehme 'Held' als Figur.") selectedButton = "Held" # wenn ein Fehler beim Lesen der Configdatei aufgetreten ist, versuchen wir eine neue Datei anzulegen writeConfig(selectedButton) def writeConfig(conf): global ioerror if not ioerror: try: file1 = open(LevelManagement.configFile, "w") file1.write(conf) file1.close() except IOError: print(f"Konnte neue Konfigdatei {LevelManagement.configFile} nicht anlegen. Bitte manuell erstellen. Auswahl der Helden nicht möglich.") ioerror = True def bildButton(bild, bx, by, nachricht, breite, hoehe, farbe_normal, farbe_aktiv, maus, klick): global aktivButton farbe_gespeichert = (0, 255, 255) readConfig() if maus[0] > bx and maus[0] < bx + breite and maus[1] > by and maus[1] < by + hoehe: pygame.draw.rect(screen, farbe_aktiv, (bx, by, breite, hoehe)) if klick[0] == 1 and aktivButton == False: aktivButton = True writeConfig(nachricht) if klick[0] == 0: aktivButton = False else: if selectedButton == nachricht: pygame.draw.rect(screen, farbe_gespeichert, (bx, by, breite, hoehe)) else: pygame.draw.rect(screen, farbe_normal, (bx, by, breite, hoehe)) held = pygame.image.load(bild) held = pygame.transform.scale(held, (feld*2, feld*2)) screen.blit(held, (bx, by)) return False def button(bx, by, nachricht, breite, hoehe, farbe_normal, farbe_aktiv, randDicke, maus, klick): global aktivButton if maus[0] > bx and maus[0] < bx + breite and maus[1] > by and maus[1] < by + hoehe: pygame.draw.rect(screen, farbe_aktiv, (bx, by, breite, hoehe)) if klick[0] == 1 and aktivButton == False: aktivButton = True if nachricht == "Neues Spiel": sounds.soundTor() pygame.time.wait(1000) return True elif nachricht == "Ende": pygame.quit() sys.exit() if klick[0] == 0: aktivButton = False else: pygame.draw.rect(screen, farbe_normal, (bx, by, breite, hoehe)) pygame.draw.rect(screen, (0, 0, 0), (bx, by, breite, hoehe), randDicke) textGrund, textKasten = textObjekt(nachricht, font) textKasten.center = ((bx + (breite / 2)), (by + (hoehe / 2))) screen.blit(textGrund, textKasten) return False