Volles Wchstum der Bohnenranke, die Spitze ist erreichbar.

This commit is contained in:
Olli Graf
2022-05-27 16:35:23 +02:00
parent fef412580a
commit 227271ad09
8 changed files with 191 additions and 45 deletions

8
ActionBasics.py Normal file
View File

@@ -0,0 +1,8 @@
import logging
class ActionBasics:
def __init__(self,world):
self.world = world

View File

@@ -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): def isBlank(self,str):
logging.debug(f'isBlank(): str=*{str}*') logging.debug(f'isBlank(): str=*{str}*')
@@ -10,7 +13,7 @@ class ActionModul:
def __init__(self, world): def __init__(self, world):
self.world = world super().__init__(world)
def warte(self): def warte(self):
print('Du wartest') print('Du wartest')
@@ -31,10 +34,19 @@ class ActionModul:
if item != None: if item != None:
if item.id == self.world.ITEM_RANKGITTER: if item.id == self.world.ITEM_RANKGITTER:
self.rauf() 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: else:
self.setFehler('Das sehe ich hier nicht.') self.setFehler('Das sehe ich hier nicht.')
def vanishItem(self, item):
item.sichtbar = False
self.ausDemInventar(item)
def oeffne(self,parsedCommand): def oeffne(self,parsedCommand):
item = self.world.findItemImInventarOderAktuellerRaum(parsedCommand.gegenstand); item = self.world.findItemImInventarOderAktuellerRaum(parsedCommand.gegenstand);
@@ -46,10 +58,10 @@ class ActionModul:
logging.debug('öffne Truhe') logging.debug('öffne Truhe')
schluessel = self.world.findItemImInventarById(self.world.ITEM_KLEINER_SCHLUESSEL) schluessel = self.world.findItemImInventarById(self.world.ITEM_KLEINER_SCHLUESSEL)
self.vanishItem(schluessel)
if schluessel != None and item.zustand != item.OFFEN: if schluessel != None and item.zustand != item.OFFEN:
item.zustand = item.OFFEN item.zustand = item.OFFEN
schluessel.sichtbar = False
self.ausDemInventar(schluessel)
seil = self.world.findItemById(self.world.ITEM_SEIL) seil = self.world.findItemById(self.world.ITEM_SEIL)
seil.raumid = self.world.aktuellerRaum.id seil.raumid = self.world.aktuellerRaum.id
seil.sichtbar = True seil.sichtbar = True
@@ -69,10 +81,9 @@ class ActionModul:
logging.debug(f'öffne Haustür Schlüssel ist {schluessel}') logging.debug(f'öffne Haustür Schlüssel ist {schluessel}')
if schluessel != None: if schluessel != None:
item.zustand = item.OFFEN 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.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.world.aktuellerRaum.ausgaenge[self.world.SUED] = self.world.RAUM_GARTEN
self.ausDemInventar(schluessel)
else: else:
self.setFehler('Die Tür ist verschlossen.') self.setFehler('Die Tür ist verschlossen.')
@@ -263,6 +274,15 @@ class ActionModul:
def fange(self, parsedCommand): def fange(self, parsedCommand):
skip 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): def klettere(self, parsedCommand):
leiter = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand) leiter = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand)
@@ -271,6 +291,13 @@ class ActionModul:
if self.isAktuellerRaum(self.world.RAUM_ESSZIMMER): if self.isAktuellerRaum(self.world.RAUM_ESSZIMMER):
logging.debug(f'aktuellerRaum ist {self.world.aktuellerRaum.id}') logging.debug(f'aktuellerRaum ist {self.world.aktuellerRaum.id}')
self.rauf() 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: else:
self.setFehler('Eine Leiter sehe ich hier nicht.') self.setFehler('Eine Leiter sehe ich hier nicht.')
@@ -278,6 +305,11 @@ class ActionModul:
logging.debug(f'neu ins Inventar: {item.name}') logging.debug(f'neu ins Inventar: {item.name}')
self.world.inventar[item.id] = item 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): def nimm(self,parsedCommand):
item = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand) item = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand)
@@ -293,8 +325,6 @@ class ActionModul:
text = self.world.msg[item.pickupmsg] text = self.world.msg[item.pickupmsg]
self.setFehler(text) self.setFehler(text)
else: else:
logging.debug(f'Item {item.name} aus aktuellem Raum entfernen')
del self.world.aktuellerRaum.items[item.id]
aufnehmen = True aufnehmen = True
@@ -316,14 +346,20 @@ class ActionModul:
aufnehmen = False aufnehmen = False
if aufnehmen: if aufnehmen:
logging.debug(f'Item {item.name} ins Inventar') self.moveItemVonRaumNachInventar(item)
self.insInventar(item)
else: else:
self.setFehler("diesen Gegenstand sehe ich hier nicht.") 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): def sprich(self,parsedCommand):
geist = self.world.findPersonImAktuellenRaum(parsedCommand.gegenstand) geist = self.world.findPersonImAktuellenRaum(parsedCommand.gegenstand)
@@ -338,6 +374,17 @@ class ActionModul:
else: else:
self.world.printText('hilfe') 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): def gehe(self,parsedCommand):
richtung = parsedCommand.gegenstand.lower() richtung = parsedCommand.gegenstand.lower()
logging.debug("gehe nach " + richtung) logging.debug("gehe nach " + richtung)
@@ -346,14 +393,19 @@ class ActionModul:
self.geheNach(richtung) self.geheNach(richtung)
elif richtung == 'süd': elif richtung == 'süd':
self.geheNach(richtung) self.geheNach(richtung)
if richtung == 'west': elif richtung == 'west':
self.geheNach(richtung) self.geheNach(richtung)
if richtung == 'ost': elif richtung == 'ost':
self.geheNach(richtung) self.geheNach(richtung)
if richtung == 'rauf': elif richtung == 'rauf':
self.rauf() self.rauf()
else:
self.geheNachItem(parsedCommand)
def wechsleRaum(self,raum):
self.world.aktuellerRaum = raum
raum.entdeckt = True
def geheNach(self,richtung): def geheNach(self,richtung):
logging.debug(f'geheNach() Richtung {richtung}') logging.debug(f'geheNach() Richtung {richtung}')
raum = self.world.aktuellerRaum raum = self.world.aktuellerRaum
@@ -368,7 +420,7 @@ class ActionModul:
self.setFehler("In diese Richtung gibt's keine Ausgang!") self.setFehler("In diese Richtung gibt's keine Ausgang!")
if raum != None: if raum != None:
self.world.aktuellerRaum = raum self.wechsleRaum(raum)
else: else:
logging.debug('Kein Raum zur AusgangId') logging.debug('Kein Raum zur AusgangId')
self.setFehler("In diese Richtung gibt's keine Ausgang!") self.setFehler("In diese Richtung gibt's keine Ausgang!")

View File

@@ -1,3 +1,4 @@
# Testdurchläufe
import logging import logging
import ActionModul import ActionModul
@@ -21,53 +22,53 @@ class TestModule:
#Auf den Dachboden #Auf den Dachboden
self.ac.rauf() self.ac.rauf()
self.schrittzaehler = self.schrittzaehler +1 self.schrittzaehler += 1
self.ac.nimm(pcmd) self.ac.nimm(pcmd)
self.schrittzaehler = self.schrittzaehler +1 self.schrittzaehler += 1
#Zurück ins Wohnzimmer #Zurück ins Wohnzimmer
self.ac.runter() self.ac.runter()
self.schrittzaehler = self.schrittzaehler +1 self.schrittzaehler += 1
#In den Flur #In den Flur
self.ac.sued() self.ac.sued()
self.schrittzaehler = self.schrittzaehler +1 self.schrittzaehler += 1
# Ins Schlafzimmer # Ins Schlafzimmer
self.ac.west() self.ac.west()
self.schrittzaehler = self.schrittzaehler +1 self.schrittzaehler += 1
self.debug(f'aktueller Raum: {self.world.aktuellerRaum.name}') self.debug(f'aktueller Raum: {self.world.aktuellerRaum.name}')
self.debug(f'Ausgänge: {self.world.aktuellerRaum.ausgaenge}') self.debug(f'Ausgänge: {self.world.aktuellerRaum.ausgaenge}')
pcmd = self.parseInput('untersuche Bett') pcmd = self.parseInput('untersuche Bett')
self.ac.untersuche(pcmd) self.ac.untersuche(pcmd)
self.schrittzaehler = self.schrittzaehler +1 self.schrittzaehler += 1
self.debug(f'Ausgänge: {self.world.aktuellerRaum.ausgaenge}') self.debug(f'Ausgänge: {self.world.aktuellerRaum.ausgaenge}')
# In den Keller # In den Keller
self.ac.runter() self.ac.runter()
self.schrittzaehler = self.schrittzaehler +1 self.schrittzaehler += 1
pcmd = self.parseInput('nimm Jacke') pcmd = self.parseInput('nimm Jacke')
self.ac.nimm(pcmd) self.ac.nimm(pcmd)
self.schrittzaehler = self.schrittzaehler +1 self.schrittzaehler += 1
pcmd = self.parseInput('benutze Jacke') pcmd = self.parseInput('benutze Jacke')
self.ac.benutze(pcmd) self.ac.benutze(pcmd)
self.schrittzaehler = self.schrittzaehler +1 self.schrittzaehler += 1
pcmd = self.parseInput('öffne Truhe') pcmd = self.parseInput('öffne Truhe')
self.ac.oeffne(pcmd) self.ac.oeffne(pcmd)
self.schrittzaehler = self.schrittzaehler +1 self.schrittzaehler += 1
pcmd = self.parseInput('nimm Schwert') pcmd = self.parseInput('nimm Schwert')
self.ac.nimm(pcmd) self.ac.nimm(pcmd)
self.schrittzaehler = self.schrittzaehler +1 self.schrittzaehler += 1
pcmd = self.parseInput('nimm Seil') pcmd = self.parseInput('nimm Seil')
self.ac.nimm(pcmd) self.ac.nimm(pcmd)
self.schrittzaehler = self.schrittzaehler +1 self.schrittzaehler += 1
self.world.schrittzaehler = self.schrittzaehler self.world.schrittzaehler = self.schrittzaehler
@@ -78,60 +79,91 @@ class TestModule:
#Rauf ins Schlafzimmer #Rauf ins Schlafzimmer
self.ac.rauf() self.ac.rauf()
self.schrittzaehler = self.schrittzaehler +1 self.schrittzaehler += 1
pcmd = self.parseInput('untersuche Nachtschrank') pcmd = self.parseInput('untersuche Nachtschrank')
self.ac.untersuche(pcmd) self.ac.untersuche(pcmd)
self.schrittzaehler = self.schrittzaehler +1 self.schrittzaehler += 1
pcmd = self.parseInput('nimm Haustürschlüssel') pcmd = self.parseInput('nimm Haustürschlüssel')
self.ac.nimm(pcmd) self.ac.nimm(pcmd)
self.schrittzaehler = self.schrittzaehler +1 self.schrittzaehler += 1
#In den Flur #In den Flur
self.ac.ost() self.ac.ost()
self.schrittzaehler = self.schrittzaehler +1 self.schrittzaehler += 1
pcmd = self.parseInput('untersuche Pflanze') pcmd = self.parseInput('untersuche Pflanze')
self.ac.untersuche(pcmd) self.ac.untersuche(pcmd)
self.schrittzaehler = self.schrittzaehler +1 self.schrittzaehler += 1
pcmd = self.parseInput('nimm Krug') pcmd = self.parseInput('nimm Krug')
self.ac.nimm(pcmd) self.ac.nimm(pcmd)
self.schrittzaehler = self.schrittzaehler +1 self.schrittzaehler += 1
pcmd = self.parseInput('öffne Haustür') pcmd = self.parseInput('öffne Haustür')
self.ac.oeffne(pcmd) self.ac.oeffne(pcmd)
self.schrittzaehler = self.schrittzaehler +1 self.schrittzaehler += 1
# nach draussen # nach draussen
self.ac.sued() self.ac.sued()
self.schrittzaehler = self.schrittzaehler +1 self.schrittzaehler += 1
# aufs Dach # aufs Dach
self.ac.rauf() self.ac.rauf()
self.schrittzaehler = self.schrittzaehler +1 self.schrittzaehler += 1
pcmd = self.parseInput('nimm Planke') pcmd = self.parseInput('nimm Planke')
self.ac.nimm(pcmd) self.ac.nimm(pcmd)
self.schrittzaehler = self.schrittzaehler +1 self.schrittzaehler += 1
#Wieder runter #Wieder runter
self.ac.runter() self.ac.runter()
self.schrittzaehler = self.schrittzaehler +1 self.schrittzaehler += 1
#Zum Bach #Zum Bach
self.ac.sued() self.ac.sued()
self.schrittzaehler = self.schrittzaehler +1 self.schrittzaehler += 1
pcmd = self.parseInput('verliere Planke') pcmd = self.parseInput('verliere Planke')
self.ac.verliere(pcmd) self.ac.verliere(pcmd)
self.schrittzaehler = self.schrittzaehler +1 self.schrittzaehler += 1
#Zum Teich #Zum Teich
self.ac.ost() 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 self.world.schrittzaehler = self.schrittzaehler

View File

@@ -1,3 +1,6 @@
# Hier wird die Spielwelt verwaltet.
# Auch die Terminalausgabe passiert hier.
import WorldParser import WorldParser
import ParsedCommand import ParsedCommand
import ActionModul import ActionModul
@@ -46,6 +49,11 @@ class World:
labels.append(item.name) 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): def printRaum(self):
raum = self.aktuellerRaum raum = self.aktuellerRaum
self.clearScreen() self.clearScreen()
@@ -78,7 +86,9 @@ class World:
richtungen ='' richtungen =''
ixri = 0 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 = curses.newwin(7,35,7,85)
win.box() win.box()
win.addstr('Ausgänge:') win.addstr('Ausgänge:')
@@ -219,6 +229,27 @@ class World:
return parsedCommand 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): def debug_Items(self):
logging.debug('liste Items') logging.debug('liste Items')
logging.debug(self.gegenstaende) logging.debug(self.gegenstaende)
@@ -275,6 +306,8 @@ class World:
self.ITEM_BOXSACK = '19' self.ITEM_BOXSACK = '19'
self.ITEM_MAUS = '20' self.ITEM_MAUS = '20'
self.ITEM_BOHNENRANKE = '21' self.ITEM_BOHNENRANKE = '21'
self.ITEM_ELEFANT = '22'
self.ITEM_HAFEN = '23'
# Räume # Räume
@@ -302,6 +335,7 @@ class World:
self.RAUM_BAUMHAUS = '23' self.RAUM_BAUMHAUS = '23'
self.RAUM_TUNNEL = '20' self.RAUM_TUNNEL = '20'
self.RAUM_STRAND = '21' self.RAUM_STRAND = '21'
self.RAUM_HAFEN = '22'

View File

@@ -15,6 +15,7 @@ class Raum(SuperNode):
self.personen = {} self.personen = {}
self.beschreibung=beschreibung self.beschreibung=beschreibung
self.pickupmsg = '' self.pickupmsg = ''
self.entdeckt = False
self.ausgaenge = { self.ausgaenge = {
'0': '-1', # Nord '0': '-1', # Nord
'1': '-1', # West '1': '-1', # West

Binary file not shown.

View File

@@ -1,4 +1,6 @@
#!/usr/bin/python3 #!/usr/bin/python3
# Hauptprogramm - Eingabeschleife und Dispatching
import World import World
import ActionModul import ActionModul
import TestModule import TestModule
@@ -116,6 +118,8 @@ def inputLoop(stdscr):
testmodul.testOeffneTruhe() testmodul.testOeffneTruhe()
elif debugcommand[1] == 'teich': elif debugcommand[1] == 'teich':
testmodul.testTeich() testmodul.testTeich()
elif debugcommand[1] == 'ranke':
testmodul.testRanke()
else: else:

View File

@@ -67,8 +67,9 @@
</beschreibung> </beschreibung>
</raum> </raum>
<raum id='11' name='Feld'> <raum id='11' name='Feld'>
<ausgang dir='West' nachRaum= '13' /> <ausgang dir='Nord' nachRaum= '8' />
<ausgang dir='Sued' nachRaum= '12' /> <ausgang dir='Sued' nachRaum= '12' />
<ausgang dir='West' nachRaum= '13' />
<beschreibung> <beschreibung>
Ein Feld. Ein Feld.
@@ -150,6 +151,13 @@
Du stehst am Strand eines großen Sees. In südlicher Richtung scheint ein Hafen zu sein. Du stehst am Strand eines großen Sees. In südlicher Richtung scheint ein Hafen zu sein.
</beschreibung> </beschreibung>
</raum> </raum>
<raum id='22' name='Hafen'>
<ausgang dir='Nord' nachRaum= '21' />
<ausgang dir='Sued' nachRaum= '22' />
<beschreibung>
Im Hafen liegt ein Segelschiff angeleint.
</beschreibung>
</raum>
</ebene> </ebene>
<commandset> <commandset>
@@ -190,7 +198,8 @@
<command name='sprich' id='34' key='25' /> <command name='sprich' id='34' key='25' />
<command name='leere' id='35' key='26' /> <command name='leere' id='35' key='26' />
<command name='fuelle' id='36' key='27' /> <command name='fuelle' id='36' key='27' />
<command name='wirf' id='37' key='28' /> <command name='fülle' id='37' key='27' />
<command name='wirf' id='38' key='28' />
</commandset> </commandset>
@@ -238,6 +247,8 @@
<item name='Maus' display='tote Maus' id='20' raum='12' imobil='false' adjektiv = '0' msgid='1' visible='true' /> <item name='Maus' display='tote Maus' id='20' raum='12' imobil='false' adjektiv = '0' msgid='1' visible='true' />
<item name='Bohnenranke' id='21' display='' raum='14' imobil='true' adjektiv = '0' msgid='8' visible='true' /> <item name='Bohnenranke' id='21' display='' raum='14' imobil='true' adjektiv = '0' msgid='8' visible='true' />
<item name='Elefant' id='22' display='' raum='15' imobil='true' adjektiv = '0' msgid='9' visible='true' /> <item name='Elefant' id='22' display='' raum='15' imobil='true' adjektiv = '0' msgid='9' visible='true' />
<item name='Hafen' id='23' display='' raum='21' imobil='true' adjektiv = '0' msgid='10' visible='true' />
<item name='Segelschiff' id='24' display='' raum='22' imobil='true' adjektiv = '0' msgid='10' visible='true' />
</items> </items>
<personen> <personen>
@@ -254,6 +265,7 @@
<pickup text='Kunstdiebstahl? Nö!' id='7' /> <pickup text='Kunstdiebstahl? Nö!' id='7' />
<pickup text='Die ist fest verwurzelt' id='8' /> <pickup text='Die ist fest verwurzelt' id='8' />
<pickup text='Der scheint wütend zu werden, wenn man ihm am Rüssel zieht.' id='9' /> <pickup text='Der scheint wütend zu werden, wenn man ihm am Rüssel zieht.' id='9' />
<pickup text='Das kannst du nicht tragen.' id='10' />
</messages> </messages>
<bewegungen> <bewegungen>
<bewegung id='0' value='' /> <bewegung id='0' value='' />
@@ -318,5 +330,8 @@
Jetzt musst du dich auf die Suche machen, so dass ich endlich meinen Frieden finden kann. 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. Suche das Grab im Wolkenreich.Öffne es und ich bin erlöst.
</text> </text>
<text id='seilwurf'>
Du wirfst das Seil Richtung Baumkrone. Dort verfängt es sich so fest, dass du daran klettern kannst.
</text>
</texte> </texte>
</welt> </welt>