225 lines
9.2 KiB
Python
225 lines
9.2 KiB
Python
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
|
|
|