7 Commits
0.11 ... 0.12

Author SHA1 Message Date
Olli Graf
c634711b57 Stier läuft der Jacke hinterher. 2022-05-28 16:01:58 +02:00
Olli Graf
33ee761f32 Auto Baumhaus. 2022-05-28 09:38:56 +02:00
Olli Graf
1249bb74ec Baumhaus ist zugänglich. 2022-05-28 09:33:40 +02:00
Olli Graf
6ae6f3efd8 Auto bis Tal. 2022-05-27 19:20:36 +02:00
Olli Graf
227271ad09 Volles Wchstum der Bohnenranke, die Spitze ist erreichbar. 2022-05-27 16:35:23 +02:00
Olli Graf
fef412580a Der Sichtbarkeitsstatus ist fürs Inventar irrelevant. 2022-05-23 10:01:36 +02:00
Olli Graf
c2aca6cf07 Die Bohnenranke wächst. 2022-05-22 19:29:18 +02:00
11 changed files with 665 additions and 88 deletions

67
ActionBasics.py Normal file
View File

@@ -0,0 +1,67 @@
import logging
import inspect
class ActionBasics:
def __init__(self,world):
self.world = world
def debug(self, method, text):
logging.debug(f'ActionBasics: {text}')
def insInventar(self, item):
logging.debug(f'neu ins Inventar: {item.name}')
self.world.inventar[item.id] = item
def setFehler(self,text):
self.world.fehler =text
def clearFehler(self):
self.world.fehler = ''
def moveItemVonRaumNachInventar(self,item):
logging.debug(f'entferne aus aktuellen Raum {item.name}')
del self.world.aktuellerRaum.items[item.id]
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)
logging.debug(f'isItem={isItem}, isRaum={isRaum}')
return isItem and isRaum
def isItem(self, item, itemid):
return item.id == itemid
def macheWegFrei(self, richtung, raumid):
logging.debug(f'Richtung {richtung} führt jetzt zu RaumId {raumid}')
self.world.aktuellerRaum.ausgaenge[richtung] = raumid
def findItemInAktuellerRaumById(self, itemid):
for itemid in self.world.aktuellerRaum.items:
raum = self.world.aktuellerRaum
item = self.world.aktuellerRaum.items[itemid]
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

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
@@ -63,18 +75,32 @@ class ActionModul:
self.setFehler('Die Truhe ist verschlossen und dir fehlt der passende Schlüssel.') self.setFehler('Die Truhe ist verschlossen und dir fehlt der passende Schlüssel.')
elif item.id == self.world.ITEM_HAUSTUER: 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) schluessel = self.world.findItemImInventarById(self.world.ITEM_HAUSTUERSCHLUESSEL)
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.')
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): def isAktuellerRaum(self, raumid):
return self.world.aktuellerRaum.id == raumid return self.world.aktuellerRaum.id == raumid
@@ -122,11 +148,6 @@ class ActionModul:
else: else:
self.setFehler("Diesen Gegenstand besitzt du nicht.") self.setFehler("Diesen Gegenstand besitzt du nicht.")
def setFehler(self,text):
self.world.fehler =text
def clearFehler(self):
self.world.fehler = ''
def stelle(self,parsedCommand): def stelle(self,parsedCommand):
@@ -166,15 +187,40 @@ class ActionModul:
if item.id == self.world.ITEM_BOXSACK: if item.id == self.world.ITEM_BOXSACK:
self.setFehler('Der Boxsack sagt: Hmm, hmm?') self.setFehler('Der Boxsack sagt: Hmm, hmm?')
def leere(self, parsedCommand): def leere(self, parsedCommand):
skip item = self.world.findItemImInventar(parsedCommand.gegenstand)
def fuelle(self, parsedCommand): if item.id == self.world.ITEM_KRUG:
skip if self.isAktuellerRaum(self.world.RAUM_BRACHLAND):
if item.zustand == item.VOLL:
ranke = self.world.findItemById(self.world.ITEM_BOHNENRANKE)
if ranke.zustand < ranke.GROSS:
ranke.zustand = ranke.zustand +1
self.setFehler('Die Bohnenranke wächst.')
if ranke.zustand == ranke.GROSS:
self.world.aktuellerRaum.ausgaenge[self.world.RAUF] = self.world.RAUM_BOHNENRANKE
self.setFehler('Die Bohnenranke reicht jetzt bis in die Wolken hinein.')
else:
self.setFehler('Der Krug ist leer')
else:
item.zustand = item.LEER
def fuelle(self, parsedCommand):
item = self.world.findItemImInventar(parsedCommand.gegenstand)
if item.id == self.world.ITEM_KRUG:
if self.isAktuellerRaum(self.world.RAUM_TEICH):
item.zustand = item.VOLL
self.setFehler('Der Krug ist jetzt voll')
def zeigeItemBeschreibung(self,item): def zeigeItemBeschreibung(self,item):
self.world.printText(f'item-{item.id}') textid = f'item-{item.id}'
if item.id == self.world.ITEM_BOHNENRANKE:
textid = f'item-{item.id}-{item.zustand}'
else:
textid = f'item-{item.id}'
self.world.printText(textid)
def untersuche(self,parsedCommand): def untersuche(self,parsedCommand):
logging.debug(f'untersuche() suche nach Gegenstand: {parsedCommand.gegenstand}') logging.debug(f'untersuche() suche nach Gegenstand: {parsedCommand.gegenstand}')
@@ -184,7 +230,10 @@ def fuelle(self, parsedCommand):
return return
item = self.world.findItemImInventarOderAktuellerRaum(parsedCommand.gegenstand) item = self.world.findItemImInventarOderAktuellerRaum(parsedCommand.gegenstand)
if item == None:
self.setFehler('Das sehe ich hier nicht')
return
if item != None: if item != None:
if item.id == self.world.ITEM_PFLANZE: if item.id == self.world.ITEM_PFLANZE:
krug = self.world.findRaumItemById(self.world.ITEM_KRUG) krug = self.world.findRaumItemById(self.world.ITEM_KRUG)
@@ -217,10 +266,6 @@ def fuelle(self, parsedCommand):
else: else:
self.zeigeItemBeschreibung(item) self.zeigeItemBeschreibung(item)
else: else:
logging.debug('Kein Item gefunden, suche nach Raum') logging.debug('Kein Item gefunden, suche nach Raum')
self.untersucheAktuellenRaum(parsedCommand) self.untersucheAktuellenRaum(parsedCommand)
@@ -238,6 +283,53 @@ def fuelle(self, parsedCommand):
def fange(self, parsedCommand): def fange(self, parsedCommand):
skip skip
def wirf(self,parsedCommand):
item = self.world.findItemImInventar(parsedCommand.gegenstand)
if item == None:
self.setFehler('Das besitzt du nicht.')
return
if self.isItemAndAktRaum(item, self.world.ITEM_SEIL,self.world.RAUM_BAUM):
self.world.printText('seilwurf')
self.macheWegFrei(self.world.RAUF,self.world.RAUM_BAUMHAUS)
self.ausDemInventar(item)
elif self.isAktuellerRaum(self.world.RAUM_BOHNENRANKE):
if self.isItem(item, self.world.ITEM_MAUS):
elefant = self.findItemInAktuellerRaumById(self.world.ITEM_ELEFANT)
logging.debug(f'Elefant - {elefant}')
if elefant != None:
self.world.printText('mauswurf')
self.ausDemInventar(item)
self.macheWegFrei(self.world.SUED,self.world.RAUM_PFAD)
del self.world.aktuellerRaum.items[elefant.id]
else:
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)
def klettere(self, parsedCommand): def klettere(self, parsedCommand):
leiter = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand) leiter = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand)
@@ -246,12 +338,17 @@ def fuelle(self, parsedCommand):
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.')
def insInventar(self, item):
logging.debug(f'neu ins Inventar: {item.name}')
self.world.inventar[item.id] = item
def nimm(self,parsedCommand): def nimm(self,parsedCommand):
@@ -268,9 +365,6 @@ def fuelle(self, parsedCommand):
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]
logging.debug(f'Item {item.name} ins Inventar')
aufnehmen = True aufnehmen = True
@@ -285,19 +379,22 @@ def fuelle(self, parsedCommand):
krug = self.world.findItemImInventarById(self.world.ITEM_KRUG) krug = self.world.findItemImInventarById(self.world.ITEM_KRUG)
if krug != None: if krug != None:
krug.zustand = krug.VOLL
self.setFehler('Du schöpfst mit dem Krug und der Fisch ist drin.') self.setFehler('Du schöpfst mit dem Krug und der Fisch ist drin.')
else: else:
self.setFehler('Der Fisch ist zu glitschig, um ihn mit der Hand zu fangen.') self.setFehler('Der Fisch ist zu glitschig, um ihn mit der Hand zu fangen.')
aufnehmen = False aufnehmen = False
if aufnehmen: if aufnehmen:
self.insInventar(item) self.moveItemVonRaumNachInventar(item)
else: else:
self.setFehler("diesen Gegenstand sehe ich hier nicht.") self.setFehler("diesen Gegenstand sehe ich hier nicht.")
def sprich(self,parsedCommand): def sprich(self,parsedCommand):
geist = self.world.findPersonImAktuellenRaum(parsedCommand.gegenstand) geist = self.world.findPersonImAktuellenRaum(parsedCommand.gegenstand)
@@ -312,6 +409,17 @@ def fuelle(self, parsedCommand):
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)
@@ -320,16 +428,21 @@ def fuelle(self, parsedCommand):
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'Richtung {richtung}')
raum = self.world.aktuellerRaum raum = self.world.aktuellerRaum
if raum.ausgaenge[richtung]: if raum.ausgaenge[richtung]:
@@ -342,7 +455,7 @@ def fuelle(self, parsedCommand):
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,110 +22,270 @@ 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
def testTeich(self):
self.testOeffneTruhe()
pcmd = self.parseInput('nimm Seil')
self.ac.nimm(pcmd)
self.schrittzaehler = 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')
self.ac.nimm(pcmd)
self.schrittzaehler += 1
self.world.schrittzaehler = self.schrittzaehler
def testTeich(self):
self.testOeffneTruhe()
#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 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()
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
# Aufs Brachland
self.ac.sued()
self.schrittzaehler += 1
pcmd = self.parseInput('leere Krug')
self.ac.leere(pcmd)
self.ac.clearFehler()
self.schrittzaehler += 1
# Wiese
self.ac.nord()
# Feld
self.ac.ost()
# Bach
self.ac.nord()
# Teich
self.ac.ost()
pcmd = self.parseInput('fuelle Krug')
# 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
def testTal(self):
self.testRanke()
self.ac.rauf()
self.schrittzaehler += 1
pcmd = self.parseInput('wirf Maus')
self.ac.wirf(pcmd)
self.schrittzaehler += 1
#Pfad
self.ac.sued()
self.schrittzaehler += 1
#südlicherPfad
self.ac.sued()
self.schrittzaehler += 1
# östlicher Pfad
self.ac.ost()
self.schrittzaehler += 1
# Tal
self.ac.sued()
self.schrittzaehler += 1
def testBaumhaus(self):
self.testTal()
# Baum
self.ac.sued()
self.schrittzaehler += 1
pcmd = self.parseInput('wirf Seil')
self.ac.wirf(pcmd)
self.schrittzaehler += 1
# Baumhaus
self.ac.rauf()
self.schrittzaehler += 1

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
@@ -43,10 +46,14 @@ class World:
for itemid in self.inventar: for itemid in self.inventar:
item = self.inventar[itemid] item = self.inventar[itemid]
if item.sichtbar: 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()
@@ -79,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:')
@@ -126,6 +135,13 @@ class World:
return None return None
def findRaumById(self,raumid):
for rid in self.raumliste:
if rid == raumid:
return self.raumliste[rid]
return None
def findItemInAktuellerRaum(self,itemname): def findItemInAktuellerRaum(self,itemname):
raum = self.aktuellerRaum raum = self.aktuellerRaum
@@ -161,6 +177,16 @@ class World:
return person return person
return None 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): def findItemImInventar(self,itemname):
@@ -179,7 +205,7 @@ class World:
def ermittleBefehlId(self,befehl): def ermittleBefehlId(self,befehl):
for id in self.befehle: for id in self.befehle:
name = self.befehle[id].name name = self.befehle[id].name
logging.debug(f'ermittleBefehlId(): {befehl} - {name}') logging.debug(f'{befehl} - {name}')
if name == befehl: if name == befehl:
return id return id
return None return None
@@ -220,6 +246,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 +322,10 @@ class World:
self.ITEM_SCHWERT = '18' self.ITEM_SCHWERT = '18'
self.ITEM_BOXSACK = '19' self.ITEM_BOXSACK = '19'
self.ITEM_MAUS = '20' self.ITEM_MAUS = '20'
self.ITEM_BOHNENRANKE = '21'
self.ITEM_ELEFANT = '22'
self.ITEM_HAFEN = '23'
self.ITEM_GATTER = '25'
# Räume # Räume
@@ -293,10 +344,25 @@ class World:
self.RAUM_KLEINES_FELD = '12' self.RAUM_KLEINES_FELD = '12'
self.RAUM_WIESE = '13' self.RAUM_WIESE = '13'
self.RAUM_BRACHLAND = '14' self.RAUM_BRACHLAND = '14'
self.RAUM_BOHNENRANKE = '15'
self.RAUM_PFAD = '16'
self.RAUM_PFAD_SUED = '17'
self.RAUM_PFAD_OST = '18'
self.RAUM_TAL = '19'
self.RAUM_BAUM = '20'
self.RAUM_TUNNEL = '21'
self.RAUM_STRAND = '22'
self.RAUM_HAFEN = '23'
self.RAUM_BAUMHAUS = '24'
# Personen # Personen
self.PERSON_GEIST = '4' self.PERSON_GEIST = '4'
self.PERSON_FISCH = '2'
self.PERSON_STIER = '5'
self.PERSON_ZWERG = '6'
self.fehler = '' self.fehler = ''

View File

@@ -135,7 +135,7 @@ class WorldParser():
person = Person(name,id,raum) person = Person(name,id,raum)
self.world.personen[id] = person self.world.personen[id] = person
raum = self.world.sucheRaum(raumid) raum = self.world.sucheRaum(raumid)
raum.personen[raumid] = person raum.personen[id] = person
# Texte # Texte
for item in root.findall('texte/text'): for item in root.findall('texte/text'):

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
@@ -74,6 +75,11 @@ class Gegenstand(SuperNode):
self.display = None self.display = None
self.GESCHLOSSEN = 0 self.GESCHLOSSEN = 0
self.OFFEN = 1 self.OFFEN = 1
self.KLEIN = 0
self.MITTEL = 1
self.GROSS = 2
self.LEER = 0
self.VOLL = 1
self.zustand = self.GESCHLOSSEN self.zustand = self.GESCHLOSSEN
class Adjektiv(SuperNode): class Adjektiv(SuperNode):

Binary file not shown.

BIN
img/map.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

31
map.txt
View File

@@ -20,11 +20,34 @@
| | | |
| | | |
V V V V
Brachland kleines Feld (0)Brachland kleines Feld
^(1)
(1) (1)
Himmelspfad
(0)
(1)Spitze der Bohnenranke
^
|
|
V
Pfad
^
|
|
V
Pfad<--> Pfad
^
|
|
V
Tal<---> Tunnel <--->Strand
^
|
|
V
Baum <--> Baumhaus

46
tomb.py
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
@@ -60,6 +62,12 @@ def verarbeiteBefehl(parsedCommand):
actionmodul.schlage(parsedCommand) actionmodul.schlage(parsedCommand)
elif id == '25': elif id == '25':
actionmodul.sprich(parsedCommand) actionmodul.sprich(parsedCommand)
elif id == '26':
actionmodul.leere(parsedCommand)
elif id == '27':
actionmodul.fuelle(parsedCommand)
elif id == '28':
actionmodul.wirf(parsedCommand)
elif id == '-1': elif id == '-1':
world.fehler = 'Ich verstehe diesen Befehl nicht' world.fehler = 'Ich verstehe diesen Befehl nicht'
else: else:
@@ -69,8 +77,11 @@ def handle_SIGINT(sig,frame):
logging.debug("CTRL-C abgefangen") logging.debug("CTRL-C abgefangen")
sys.exit(0) sys.exit(0)
logging.basicConfig(
format='%(asctime)-15s [%(levelname)s] %(funcName)s: %(message)s',
filename='tomb.log',
level=logging.DEBUG)
logging.basicConfig(filename='tomb.log', level=logging.DEBUG)
signal.signal(signal.SIGINT,handle_SIGINT) signal.signal(signal.SIGINT,handle_SIGINT)
world = World.World() world = World.World()
logging.debug('World initialisiert') logging.debug('World initialisiert')
@@ -98,6 +109,10 @@ def inputLoop(stdscr):
if debugcommand[1] == 'items': if debugcommand[1] == 'items':
debug_Items() debug_Items()
elif debugcommand[1] == 'inventar':
debug_Inventar()
elif debugcommand[1] == 'personen':
debug_Personen()
elif command.startswith('auto:'): elif command.startswith('auto:'):
command = command.rstrip() command = command.rstrip()
if command.startswith('auto:'): if command.startswith('auto:'):
@@ -110,14 +125,33 @@ 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()
elif debugcommand[1] == 'tal':
testmodul.testTal()
elif debugcommand[1] =='baumhaus':
testmodul.testBaumhaus()
elif debugcommand[1] == 'stier':
testmodul.testStier()
world.fehler = ''
else: else:
actionmodul.clearFehler()
parsedCommand = world.parseInput(command) parsedCommand = world.parseInput(command)
commandid = parsedCommand.commandid commandid = parsedCommand.commandid
verarbeiteBefehl(parsedCommand) verarbeiteBefehl(parsedCommand)
actionmodul.raumaction() 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(): def debug_Items():
logging.debug('liste Items') logging.debug('liste Items')
logging.debug(world.gegenstaende) logging.debug(world.gegenstaende)
@@ -128,6 +162,16 @@ def debug_Items():
# logging.debug(f'Item-IdId:{item.id} - Item-Name:{item.name}') # logging.debug(f'Item-IdId:{item.id} - Item-Name:{item.name}')
count = count +1 count = count +1
def debug_Inventar():
logging.debug('liste Items')
logging.debug(world.inventar)
count = 0
for item in world.inventar:
logging.debug(f'count= {count}')
logging.debug(f'Itemtyp: {type(item)}')
# logging.debug(f'Item-IdId:{item.id} - Item-Name:{item.name}')
count = count +1
def main(): def main():
wrapper(inputLoop) wrapper(inputLoop)

117
world.xml
View File

@@ -67,8 +67,9 @@
</beschreibung> </beschreibung>
</raum> </raum>
<raum id='11' name='Feld'> <raum id='11' name='Feld'>
<ausgang dir='West' nachRaum= '6' /> <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.
@@ -83,25 +84,92 @@
</beschreibung> </beschreibung>
</raum> </raum>
<raum id='13' name='Wiese'> <raum id='13' name='Wiese'>
<ausgang dir='Ost' nachRaum= '12' /> <ausgang dir='Ost' nachRaum= '11' />
<ausgang dir='Sued' nachRaum= '14' />
<beschreibung> <beschreibung>
Du stehst auf einer Wiese, die nach Du stehst auf einer umzäunten Wiese, Ein Gatter versperrt den Weg nach Süden.
</beschreibung> </beschreibung>
</raum> </raum>
<raum id='14' name='Brachland'> <raum id='14' name='Brachland'>
<ausgang dir='Nord' nachRaum= '13' />
<beschreibung> <beschreibung>
Brachland. Hier wächst nicht viel abgesehen von einer einzelnen Bohnenranke. Brachland. Hier wächst nicht viel abgesehen von einer einzelnen Bohnenranke.
</beschreibung> </beschreibung>
</raum> </raum>
<raum id='15' name='Himmelspfad'> <raum id='15' name='Spitze der Bohnenranke'>
<ausgang dir='Runter' nachRaum= '14' /> <ausgang dir='Runter' nachRaum= '14' />
<beschreibung> <beschreibung>
Brachland. Hier wächst nicht viel abgesehen von einer einzelnen Bohnenranke. Du stehst auf der Spitze der Bohnenranke.
</beschreibung>
</raum>
<raum id='16' name='Pfad'>
<ausgang dir='Nord' nachRaum= '15' />
<ausgang dir='Sued' nachRaum= '17' />
<beschreibung>
Der Pfad führt weiter nach Süden.
</beschreibung>
</raum>
<raum id='17' name='südlicher Pfad'>
<ausgang dir='Nord' nachRaum= '16' />
<ausgang dir='Ost' nachRaum= '18' />
<beschreibung>
Der Pfad macht eine Biegung in östlicher Richtung.
</beschreibung>
</raum>
<raum id='18' name='östlicher Pfad'>
<ausgang dir='West' nachRaum= '17' />
<ausgang dir='Sued' nachRaum= '19' />
<beschreibung>
Der Pfad macht eine Biegung in östlicher Richtung.
</beschreibung>
</raum>
<raum id='19' name='Tal'>
<ausgang dir='West' nachRaum= '17' />
<ausgang dir='Ost' nachRaum= '21' />
<ausgang dir='Sued' nachRaum= '20' />
<beschreibung>
Du stehst in einem Tal, nach Westen führt ein Pfad, in südlicher Richtung entdeckst du in der Ferne einen Baum.
Nach Osten führt ein dunkler Tunnel
</beschreibung>
</raum>
<raum id='20' name='Baum'>
<ausgang dir='Nord' nachRaum= '18' />
<beschreibung>
Du stehst unter einem Baum mit einer dichten Baumkrone
</beschreibung>
</raum>
<raum id='21' name='Tunnel'>
<ausgang dir='West' nachRaum= '18' />
<beschreibung>
Im Tunnel ist es dunkel.
</beschreibung>
</raum>
<raum id='22' name='Strand'>
<ausgang dir='West' nachRaum= '20' />
<ausgang dir='Sued' nachRaum= '22' />
<beschreibung>
Du stehst am Strand eines großen Sees. In südlicher Richtung scheint ein Hafen zu sein.
</beschreibung>
</raum>
<raum id='23' name='Hafen'>
<ausgang dir='Nord' nachRaum= '21' />
<ausgang dir='Sued' nachRaum= '22' />
<beschreibung>
Im Hafen liegt ein Segelschiff angeleint.
</beschreibung>
</raum>
<raum id='24' name='Baumhaus'>
<ausgang dir='Runter' nachRaum= '20' />
<beschreibung>
Das Baumhaus
</beschreibung> </beschreibung>
</raum> </raum>
</ebene> </ebene>
@@ -144,6 +212,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='fülle' id='37' key='27' />
<command name='wirf' id='38' key='28' />
</commandset> </commandset>
@@ -191,11 +261,16 @@
<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' />
<item name='Gatter' id='25' display='' raum='13' imobil='true' adjektiv = '0' msgid='11' visible='true' />
</items> </items>
<personen> <personen>
<person name='Fisch' id='2' raum='10' bewegung='0' /> <person name='Fisch' id='2' raum='10' bewegung='0' />
<person name='Geist' id='4' raum='2' bewegung='1' /> <person name='Geist' id='4' raum='2' bewegung='1' />
<person name='Stier' id='5' raum='13' bewegung='0' />
<person name='Zwerg' id='6' raum='24' bewegung='0' />
</personen> </personen>
<messages> <messages>
<pickup text='Das ist zu schwer' id='1' /> <pickup text='Das ist zu schwer' id='1' />
@@ -207,6 +282,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='' />
@@ -233,7 +309,7 @@
Der Teich wird vom Bach gespeist.Einige Wassertiere leben darin. Der Teich wird vom Bach gespeist.Einige Wassertiere leben darin.
</text> </text>
<text id='item-17'> <text id='item-17'>
Der magische Fisch sagt: Pflanzen brauchen Wasser und verschwindet. Der magische Fisch sagt: "Pflanzen brauchen Wasser" und verschwindet.
</text> </text>
<text id='item-19'> <text id='item-19'>
Der Boxsack trägt die Aufschrift: Eigentum von Maddes. Außerdem hat jemand ein großes V draufgemalt. Der Boxsack trägt die Aufschrift: Eigentum von Maddes. Außerdem hat jemand ein großes V draufgemalt.
@@ -241,8 +317,20 @@
<text id='item-20'> <text id='item-20'>
Die ist mausetot. Die ist mausetot.
</text> </text>
<text id='item-21'> <text id='item-21-0'>
Ein Bohnengewächs der märchenhaften Gattung vigna hansus magicus. Ein Bohnengewächs der märchenhaften Gattung vigna hans in beatitudinem.
Sie ist etwas mickrig und braucht Pflege.
</text>
<text id='item-21-1'>
Ein Bohnengewächs der märchenhaften Gattung vigna hans in beatitudinem.
Sie reicht dir bis an die Schultern.
</text>
<text id='item-21-2'>
Ein Bohnengewächs der märchenhaften Gattung vigna hans in beatitudinem.
Sie wächst bis in die Wolken hinein.
</text>
<text id='item-22'>
Der Elefantbulle ist mindestens fünf Meter größer als du und hat zwei beeindruckende Stoßzähne. Er versperrt den Ausgang.
</text> </text>
<text id='hilfe'> <text id='hilfe'>
Das Grab des Azteken ist ein klassisches Textadventure. Das Grab des Azteken ist ein klassisches Textadventure.
@@ -259,5 +347,14 @@
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>
<text id='mauswurf'>
Als der Elefant die Maus sieht, bekommt er einen Riesenschreck und flüchtet. Dadurch wird der Weg nach Süden frei.
</text>
<text id='jackewurf'>
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.
</text>
</texte> </texte>
</welt> </welt>