From 227271ad09d331e1a67c8a4d2a5619021cde47c6 Mon Sep 17 00:00:00 2001 From: Olli Graf Date: Fri, 27 May 2022 16:35:23 +0200 Subject: [PATCH] Volles Wchstum der Bohnenranke, die Spitze ist erreichbar. --- ActionBasics.py | 8 +++ ActionModul.py | 82 +++++++++++++++++++++----- TestModule.py | 84 ++++++++++++++++++--------- World.py | 38 +++++++++++- data/Raum.py | 1 + data/__pycache__/Raum.cpython-38.pyc | Bin 3874 -> 3893 bytes tomb.py | 4 ++ world.xml | 19 +++++- 8 files changed, 191 insertions(+), 45 deletions(-) create mode 100644 ActionBasics.py diff --git a/ActionBasics.py b/ActionBasics.py new file mode 100644 index 0000000..2f24c25 --- /dev/null +++ b/ActionBasics.py @@ -0,0 +1,8 @@ +import logging + +class ActionBasics: + + def __init__(self,world): + self.world = world + + diff --git a/ActionModul.py b/ActionModul.py index 92c6184..3cdf48e 100644 --- a/ActionModul.py +++ b/ActionModul.py @@ -1,6 +1,9 @@ -import logging +# Actionmdul - hier werden die Kommandos ausgeführt und die Spielwelt entsprend aktualisiert. -class ActionModul: +import logging +from ActionBasics import ActionBasics + +class ActionModul(ActionBasics): def isBlank(self,str): logging.debug(f'isBlank(): str=*{str}*') @@ -10,7 +13,7 @@ class ActionModul: def __init__(self, world): - self.world = world + super().__init__(world) def warte(self): print('Du wartest') @@ -31,10 +34,19 @@ class ActionModul: if item != None: if item.id == self.world.ITEM_RANKGITTER: self.rauf() + elif item.id == self.world.ITEM_BOHNENRANKE: + if item.zustand == item.GROSS: + self.rauf() + else: + self.setFehler('zum Klettern ist die Bohnenranke zu klein.') else: self.setFehler('Das sehe ich hier nicht.') + def vanishItem(self, item): + item.sichtbar = False + self.ausDemInventar(item) + def oeffne(self,parsedCommand): item = self.world.findItemImInventarOderAktuellerRaum(parsedCommand.gegenstand); @@ -46,10 +58,10 @@ class ActionModul: logging.debug('öffne Truhe') schluessel = self.world.findItemImInventarById(self.world.ITEM_KLEINER_SCHLUESSEL) + self.vanishItem(schluessel) + if schluessel != None and item.zustand != item.OFFEN: item.zustand = item.OFFEN - schluessel.sichtbar = False - self.ausDemInventar(schluessel) seil = self.world.findItemById(self.world.ITEM_SEIL) seil.raumid = self.world.aktuellerRaum.id seil.sichtbar = True @@ -69,10 +81,9 @@ class ActionModul: logging.debug(f'öffne Haustür Schlüssel ist {schluessel}') if schluessel != None: item.zustand = item.OFFEN - schluessel.sichtbar = False + self.vanishItem(schluessel) self.setFehler('Die Haustür ist geöffnet,der Haustürschlüssel löst sich auf.') self.world.aktuellerRaum.ausgaenge[self.world.SUED] = self.world.RAUM_GARTEN - self.ausDemInventar(schluessel) else: self.setFehler('Die Tür ist verschlossen.') @@ -263,6 +274,15 @@ class ActionModul: def fange(self, parsedCommand): skip + def wirf(self,parsedCommand): + item = self.world.findItemImInventar(parsedCommand.gegenstand) + + if self.isItemAndAktRaum(item, self.world.ITEM_SEIL,self.world.RAUM_BAUM): + self.world.printText('seilwurf') + self.world.aktuellerRaum.richtungen[self.world.RAUF] = self.world.RAUM_BAUMHAUS + self.ausDemInventar(item) + + def klettere(self, parsedCommand): leiter = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand) @@ -271,6 +291,13 @@ class ActionModul: if self.isAktuellerRaum(self.world.RAUM_ESSZIMMER): logging.debug(f'aktuellerRaum ist {self.world.aktuellerRaum.id}') self.rauf() + elif self.isAktuellerRaum(self.world.RAUM_BRACHLAND): + ranke = self.findItemImInventarOderAktuellerRaum(self.world.ITEM_BOHNENRANKE): + + if ranke.zustand == Gegenstand.GROSS: + self.ac.rauf() + else: + self.setFehler('Die Bohnenranke ist zu klein, um daran hoch zu klettern.') else: self.setFehler('Eine Leiter sehe ich hier nicht.') @@ -278,6 +305,11 @@ class ActionModul: logging.debug(f'neu ins Inventar: {item.name}') self.world.inventar[item.id] = item + def moveItemVonRaumNachInventar(self,item): + logging.debug(f'moveItemVonRaumNachInventar(): entferne aus aktuellen Raum {item.name}') + del self.world.aktuellerRaum.items[item.id] + logging.debug(f'moveItemVonRaumNachInventar(): ins Inventar {item.name}') + self.insInventar(item) def nimm(self,parsedCommand): item = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand) @@ -293,8 +325,6 @@ class ActionModul: text = self.world.msg[item.pickupmsg] self.setFehler(text) else: - logging.debug(f'Item {item.name} aus aktuellem Raum entfernen') - del self.world.aktuellerRaum.items[item.id] aufnehmen = True @@ -316,14 +346,20 @@ class ActionModul: aufnehmen = False if aufnehmen: - logging.debug(f'Item {item.name} ins Inventar') - self.insInventar(item) + self.moveItemVonRaumNachInventar(item) + else: self.setFehler("diesen Gegenstand sehe ich hier nicht.") + def isItemAndAktRaum(self,item, itemid, raumid): + return self.isItem(item, itemid) and self.isAktuellerRaum(raumid) + + def isItem(self, item, itemid): + return item.id == itemid + def sprich(self,parsedCommand): geist = self.world.findPersonImAktuellenRaum(parsedCommand.gegenstand) @@ -338,6 +374,17 @@ class ActionModul: else: self.world.printText('hilfe') + def geheNachItem(parsedCommand): + item = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand) + + if item == None: + self.setFehler('Das gibts hier nicht.') + return + if self.isItemAndAktRaum(item, self.world.ITEM_LEITER, self.world.RAUM_ESSZIMMER): + self.rauf() + else: + self.setFehler('Das gibt\'s hier nicht.') + def gehe(self,parsedCommand): richtung = parsedCommand.gegenstand.lower() logging.debug("gehe nach " + richtung) @@ -346,14 +393,19 @@ class ActionModul: self.geheNach(richtung) elif richtung == 'süd': self.geheNach(richtung) - if richtung == 'west': + elif richtung == 'west': self.geheNach(richtung) - if richtung == 'ost': + elif richtung == 'ost': self.geheNach(richtung) - if richtung == 'rauf': + elif richtung == 'rauf': self.rauf() + else: + self.geheNachItem(parsedCommand) + def wechsleRaum(self,raum): + self.world.aktuellerRaum = raum + raum.entdeckt = True def geheNach(self,richtung): logging.debug(f'geheNach() Richtung {richtung}') raum = self.world.aktuellerRaum @@ -368,7 +420,7 @@ class ActionModul: self.setFehler("In diese Richtung gibt's keine Ausgang!") if raum != None: - self.world.aktuellerRaum = raum + self.wechsleRaum(raum) else: logging.debug('Kein Raum zur AusgangId') self.setFehler("In diese Richtung gibt's keine Ausgang!") diff --git a/TestModule.py b/TestModule.py index c666973..5e8f7bf 100644 --- a/TestModule.py +++ b/TestModule.py @@ -1,3 +1,4 @@ +# Testdurchläufe import logging import ActionModul @@ -21,53 +22,53 @@ class TestModule: #Auf den Dachboden self.ac.rauf() - self.schrittzaehler = self.schrittzaehler +1 + self.schrittzaehler += 1 self.ac.nimm(pcmd) - self.schrittzaehler = self.schrittzaehler +1 + self.schrittzaehler += 1 #Zurück ins Wohnzimmer self.ac.runter() - self.schrittzaehler = self.schrittzaehler +1 + self.schrittzaehler += 1 #In den Flur self.ac.sued() - self.schrittzaehler = self.schrittzaehler +1 + self.schrittzaehler += 1 # Ins Schlafzimmer self.ac.west() - self.schrittzaehler = self.schrittzaehler +1 + self.schrittzaehler += 1 self.debug(f'aktueller Raum: {self.world.aktuellerRaum.name}') self.debug(f'Ausgänge: {self.world.aktuellerRaum.ausgaenge}') pcmd = self.parseInput('untersuche Bett') self.ac.untersuche(pcmd) - self.schrittzaehler = self.schrittzaehler +1 + self.schrittzaehler += 1 self.debug(f'Ausgänge: {self.world.aktuellerRaum.ausgaenge}') # In den Keller self.ac.runter() - self.schrittzaehler = self.schrittzaehler +1 + self.schrittzaehler += 1 pcmd = self.parseInput('nimm Jacke') self.ac.nimm(pcmd) - self.schrittzaehler = self.schrittzaehler +1 + self.schrittzaehler += 1 pcmd = self.parseInput('benutze Jacke') self.ac.benutze(pcmd) - self.schrittzaehler = self.schrittzaehler +1 + self.schrittzaehler += 1 pcmd = self.parseInput('öffne Truhe') self.ac.oeffne(pcmd) - self.schrittzaehler = self.schrittzaehler +1 + self.schrittzaehler += 1 pcmd = self.parseInput('nimm Schwert') self.ac.nimm(pcmd) - self.schrittzaehler = self.schrittzaehler +1 + self.schrittzaehler += 1 pcmd = self.parseInput('nimm Seil') self.ac.nimm(pcmd) - self.schrittzaehler = self.schrittzaehler +1 + self.schrittzaehler += 1 self.world.schrittzaehler = self.schrittzaehler @@ -78,60 +79,91 @@ class TestModule: #Rauf ins Schlafzimmer self.ac.rauf() - self.schrittzaehler = self.schrittzaehler +1 + self.schrittzaehler += 1 pcmd = self.parseInput('untersuche Nachtschrank') self.ac.untersuche(pcmd) - self.schrittzaehler = self.schrittzaehler +1 + self.schrittzaehler += 1 pcmd = self.parseInput('nimm Haustürschlüssel') self.ac.nimm(pcmd) - self.schrittzaehler = self.schrittzaehler +1 + self.schrittzaehler += 1 #In den Flur self.ac.ost() - self.schrittzaehler = self.schrittzaehler +1 + self.schrittzaehler += 1 pcmd = self.parseInput('untersuche Pflanze') self.ac.untersuche(pcmd) - self.schrittzaehler = self.schrittzaehler +1 + self.schrittzaehler += 1 pcmd = self.parseInput('nimm Krug') self.ac.nimm(pcmd) - self.schrittzaehler = self.schrittzaehler +1 + self.schrittzaehler += 1 pcmd = self.parseInput('öffne Haustür') self.ac.oeffne(pcmd) - self.schrittzaehler = self.schrittzaehler +1 + self.schrittzaehler += 1 # nach draussen self.ac.sued() - self.schrittzaehler = self.schrittzaehler +1 + self.schrittzaehler += 1 # aufs Dach self.ac.rauf() - self.schrittzaehler = self.schrittzaehler +1 + self.schrittzaehler += 1 pcmd = self.parseInput('nimm Planke') self.ac.nimm(pcmd) - self.schrittzaehler = self.schrittzaehler +1 + self.schrittzaehler += 1 #Wieder runter self.ac.runter() - self.schrittzaehler = self.schrittzaehler +1 + self.schrittzaehler += 1 #Zum Bach self.ac.sued() - self.schrittzaehler = self.schrittzaehler +1 + self.schrittzaehler += 1 pcmd = self.parseInput('verliere Planke') self.ac.verliere(pcmd) - self.schrittzaehler = self.schrittzaehler +1 + self.schrittzaehler += 1 #Zum Teich self.ac.ost() - self.schrittzaehler = self.schrittzaehler +1 + self.schrittzaehler += 1 + + self.world.schrittzaehler = self.schrittzaehler + + def testRanke(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 + + + # Auf die Wiese + self.ac.west() + self.schrittzaehler += 1 + + + # Aufs Brachland + self.ac.sued() + self.schrittzaehler += 1 + + pcmd = self.parseInput('leere Krug') + self.ac.leere(pcmd) + self.schrittzaehler += 1 self.world.schrittzaehler = self.schrittzaehler diff --git a/World.py b/World.py index da528bb..a7bf237 100644 --- a/World.py +++ b/World.py @@ -1,3 +1,6 @@ +# Hier wird die Spielwelt verwaltet. +# Auch die Terminalausgabe passiert hier. + import WorldParser import ParsedCommand import ActionModul @@ -45,7 +48,12 @@ class World: item = self.inventar[itemid] labels.append(item.name) - return labels + return labels + + def fortschritt(self): + anz_raeume, anz_entdeckt = self.zaehleRaeume() + return round((anz_entdeckt/anz_raeume) *100,2) + def printRaum(self): raum = self.aktuellerRaum self.clearScreen() @@ -78,7 +86,9 @@ class World: richtungen ='' ixri = 0 - self.stdscr.addstr(6,85,f'Schritte: {self.schrittzaehler}') + anz_raeume, anz_entdeckt = self.zaehleRaeume() + progress = (anz_entdeckt/anz_raeume) *100 + self.stdscr.addstr(6,85,f'Schritte: {self.schrittzaehler}, Räume:{anz_entdeckt}/{anz_raeume}, Fortschritt: {self.fortschritt()}%') win = curses.newwin(7,35,7,85) win.box() win.addstr('Ausgänge:') @@ -219,6 +229,27 @@ class World: return parsedCommand + def zaehleEntdeckteRaeume(self): + count = 0 + for raumid in self.raumliste: + raum = self.raumliste[raumid] + if raum .entdeckt: + count += 1 + + return count + + def zaehleRaeume(self): + count = 0 + entdeckt = 0 + for raumid in self.raumliste: + raum = self.raumliste[raumid] + if raum .entdeckt: + entdeckt += 1 + count += 1 + + return count, entdeckt + + def debug_Items(self): logging.debug('liste Items') logging.debug(self.gegenstaende) @@ -275,6 +306,8 @@ class World: self.ITEM_BOXSACK = '19' self.ITEM_MAUS = '20' self.ITEM_BOHNENRANKE = '21' + self.ITEM_ELEFANT = '22' + self.ITEM_HAFEN = '23' # Räume @@ -302,6 +335,7 @@ class World: self.RAUM_BAUMHAUS = '23' self.RAUM_TUNNEL = '20' self.RAUM_STRAND = '21' + self.RAUM_HAFEN = '22' diff --git a/data/Raum.py b/data/Raum.py index 1c46f8d..60e7644 100644 --- a/data/Raum.py +++ b/data/Raum.py @@ -15,6 +15,7 @@ class Raum(SuperNode): self.personen = {} self.beschreibung=beschreibung self.pickupmsg = '' + self.entdeckt = False self.ausgaenge = { '0': '-1', # Nord '1': '-1', # West diff --git a/data/__pycache__/Raum.cpython-38.pyc b/data/__pycache__/Raum.cpython-38.pyc index f0d5d33702695accf025c2ff317d1f1e17cb7a31..0f4de4560f92fc93f4fba28e11ab7b6287d99e59 100644 GIT binary patch delta 870 zcmZ`%&ui3B5Y8mo@S=zwym;uJAb7|hAcBXAS1-;ySXLpM$NQ4ZH#6Vxy|){D4CK0$MT4F< zd(ZEGe=idgmN7L?&+Hhn)3*Lu_A7^CZriwFgoUe_ap{RU7KKg*;~7L5Ok~i=U^0WV zp}?=^v?r3y?RL_7xQ(85(L2H#W*Hn@vu?prd~40aApW#ILG{C~?SmX9KD3oXFLfM0 z7bal@_Y12_RSukFI75)hIBs<|(zKOyI&rLACNvE4mtc?t9_^I>gjqU(JI=ckb*2go z;|w}o7wQ_$KZn=csnIcJ^V-&kn5LbY1OikIUl$i}-(9O8)hMvLtlv(QmZk2~_FZ|EyRyt*oh&Ju6prtqx ndg>Hc@X_o0rT8`|J}brkDt18euxb&1l$?PLbltR0PO)VAbcHM4Qv}>i0tsVp)1+}FGmFPC1L~9F^MWhHl zc=O`n^XNtIf>P>H#IyF~DgS|IkAnDpL)-O`O_<-ze6Qd4n0^1f@2ogZp5fQpeAW5> z$%zD?heXu8P#pipTk8c2tdQMhRdXq2@Kuz#4XJ2>XDr&oJ%~U=LA4gBR@iTQ6e&ueIFH*1! zs;h7-KkN6UI*)Ew;G4V&zw@_usVzs1?p4vRSu1FrkQw78zH?&nFrmpHh_~Wy5U9Sa zm(XXKybt?G_jShLryPQ`@UDCr?^(s%hd0G7{tyhO*_I1dIhIu(Lny0%MwS91it$>`@nd>a&za%OzTU5=i2m$t(Q>rJ`}%UwYEe_onG zyS7n*I`m*;^_yg@Ocd}MblR_7e#GRREcWCpHibxcP;!+y0$C-0h&#Z AF#rGn diff --git a/tomb.py b/tomb.py index 6863afd..19882eb 100755 --- a/tomb.py +++ b/tomb.py @@ -1,4 +1,6 @@ #!/usr/bin/python3 +# Hauptprogramm - Eingabeschleife und Dispatching + import World import ActionModul import TestModule @@ -116,6 +118,8 @@ def inputLoop(stdscr): testmodul.testOeffneTruhe() elif debugcommand[1] == 'teich': testmodul.testTeich() + elif debugcommand[1] == 'ranke': + testmodul.testRanke() else: diff --git a/world.xml b/world.xml index 68b583a..ddc13e1 100644 --- a/world.xml +++ b/world.xml @@ -67,8 +67,9 @@ - + + Ein Feld. @@ -150,6 +151,13 @@ Du stehst am Strand eines großen Sees. In südlicher Richtung scheint ein Hafen zu sein. + + + + + Im Hafen liegt ein Segelschiff angeleint. + + @@ -190,7 +198,8 @@ - + + @@ -238,6 +247,8 @@ + + @@ -254,6 +265,7 @@ + @@ -318,5 +330,8 @@ Jetzt musst du dich auf die Suche machen, so dass ich endlich meinen Frieden finden kann. Suche das Grab im Wolkenreich.Öffne es und ich bin erlöst. + + Du wirfst das Seil Richtung Baumkrone. Dort verfängt es sich so fest, dass du daran klettern kannst. +