123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- # (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
|