123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- # (c) Hochschule Anhalt, veröffentlicht unter MIT-Lizenz
- # Figur-Klasse
- # Autor: Johannes Tümler
- # Letzte Änderung: 12.04.2022
- # Zweck: Figur-Entität definieren
- #
- # Harpyie erbt Alles von Monster
- # können den Held bei Berührung töten
- # Harpyie kann in alle 4 Himmelrichtungen schießen, nacheinander pro Richtung (nicht zugleich)
- # Harpyie kann seitwärts schießen
- # Harpyie kann in alle Richtungen bewegen
- # 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"
- from re import I
- import pygame
- from KlasseMonster import Monster
- from time import time
- from random import randint
- from KlasseMagie import Magie
- from KlasseHeld import Held
- import sounds #Die Quelle von Sounds Von Gamewin
- from sounds import soundGewonnen
- class Harpyie(Monster): #erbt vom Monster
- def __init__(self, x, y, geschw, breite, hoehe, level, bildFigur, zeitMonster):
- super().__init__(x, y, geschw, breite, hoehe, level, bildFigur,zeitMonster)
-
- self.MonsterDupl = Monster #Welche Klasse erschaffen wird
- self.dupliList = [] #Liste der erschaffenen Hapyie
- self.zeitDupl = zeitMonster
- self.anzahlDouble = 1
- self.zeitUnsicht = zeitMonster
- self.bildUnsicht = [pygame.image.load("Bilder/Harpyie/tot.png"),
- pygame.image.load("Bilder/Harpyie/tot.png")]
- self.saveBildOben = self.bildOben
- self.saveBildUnten = self.bildUnten
- self.saveBildRechts = self.bildRechts
- self.saveBildLinks = self.bildLinks
- self.zeitSpring = zeitMonster
- self.Harpyiekugeln = [] #Die Kugelnlist von Hapyie
- self.MagieReichtung=0
- self.block=True
- def reset(self): #Codequelle: KlasseMonster
- self.x = self.xReset
- self.y = self.yReset
- self.leben = True
- self.heldTot = False
- self.anzahlDouble = 1 #Reset: Jedes Reset wird anzahlDouble 1 sein
- self.dupliList = []
- self.Harpyiekugeln = []
- def faehigkeit(self): #Fähigkeiten von Harpyie
- self.toeten()
- self.duplizieren()
- self.Magie() #Lass Harpyie Magiekugel schiessen kann
-
- def duplizieren(self): #Codequelle von KlasseGeist
- for dupli in self.dupliList: #Alle erschaffenen Hapyie in Bewegung bringen
- if dupli.mlaufen(self.heldDaten): #Prüfen ob ein erschaffene Hapyie den Held getötet hat
- self.heldTot = True
- if time() - self.zeitDupl >= 0.5 * self.anzahlDouble: #Zeit zur Duplezierung wird jedes mal erhöht
- self.dupliList.append(self.MonsterDupl(x = self.x, y = self.y, geschw = self.geschw, breite = self.breite, hoehe = self.hoehe, level = self.level, bildFigur = self.bildFigur, zeitMonster = time())) #Monster wird erschaffen und in die Liste eingefügt
- self.zeitDupl = time() #Zeit wird wieder auf Null gesetzt
- self.anzahlDouble += 1
-
- def Magie(self): #Hapyie kann die Magiekugeln schiessen
- if(int(time())%2==0): #Kugelschuss nicht gleichzeitig: ein Kugel pro 2 Sekunden
- if (self.block):
- self.Harpyiekugeln.append(Magie(self.x, self.y, self.MagieReichtung, "R", 1)) #Die Position, Richtungen, Farben von Harpyies Kugeln
- self.block=False
- self.MagieReichtung+=1
- if self.MagieReichtung == 8: #kugelschuss in jede Richtungen:8 Kugelnrichungen
- self.MagieReichtung=0
- else:
- self.block=True
- for k in self.Harpyiekugeln: #Alle Magiekugeln werden in Bewegung gebracht und Kollision von Hindernissen vernichtet
- if not self.hindernis(k.kugelRec):
- self.Harpyiekugeln.remove(k)
- k.bewegung()
- for b in self.heldDaten.kugeln: #Die Kugeln von Held und Hapyie werden vernichtet, wenn sie sich berühren
- if k.kugelRec.colliderect(b.kugelRec):
- self.heldDaten.kugeln.remove(b)
- self.Harpyiekugeln.remove(k)
-
- def sterben(self): # Hapyie ist tot nach der Berührung von der Magie des Helden
- for k in self.heldDaten.kugeln:
- if self.rechteck.colliderect(k.kugelRec): #Wenn Hapyie gestorben: gewonnen-Sound wird aktiviert
- self.heldDaten.kugeln.remove(k) #Codequelle:GameOver und KlasseMonster
- self.leben = False
- soundGewonnen()
-
|