button.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. # (c) Hochschule Anhalt, veröffentlicht unter MIT-Lizenz
  2. # Button
  3. # Autor: Viktor Lysow, Johannes Tümler
  4. # Letzte Änderung: 14.03.2024
  5. # Zweck: Knöpfe fürs Startmenü, Auswahl der Spielfigur
  6. # Der Nachfolgende Codeblock "BLOCK1" sorgt dafür, dass man aus jeder Datei heraus das Hauptprogramm starten kann.
  7. # Dadurch kann man in jeder Datei auf "play" drücken und es wird automatisch main.py gestartet.
  8. if __name__=="__main__":
  9. import subprocess
  10. # Auf Linux oder Mac aktivieren Sie die folgende Zeile und deaktivieren Sie die Zeile danach:
  11. #subprocess.call("python3 main.py", shell=True) # die richtige Main-Datei aufrufen (unser eigentliches Hauptprogramm)
  12. subprocess.call("main.py", shell=True) # die richtige Main-Datei aufrufen (unser eigentliches Hauptprogramm)
  13. exit(0) # nun das Programm hier beenden .. wir wollen ja nur das Hauptprogramm starten und nicht *diese* Datei.
  14. # 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.
  15. # Ende "BLOCK1"
  16. import pygame
  17. import sys
  18. import sounds
  19. from screen import screen
  20. from screen import font
  21. from screen import feld
  22. from KlasseLevelmanagement import LevelManagement
  23. aktivButton = False
  24. selectedButton = "none"
  25. ioerror = False
  26. def textObjekt(text, font):
  27. textFlaeche = font.render(text, True, (0, 0, 0))
  28. return textFlaeche, textFlaeche.get_rect()
  29. def readConfig(): # in unserem Configfile wird Zeile für Zeile der Eintrag gelesen. Aktuell gibt es nur einen Eintrag ;)
  30. global selectedButton
  31. if not ioerror:
  32. try:
  33. file1 = open(LevelManagement.configFile, "r")
  34. for line in file1:
  35. zeile = line.rstrip()
  36. selectedButton = zeile
  37. file1.close()
  38. except:
  39. print("Fehler in Konfigurationsdatei. Nehme 'Held' als Figur.")
  40. selectedButton = "Held"
  41. # wenn ein Fehler beim Lesen der Configdatei aufgetreten ist, versuchen wir eine neue Datei anzulegen
  42. writeConfig(selectedButton)
  43. def writeConfig(conf):
  44. global ioerror
  45. if not ioerror:
  46. try:
  47. file1 = open(LevelManagement.configFile, "w")
  48. file1.write(conf)
  49. file1.close()
  50. except IOError:
  51. print(f"Konnte neue Konfigdatei {LevelManagement.configFile} nicht anlegen. Bitte manuell erstellen. Auswahl der Helden nicht möglich.")
  52. ioerror = True
  53. def bildButton(bild, bx, by, nachricht, breite, hoehe, farbe_normal, farbe_aktiv, maus, klick):
  54. global aktivButton
  55. farbe_gespeichert = (0, 255, 255)
  56. readConfig()
  57. if maus[0] > bx and maus[0] < bx + breite and maus[1] > by and maus[1] < by + hoehe:
  58. pygame.draw.rect(screen, farbe_aktiv, (bx, by, breite, hoehe))
  59. if klick[0] == 1 and aktivButton == False:
  60. aktivButton = True
  61. writeConfig(nachricht)
  62. if klick[0] == 0:
  63. aktivButton = False
  64. else:
  65. if selectedButton == nachricht:
  66. pygame.draw.rect(screen, farbe_gespeichert, (bx, by, breite, hoehe))
  67. else:
  68. pygame.draw.rect(screen, farbe_normal, (bx, by, breite, hoehe))
  69. held = pygame.image.load(bild)
  70. held = pygame.transform.scale(held, (feld*2, feld*2))
  71. screen.blit(held, (bx, by))
  72. return False
  73. def button(bx, by, nachricht, breite, hoehe, farbe_normal, farbe_aktiv, randDicke, maus, klick):
  74. global aktivButton
  75. if maus[0] > bx and maus[0] < bx + breite and maus[1] > by and maus[1] < by + hoehe:
  76. pygame.draw.rect(screen, farbe_aktiv, (bx, by, breite, hoehe))
  77. if klick[0] == 1 and aktivButton == False:
  78. aktivButton = True
  79. if nachricht == "Neues Spiel":
  80. sounds.soundTor()
  81. pygame.time.wait(1000)
  82. return True
  83. elif nachricht == "Ende":
  84. pygame.quit()
  85. sys.exit()
  86. if klick[0] == 0:
  87. aktivButton = False
  88. else:
  89. pygame.draw.rect(screen, farbe_normal, (bx, by, breite, hoehe))
  90. pygame.draw.rect(screen, (0, 0, 0), (bx, by, breite, hoehe), randDicke)
  91. textGrund, textKasten = textObjekt(nachricht, font)
  92. textKasten.center = ((bx + (breite / 2)), (by + (hoehe / 2)))
  93. screen.blit(textGrund, textKasten)
  94. return False