123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- # (c) Hochschule Anhalt, veröffentlicht unter MIT-Lizenz
- # Held-Klasse
- # Autor: Viktor Lysow
- # Letzte Änderung: 30.03.2022
- # Zweck: Held-Entität definieren
- #
- # Held erbt Alles von Figur
- # Held kann stehen und nicht laufen
- # Held wird mit Steuerkreuz/Pfeiltasten gesteuert
- # Held kann mit Leerzeichen in seine Guckrichtung schießen
- # 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.
- # Ende "BLOCK1"
- import pygame
- from KlasseLevelmanagement import LevelManagement
- from screen import screen
- from KlasseFigur import Figur
- from KlasseMagie import Magie
- from KlasseMonster import Monster
- class Held(Figur):
- def __init__(self, x, y, geschw, breite, hoehe, level, bildFigur):
- super().__init__(x, y, geschw, breite, hoehe, level, bildFigur)
- self.bildOben.append(pygame.image.load(f"Bilder/{bildFigur}/HintenS.png"))
- self.bildUnten.append(pygame.image.load(f"Bilder/{bildFigur}/VornS.png"))
- self.bildRechts.append(pygame.image.load(f"Bilder/{bildFigur}/RechtsS.png"))
- self.bildLinks.append(pygame.image.load(f"Bilder/{bildFigur}/LinksS.png"))
- self.bildtot = pygame.image.load(f"Bilder/{bildFigur}/tot.png")
- self.stehRicht = 0
- self.spaceHalten = False
- self.letzterSchuss = 0
- def stehen(self): #Nur der Held kann stehen
- if self.stehRicht == 0:
- screen.blit(self.bildOben[2], (self.x, self.y))
- if self.stehRicht == 1:
- screen.blit(self.bildUnten[2], (self.x, self.y))
- if self.stehRicht == 2:
- screen.blit(self.bildRechts[2], (self.x, self.y))
- if self.stehRicht == 3:
- screen.blit(self.bildLinks[2], (self.x, self.y))
- def steuerung(self):
- self.gedrueckt = pygame.key.get_pressed()
- if self.gedrueckt[pygame.K_UP]:
- self.laufen(0)
- self.stehRicht = 0
- elif self.gedrueckt[pygame.K_DOWN]:
- self.laufen(1)
- self.stehRicht = 1
- elif self.gedrueckt[pygame.K_RIGHT]:
- self.laufen(2)
- self.stehRicht = 2
- elif self.gedrueckt[pygame.K_LEFT]:
- self.laufen(3)
- self.stehRicht = 3
- else:
- self.stehen()
- self.schuss()
- # hidden evil hack
- if self.gedrueckt[pygame.K_x]:
- for m in Monster.monsterListe:
- m.leben = False
- if LevelManagement.joystick != None:
- if LevelManagement.joystick.get_axis(LevelManagement.joystickXAchse) > 0.1: # 0.1 anstelle von 0, weil die analogen Joystickachsen of nicht auf "exakt 0" stehen
- self.laufen(2)
- self.stehRicht = 2
- elif LevelManagement.joystick.get_axis(LevelManagement.joystickXAchse) < -0.1:
- self.laufen(3)
- self.stehRicht = 3
- if LevelManagement.joystick.get_axis(LevelManagement.joystickYAchse) > 0.1: # 0.1 anstelle von 0, weil die analogen Joystickachsen of nicht auf "exakt 0" stehen
- self.laufen(1)
- self.stehRicht = 1
- elif LevelManagement.joystick.get_axis(LevelManagement.joystickYAchse) < -0.1:
- self.laufen(0)
- self.stehRicht = 0
- def schuss(self):
- if (self.gedrueckt[pygame.K_SPACE] or (LevelManagement.joystick != None and LevelManagement.joystick.get_button(LevelManagement.joystickFireButton))) and self.spaceHalten and len(self.kugeln) <= 3: # Leerzeichen wird nur pro Tastenschlag gezählt und es dürfen nicht mehr als 4 Magiekugeln existieren
- self.kugeln.append(Magie(self.x, self.y, self.stehRicht, "B", 5)) #Magie wird erschaffen
- self.schussZaehler += 1
- self.spaceHalten = False
- if not (self.gedrueckt[pygame.K_SPACE] or (LevelManagement.joystick != None and LevelManagement.joystick.get_button(LevelManagement.joystickFireButton))): #Leerzeichen wird losgelassen
- self.spaceHalten = True
- for k in self.kugeln: #Alle Magiekugeln werden in Bewegung gebracht und Kollision von Hindernissen vernichtet
- if not self.hindernis(k.waffeRec):
- self.kugeln.remove(k)
- k.bewegung()
- def neu_Position(self,x_neu, y_neu, level_neu):
- self.x = x_neu
- self.y = y_neu
- self.rechteck = pygame.Rect(self.x, self.y, self.breite, self.hoehe) # Aktualisierung der Rechtecke
- self.obenKollision = pygame.Rect(self.x + self.breite / 2 - 2, self.y, 4, 4)
- self.untenKollision = pygame.Rect(self.x + self.breite / 2 - 2, self.y + self.hoehe - 4, 4, 4)
- self.rechtsKollision = pygame.Rect(self.x + self.breite - 2, self.y + self.hoehe / 2 - 2, 4, 4)
- self.linksKollision = pygame.Rect(self.x, self.y + self.hoehe / 2 - 2, 4, 4)
- self.kugeln = []
- self.level = level_neu
|