From c634711b571bf8234abb13a8bf05560d956378cf Mon Sep 17 00:00:00 2001 From: Olli Graf Date: Sat, 28 May 2022 16:01:58 +0200 Subject: [PATCH] =?UTF-8?q?Stier=20l=C3=A4uft=20der=20Jacke=20hinterher.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ActionBasics.py | 16 +++++++++++++++- ActionModul.py | 41 +++++++++++++++++++++++++++++++++++------ TestModule.py | 30 ++++++++++++++++++++++++++++++ World.py | 21 +++++++++++++++++++++ WorldParser.py | 2 +- tomb.py | 12 ++++++++++++ world.xml | 12 ++++++++---- 7 files changed, 122 insertions(+), 12 deletions(-) diff --git a/ActionBasics.py b/ActionBasics.py index e167dbf..c9a4f70 100644 --- a/ActionBasics.py +++ b/ActionBasics.py @@ -25,6 +25,12 @@ class ActionBasics: logging.debug(f'ins Inventar {item.name}') self.insInventar(item) + def moveItemVonInventarNachRaum(self,item, nachRaumId): + self.ausDemInventar(item) + raum = self.world.findRaumById(nachRaumId) + raum.items[item.id] = item + item.raumid = nachRaumId + def isItemAndAktRaum(self,item, itemid, raumid): isItem = self.isItem(item,itemid) isRaum = self.isAktuellerRaum(raumid) @@ -47,7 +53,15 @@ class ActionBasics: logging.debug(f'{itemid} -{item.id}') if item.id == itemid: return item - return None + def personVonRaumNachRaum(self, person, vonRaumId, nachRaumId): + vonRaum = self.world.findRaumById(vonRaumId) + nachRaum = self.world.findRaumById(nachRaumId) + + del vonRaum.personen[person.id] + nachRaum.personen[person.id] = person + person.raumid = nachRaumId + + diff --git a/ActionModul.py b/ActionModul.py index f6df98d..444c298 100644 --- a/ActionModul.py +++ b/ActionModul.py @@ -75,7 +75,7 @@ class ActionModul(ActionBasics): self.setFehler('Die Truhe ist verschlossen und dir fehlt der passende Schlüssel.') elif item.id == self.world.ITEM_HAUSTUER: - if self.world.aktuellerRaum.id == self.world.RAUM_FLUR: + if self.isAktuellerRaum(self.world.RAUM_FLUR): schluessel = self.world.findItemImInventarById(self.world.ITEM_HAUSTUERSCHLUESSEL) logging.debug(f'öffne Haustür Schlüssel ist {schluessel}') @@ -86,6 +86,21 @@ class ActionModul(ActionBasics): self.world.aktuellerRaum.ausgaenge[self.world.SUED] = self.world.RAUM_GARTEN else: self.setFehler('Die Tür ist verschlossen.') + elif item.id == self.world.ITEM_GATTER: + logging.debug('Gatter öffnen') + if self.isAktuellerRaum(self.world.RAUM_WIESE): + stier = self.world.findPersonImAktuellenRaum(self.world.PERSON_STIER) + + logging.debug('Stier ist {stier}') + + if stier != None: + item.zustand = item.OFFEN + self.macheWegFrei(self.world.SUED,self.world.RAUM_BRACHLAND) + self.setFehler('Das Gatter steht offen.') + else: + self.setFehler(f'Der {stier.name} steht dir im Weg.') + + def isAktuellerRaum(self, raumid): return self.world.aktuellerRaum.id == raumid @@ -215,7 +230,10 @@ class ActionModul(ActionBasics): return item = self.world.findItemImInventarOderAktuellerRaum(parsedCommand.gegenstand) - + if item == None: + self.setFehler('Das sehe ich hier nicht') + return + if item != None: if item.id == self.world.ITEM_PFLANZE: krug = self.world.findRaumItemById(self.world.ITEM_KRUG) @@ -248,10 +266,6 @@ class ActionModul(ActionBasics): else: self.zeigeItemBeschreibung(item) - - - - else: logging.debug('Kein Item gefunden, suche nach Raum') self.untersucheAktuellenRaum(parsedCommand) @@ -295,6 +309,21 @@ class ActionModul(ActionBasics): self.setFehler('Der Elefant ist schon geflohen.') else: self.setFehler('Das besitzt du nicht') + elif self.isAktuellerRaum(self.world.RAUM_WIESE): + logging.debug('Jackenwurf') + stier = self.world.findPersonImAktuellenRaumById(self.world.PERSON_STIER) + jacke = self.world.findItemImInventarById(self.world.ITEM_JACKE) + + logging.debug(f'Stier {stier},Jacke {jacke}') + if stier != None: + if jacke != None: + self.world.printText('jackewurf') + self.personVonRaumNachRaum(stier,self.world.aktuellerRaum.id, self.world.RAUM_FELD) + self.moveItemVonInventarNachRaum(jacke, self.world.RAUM_FELD) + else: + self.setFehler('Die trägst du nicht bei dir.') + else: + self.verliere(parsedCommand) else: self.verliere(parsedCommand) diff --git a/TestModule.py b/TestModule.py index 5ea7cc7..fddd9cb 100644 --- a/TestModule.py +++ b/TestModule.py @@ -136,6 +136,36 @@ class TestModule: self.world.schrittzaehler = self.schrittzaehler + def testStier(self): + self.testTeich() + + pcmd = self.parseInput('nimm Fisch') + self.ac.nimm(pcmd) + + # zum Bach + self.ac.west() + self.schrittzaehler += 1 + + + #Aufs Feld + self.ac.sued() + self.schrittzaehler += 1 + + # Kleines Feld + self.ac.sued() + self.schrittzaehler += 1 + + pcmd = self.parseInput('nimm Maus') + self.ac.nimm(pcmd) + self.schrittzaehler += 1 + + self.ac.nord() + self.schrittzaehler += 1 + + # Auf die Wiese + self.ac.west() + self.schrittzaehler += 1 + def testRanke(self): self.testTeich() diff --git a/World.py b/World.py index 49c6a02..1ff8dd1 100644 --- a/World.py +++ b/World.py @@ -135,6 +135,13 @@ class World: return None + def findRaumById(self,raumid): + + for rid in self.raumliste: + if rid == raumid: + return self.raumliste[rid] + return None + def findItemInAktuellerRaum(self,itemname): raum = self.aktuellerRaum @@ -170,6 +177,16 @@ class World: return person return None + def findPersonImAktuellenRaumById(self, personid): + raum = self.aktuellerRaum + + for persid in raum.personen: + person = raum.personen[persid] + + if person.id == personid: + return person + return None + def findItemImInventar(self,itemname): @@ -308,6 +325,7 @@ class World: self.ITEM_BOHNENRANKE = '21' self.ITEM_ELEFANT = '22' self.ITEM_HAFEN = '23' + self.ITEM_GATTER = '25' # Räume @@ -342,6 +360,9 @@ class World: # Personen self.PERSON_GEIST = '4' + self.PERSON_FISCH = '2' + self.PERSON_STIER = '5' + self.PERSON_ZWERG = '6' self.fehler = '' diff --git a/WorldParser.py b/WorldParser.py index c7b9b05..b9c5644 100644 --- a/WorldParser.py +++ b/WorldParser.py @@ -135,7 +135,7 @@ class WorldParser(): person = Person(name,id,raum) self.world.personen[id] = person raum = self.world.sucheRaum(raumid) - raum.personen[raumid] = person + raum.personen[id] = person # Texte for item in root.findall('texte/text'): diff --git a/tomb.py b/tomb.py index 9f059f7..a9b3d92 100755 --- a/tomb.py +++ b/tomb.py @@ -111,6 +111,8 @@ def inputLoop(stdscr): debug_Items() elif debugcommand[1] == 'inventar': debug_Inventar() + elif debugcommand[1] == 'personen': + debug_Personen() elif command.startswith('auto:'): command = command.rstrip() if command.startswith('auto:'): @@ -129,6 +131,8 @@ def inputLoop(stdscr): testmodul.testTal() elif debugcommand[1] =='baumhaus': testmodul.testBaumhaus() + elif debugcommand[1] == 'stier': + testmodul.testStier() world.fehler = '' @@ -140,6 +144,14 @@ def inputLoop(stdscr): verarbeiteBefehl(parsedCommand) actionmodul.raumaction() +def debug_Personen(): + logging.debug('Personen im aktuellen Raum') + + for pid in world.aktuellerRaum.personen: + person = world.personen[pid] + + logging.debug(f'Id: {person.id} - Name: {person.name}') + def debug_Items(): logging.debug('liste Items') logging.debug(world.gegenstaende) diff --git a/world.xml b/world.xml index 60d92c3..6b35513 100644 --- a/world.xml +++ b/world.xml @@ -84,15 +84,13 @@ - - + - Du stehst auf einer Wiese, die nach + Du stehst auf einer umzäunten Wiese, Ein Gatter versperrt den Weg nach Süden. - Brachland. Hier wächst nicht viel abgesehen von einer einzelnen Bohnenranke. @@ -265,11 +263,14 @@ + + + @@ -352,5 +353,8 @@ Als der Elefant die Maus sieht, bekommt er einen Riesenschreck und flüchtet. Dadurch wird der Weg nach Süden frei. + + Der Stier ist völlig fasziniert, als du die Jacke hin und herschwenkst. Als du sie nach Osten wirfst, schaubt er einmal auf und rennt hinter her. +