diff --git a/Bilder/12x12_Vorlage.xcf b/Bilder/12x12_Vorlage.xcf new file mode 100644 index 0000000..85f9d1e Binary files /dev/null and b/Bilder/12x12_Vorlage.xcf differ diff --git a/Bilder/Gras1.xcf b/Bilder/Gras1.xcf new file mode 100644 index 0000000..3bd50be Binary files /dev/null and b/Bilder/Gras1.xcf differ diff --git a/Bilder/Gras2.xcf b/Bilder/Gras2.xcf new file mode 100644 index 0000000..b078255 Binary files /dev/null and b/Bilder/Gras2.xcf differ diff --git a/Bilder/Gras3.xcf b/Bilder/Gras3.xcf new file mode 100644 index 0000000..1df5e95 Binary files /dev/null and b/Bilder/Gras3.xcf differ diff --git a/Bilder/Gras4.xcf b/Bilder/Gras4.xcf new file mode 100644 index 0000000..bfbeb33 Binary files /dev/null and b/Bilder/Gras4.xcf differ diff --git a/Bilder/Gras5.xcf b/Bilder/Gras5.xcf new file mode 100644 index 0000000..928598d Binary files /dev/null and b/Bilder/Gras5.xcf differ diff --git a/Bilder/Gras6.xcf b/Bilder/Gras6.xcf new file mode 100644 index 0000000..afc42bb Binary files /dev/null and b/Bilder/Gras6.xcf differ diff --git a/Bilder/Monster.xcf b/Bilder/Monster.xcf new file mode 100644 index 0000000..e36db4d Binary files /dev/null and b/Bilder/Monster.xcf differ diff --git a/Bilder/Sand1.xcf b/Bilder/Sand1.xcf new file mode 100644 index 0000000..93ca8af Binary files /dev/null and b/Bilder/Sand1.xcf differ diff --git a/Bilder/Sand2.xcf b/Bilder/Sand2.xcf new file mode 100644 index 0000000..4b2899d Binary files /dev/null and b/Bilder/Sand2.xcf differ diff --git a/Bilder/Sand3.xcf b/Bilder/Sand3.xcf new file mode 100644 index 0000000..bd00153 Binary files /dev/null and b/Bilder/Sand3.xcf differ diff --git a/Bilder/Sand4.xcf b/Bilder/Sand4.xcf new file mode 100644 index 0000000..4b5b9ed Binary files /dev/null and b/Bilder/Sand4.xcf differ diff --git a/Bilder/Sand5.xcf b/Bilder/Sand5.xcf new file mode 100644 index 0000000..71562ed Binary files /dev/null and b/Bilder/Sand5.xcf differ diff --git a/Bilder/Sand6.xcf b/Bilder/Sand6.xcf new file mode 100644 index 0000000..7c73cca Binary files /dev/null and b/Bilder/Sand6.xcf differ diff --git a/Bilder/Spieler.xcf b/Bilder/Spieler.xcf new file mode 100644 index 0000000..5c25b46 Binary files /dev/null and b/Bilder/Spieler.xcf differ diff --git a/README.md b/README.md index 6f57a86..b902a75 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,19 @@ ## Spiel Informatik 2026 Johannes Matzen Eb ### Spielidee -kommt noch... +Ich möchte ein Spiel machen, bei dem man einen Spieler steuert, der durch eine große Welt läuft. Man sieht davon aber immer nur einen Ausschnitt. Die Umgebung wird zufällig generiert und es gibt "Monster", die sich von alleine bewegen (sehr einfache KI). Das Ziel des Spiels wird es (wahrscheinlich) sein, entweder, alle Monster zu besiegen, oder, eine Aufgabe zu erfüllen (z.B. Diamanten sammeln). ### Protokoll #### 09.09. Ich habe programmiert, dass man die Spielfigur in dem Raster bewegen kann und, dass sich das Raster dabei verschiebt. Letzteres funktioniert aber noch nicht so gut. +#### 16.09. +Ich habe ein paar Bugs entfernt (z.B. beim Laden der Grafiken) und versucht, das Verschieben des Rasters zu verbessern. + +#### 19.09. +Zu Hause habe ich es endlich geschafft, das Raster zu verschieben. + +#### 22.09. + diff --git a/Sounds/Ritter Der Kokosnuss - ending song.mp3 b/Sounds/Ritter Der Kokosnuss - ending song.mp3 new file mode 100644 index 0000000..ef227b4 Binary files /dev/null and b/Sounds/Ritter Der Kokosnuss - ending song.mp3 differ diff --git a/Sounds/Schleim_Schritt.mp3 b/Sounds/Schleim_Schritt.mp3 new file mode 100644 index 0000000..9f71755 Binary files /dev/null and b/Sounds/Schleim_Schritt.mp3 differ diff --git a/meinspiel.py b/meinspiel.py index 0a54428..e34945c 100644 --- a/meinspiel.py +++ b/meinspiel.py @@ -1,25 +1,60 @@ import copy import pygame import random +pygame.init() +pygame.mixer.init() class MeinSpiel: - bilder = [] - for i in range(20): - bilder.append("Bilder/"+str(i)+".jpg") + hintergrundstile = ["Sand","Gras"] + hintergrundstil = random.choice(hintergrundstile) + bilder = ["Bilder/Spieler.xcf"] + for i in range(6): + bilder.append("Bilder/"+hintergrundstil+str(i+1)+".xcf") + bilder.append("Bilder/Monster.xcf") spielfeld = [] - feldunterspieler=random.randint(0,5) + feldunterspieler=random.randint(1,5) + felduntermonster=random.randint(1,5) + game_over = False def __init__(self, felderX, felderY): for x in range(felderX): self.spielfeld.append([]) for y in range(felderY): - self.spielfeld[x].append(random.randint(0,5)) + self.spielfeld[x].append(random.randint(1,6)) def anfangsKonfiguration(self): self.spielerx = random.randint(5,9) self.spielery = random.randint(5,9) - self.spielfeld[self.spielerx][self.spielery] = 6 + self.spielfeld[self.spielerx][self.spielery] = 1 + self.monsterx = random.randint(5,9) + self.monstery = random.randint(5,9) + self.spielfeld[self.monsterx][self.monstery] = 1 + + + + def spawnSpieler(self): + self.spielfeld[self.spielerx][self.spielery] = 0 + self.spielfeld[self.monsterx][self.monstery] = self.felduntermonster + self.altmonsterx = self.monsterx + self.altmonstery = self.monstery + self.felduntermonsteralt = self.felduntermonster + self.monsterx,self.monstery = monster.bewegen(monster,self.monsterx,self.monstery) + self.felduntermonster = self.spielfeld[self.monsterx][self.monstery] + + if self.felduntermonster != 6: + self.spielfeld[self.monsterx][self.monstery] = 7 + else: + self.spielfeld[self.altmonsterx][self.altmonstery] = 7 + self.spielfeld[self.monsterx][self.monstery] = 6 + self.felduntermonster = self.felduntermonsteralt + self.monsterx = self.altmonsterx + self.monstery = self.altmonstery + + + if self.spielerx == self.monsterx and self.spielery == self.monstery: + self.game_over = True + def rechts(self): self.spielerx += 1 def links(self): @@ -34,35 +69,101 @@ class MeinSpiel: self.spielfeld[self.spielerx][self.spielery] = self.feldunterspieler posalt=[self.spielerx,self.spielery] feldunterspieleralt=self.feldunterspieler - if taste == 1: + + if taste == 1 and self.spielerx < 41: self.rechts() - if taste == 2: + sound.Schrittsound(sound) + if taste == 2 and self.spielerx > 0: self.links() - if taste == 3: + sound.Schrittsound(sound) + if taste == 3 and self.spielery < 41: self.unten() - if taste == 4: + sound.Schrittsound(sound) + if taste == 4 and self.spielery > 0: self.oben() + sound.Schrittsound(sound) self.feldunterspieler = self.spielfeld[self.spielerx][self.spielery] - if self.feldunterspieler== 5: + if self.feldunterspieler== 6: self.spielerx,self.spielery = posalt self.feldunterspieler=feldunterspieleralt verschiebung = self.hinergrundverschieben(xverschiebungaktuell,yverschiebungaktuell) - self.spielfeld[self.spielerx][self.spielery] = 6 + self.spielfeld[self.spielerx][self.spielery] = 0 return verschiebung def hinergrundverschieben(self,xverschiebungaktuell,yverschiebungaktuell): xverschiebung=0 yverschiebung=0 - if self.spielerx >= 11-xverschiebungaktuell: + if self.spielerx >= 11-xverschiebungaktuell and self.spielerx <= 38 and self.spielerx >= 3: xverschiebung = -1 - if self.spielerx <= 2-xverschiebungaktuell: + if self.spielerx <= 2-xverschiebungaktuell and self.spielerx <= 38 and self.spielerx >= 3: xverschiebung = 1 - if self.spielery >= 11-yverschiebungaktuell: + if self.spielery >= 11-yverschiebungaktuell and self.spielery <= 38 and self.spielery >= 3: yverschiebung = -1 - if self.spielery <= 2-yverschiebungaktuell: + if self.spielery <= 2-yverschiebungaktuell and self.spielery <= 38 and self.spielery >= 3: yverschiebung = 1 verschiebung=[xverschiebung,yverschiebung] return verschiebung - \ No newline at end of file + + + +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,xpos,ypos): + print(self.cooldowny) + print() + print(self.cooldownx) + print() + print() + print() + xrichtung = random.randint(1,50*(self.cooldownx)) + if xrichtung == 1 and xpos < 41: + xpos += 1 + self.cooldownx = 100 + if xrichtung == 2 and xpos > 0: + xpos -= 1 + self.cooldownx = 100 + + if self.cooldownx != 1: + self.cooldownx -= 1 + + + yrichtung = random.randint(1,50*(self.cooldowny)) + if yrichtung == 1 and xpos < 41: + ypos += 1 + self.cooldowny = 100 + if yrichtung == 2 and ypos > 0: + ypos -= 1 + self.cooldowny = 100 + + if self.cooldowny != 1: + self.cooldowny -= 1 + + + return xpos,ypos + diff --git a/starten.py b/starten.py index 2d0943f..52111df 100644 --- a/starten.py +++ b/starten.py @@ -1,5 +1,6 @@ # Importieren u. initialisieren der Pygame-Bibliothek from meinspiel import MeinSpiel +from meinspiel import sound import pygame from pygame.locals import * pygame.init() @@ -12,6 +13,7 @@ FelderX, FelderY = 42, 42 FPS = 60 SCHWARZ = ( 0, 0, 0) WEISS = ( 255, 255, 255) +Beigegelb = ( 226, 181, 97 ) pyGameBilder = [] xverschiebung = 0 yverschiebung = 0 @@ -32,11 +34,12 @@ clock = pygame.time.Clock() # Schleife Hauptprogramm while True: + sound.hintergrundmusik(sound) verschiebung=[0,0] # Überprüfen, ob Nutzer eine Aktion durchgeführt hat for event in pygame.event.get(): # Beenden bei [ESC] oder [X] - if event.type==QUIT or (event.type==KEYDOWN and event.key==K_ESCAPE): + if event.type==QUIT or (event.type==KEYDOWN and event.key==K_ESCAPE) or meinSpiel.game_over == True: pygame.quit() if event.type==KEYDOWN: verschiebung = meinSpiel.bewegen(event.key-1073741902,xverschiebung,yverschiebung) @@ -48,7 +51,7 @@ while True: for y in range(FelderY): fenster.blit(pyGameBilder[meinSpiel.spielfeld[x][y]],((x+xverschiebung)*Pixel,(y+yverschiebung)*Pixel)) # Spielfeld/figuren zeichnen - + meinSpiel.spawnSpieler() # Fenster aktualisieren pygame.display.flip() clock.tick(FPS) \ No newline at end of file