import copy import pygame import random pygame.init() pygame.mixer.init() class MeinSpiel: hintergrundstile = ["Sand","Gras"] hintergrundstil = random.choice(hintergrundstile) ebene0bilder = [] for i in range(6): ebene0bilder.append("Bilder/"+hintergrundstil+str(i+1)+".xcf") ebene0feld = [] ebene1bilder = ["Bilder/leer.xcf","Bilder/angriff2.xcf","Bilder/angriff1.xcf"] ebene1feld = [] ebene2bilder = ["Bilder/leer.xcf","Bilder/Monster.xcf","Bilder/Monster.xcf","Bilder/Monster.xcf","Bilder/Spieler.xcf"] ebene2feld = [] game_over = False anzahlMonster= 0 monsterspawncooldown=0 monsterstruktur = [] betrachtetesmonster = 0 cooldownangriff = 0 spielerleben = 10 angriffMonster = 420 def __init__(self, felderX, felderY): for x in range(felderX): self.ebene0feld.append([]) for y in range(felderY): self.ebene0feld[x].append(random.randint(0,5)) for x in range(felderX): self.ebene2feld.append([]) for y in range(felderY): self.ebene2feld[x].append(0) for x in range(felderX): self.ebene1feld.append([]) for y in range(felderY): self.ebene1feld[x].append(0) def anfangsKonfiguration(self): self.spielerx = random.randint(5,9) self.spielery = random.randint(5,9) self.ebene2feld[self.spielerx][self.spielery] = 4 def Monster(self): if self.monsterspawncooldown == 0: self.anzahlMonster += 1 #Monsterstruktur: [x,y,Leben,cooldown Schaden bekommen, cooldown angreifen] self.monsterstruktur.append([random.randint(1,42),random.randint(1,42),random.randint(1,42),random.randint(1,42),3,0,0]) self.monsterspawncooldown = 600 self.betrachtetesmonster = 0 while self.betrachtetesmonster < self.anzahlMonster: self.monsterstruktur [self.betrachtetesmonster][2] = self.monsterstruktur [self.betrachtetesmonster][0] self.monsterstruktur [self.betrachtetesmonster][3] = self.monsterstruktur [self.betrachtetesmonster][1] self.monsterstruktur [self.betrachtetesmonster][0],self.monsterstruktur [self.betrachtetesmonster][1] = monster.bewegen(monster,self.monsterstruktur [self.betrachtetesmonster][0],self.monsterstruktur [self.betrachtetesmonster][1]) if self.ebene0feld[self.monsterstruktur [self.betrachtetesmonster][0]][self.monsterstruktur [self.betrachtetesmonster][1]] == 5 or self.ebene2feld[self.monsterstruktur [self.betrachtetesmonster][0]][self.monsterstruktur [self.betrachtetesmonster][1]] > 0: self.ebene2feld[self.monsterstruktur [self.betrachtetesmonster][0]][self.monsterstruktur [self.betrachtetesmonster][1]] = 0 self.monsterstruktur [self.betrachtetesmonster][0] = self.monsterstruktur [self.betrachtetesmonster][2] self.monsterstruktur [self.betrachtetesmonster][1] = self.monsterstruktur [self.betrachtetesmonster][3] else: self.ebene2feld[self.monsterstruktur [self.betrachtetesmonster][2]][self.monsterstruktur [self.betrachtetesmonster][3]] = 0 #print(self.betrachtetesmonster) self.ebene2feld[self.monsterstruktur [self.betrachtetesmonster][0]][self.monsterstruktur [self.betrachtetesmonster][1]] = self.monsterstruktur[self.betrachtetesmonster][4] self.betrachtetesmonster +=1 self.monsterspawncooldown -=1 def Monsterangriff(self): self.betrachtetesmonster = 0 while self.betrachtetesmonster < self.anzahlMonster: self.Monsterangriff = random.randint(0,420) x,y = self.monsterstruktur [self.betrachtetesmonster] [0]-1, self.monsterstruktur [self.betrachtetesmonster] [1]-1 if self.Monsterangriff == 0: for i in range(3): for j in range(3): self.ebene1feld[x+i] [y+j] = 2 self.monsterstruktur [self.betrachtetesmonster] [6] = 10 if self.monsterstruktur [self.betrachtetesmonster] [6]==0: for i in range(3): for j in range(3): self.ebene1feld[x+i] [y+j] = 0 else: self.monsterstruktur [self.betrachtetesmonster] [6] -= 1 self.betrachtetesmonster +=1 def Monstergetroffen(self): self.betrachtetesmonster = 0 while self.betrachtetesmonster < self.anzahlMonster: if self.ebene1feld[self.monsterstruktur [self.betrachtetesmonster][0]][self.monsterstruktur [self.betrachtetesmonster][1]] ==1 and self.monsterstruktur [self.betrachtetesmonster] [5] == 0: self.monsterstruktur [self.betrachtetesmonster][4] -= 1 self.monsterstruktur [self.betrachtetesmonster] [5] = 42 if self.monsterstruktur [self.betrachtetesmonster] [5] > 0: self.monsterstruktur [self.betrachtetesmonster] [5] -= 1 self.betrachtetesmonster +=1 def rechts(self): self.spielerx += 1 def links(self): self.spielerx -= 1 def oben(self): self.spielery -= 1 def unten(self): self.spielery += 1 def bewegen(self,taste,xverschiebungaktuell,yverschiebungaktuell): verschiebung = [0,0] self.altspielerx = self.spielerx self.altspielery = self.spielery if (taste == pygame.K_RIGHT or taste == pygame.K_d) and self.spielerx < 41: self.rechts() sound.Schrittsound(sound) if (taste == pygame.K_LEFT or taste == pygame.K_a) and self.spielerx > 0: self.links() sound.Schrittsound(sound) if (taste == pygame.K_DOWN or taste == pygame.K_s) and self.spielery < 41: self.unten() sound.Schrittsound(sound) if (taste == pygame.K_UP or taste == pygame.K_w) and self.spielery > 0: self.oben() sound.Schrittsound(sound) if self.ebene0feld[self.spielerx][self.spielery]== 5 or self.ebene2feld[self.spielerx][self.spielery] > 0: self.ebene2feld[self.spielerx][self.spielery] = 0 self.spielerx,self.spielery = self.altspielerx,self.altspielery verschiebung = self.hinergrundverschieben(xverschiebungaktuell,yverschiebungaktuell) self.ebene2feld[self.altspielerx][self.altspielery] = 0 self.ebene2feld[self.spielerx][self.spielery] = 4 return verschiebung def hinergrundverschieben(self,xverschiebungaktuell,yverschiebungaktuell): xverschiebung=0 yverschiebung=0 if self.spielerx >= 11-xverschiebungaktuell and self.spielerx <= 38 and self.spielerx >= 3: xverschiebung = -1 if self.spielerx <= 2-xverschiebungaktuell and self.spielerx <= 38 and self.spielerx >= 3: xverschiebung = 1 if self.spielery >= 11-yverschiebungaktuell and self.spielery <= 38 and self.spielery >= 3: yverschiebung = -1 if self.spielery <= 2-yverschiebungaktuell and self.spielery <= 38 and self.spielery >= 3: yverschiebung = 1 verschiebung=[xverschiebung,yverschiebung] return verschiebung def angriff(self): x,y = self.spielerx-1,self.spielery-1 for i in range(3): for j in range(3): self.ebene1feld[x+i] [y+j] = 1 self.cooldownangriff = 10 def angriffzuruecksetzen(self): if self.cooldownangriff==0: x,y = self.spielerx-1,self.spielery-1 for i in range(3): for j in range(3): self.ebene1feld[x+i] [y+j] = 0 else: self.cooldownangriff -= 1 def debug(self): print(self.monsterstruktur) class sound: hintergrundsong1 = pygame.mixer.Sound("Sounds/Ritter Der Kokosnuss - ending song.mp3") hintergrundsong1.set_volume(0.8) SchleimSchritt = pygame.mixer.Sound("Sounds/Schleim_Schritt.mp3") Hintergrundkanal = pygame.mixer.Channel(0) Kanal1 = pygame.mixer.Channel(1) Kanal2 = pygame.mixer.Channel(2) Kanal3 = pygame.mixer.Channel(3) Kanal4 = pygame.mixer.Channel(4) def __init__(self): pass def hintergrundmusik(self): if not self.Hintergrundkanal.get_busy(): self.Hintergrundkanal.play(self.hintergrundsong1) def Schrittsound(self): self.Kanal1.play(self.SchleimSchritt) class monster: cooldownx = 1 cooldowny = 1 def __init__(self): pass def bewegen(self,posx,posy): xrichtung = random.randint(1,50*(self.cooldownx)) if xrichtung == 1 and posx <= 42: posx += 1 self.cooldownx = 100 if xrichtung == 2 and posx >= 0: posx -= 1 self.cooldownx = 100 if self.cooldownx != 1: self.cooldownx -= 1 yrichtung = random.randint(1,50*(self.cooldowny)) if yrichtung == 1 and posy <= 42: posy += 1 self.cooldowny = 100 if yrichtung == 2 and posy >= 0: posy -= 1 self.cooldowny = 100 if self.cooldowny != 1: self.cooldowny -= 1 return posx,posy