15 Commits
0.10 ... 0.11

Author SHA1 Message Date
Olli Graf
1b26d00042 Himmelspfad & Elefant 2022-05-22 11:04:43 +02:00
Olli Graf
d67f6903c7 Fisch, Brachland, Wiese usw. 2022-05-22 10:29:37 +02:00
Olli Graf
15132268d0 sprechen mit dem Geist enthüllt den Auftrag. 2022-05-18 19:41:56 +02:00
Olli Graf
0651532a56 hilfe befehle. 2022-05-18 13:45:17 +02:00
Olli Graf
e671a22fa2 Karte. 2022-05-18 08:43:59 +02:00
Olli Graf
9fa3e55775 Entdeckung des Fischs 2022-05-14 19:26:33 +02:00
Olli Graf
80f4dd484e auto:teich bis zum Bach
Beschreibungstexte
2022-05-14 15:38:32 +02:00
Olli Graf
0a0ffcbc5f gehe funktioniert wieder.
hilfe Kommando.
2022-05-14 10:16:06 +02:00
Olli Graf
5b0b25cec1 Das Inventar ist jetzt immer zu sehen. 2022-05-13 17:23:01 +02:00
Olli Graf
85d36993c1 Öffnen der Truhe enthüllt jetzt Seil und Schwert. 2022-05-13 11:42:13 +02:00
Olli Graf
9230a418ae auto: bis Keller 2022-05-13 07:51:28 +02:00
Olli Graf
3b29f77d57 Testmodul. 2022-05-12 19:51:04 +02:00
Olli Graf
fd3187e61e Logging reduziert. 2022-05-12 19:27:44 +02:00
Olli Graf
f702995afd benutze/klettere Leiter
findItemById() iteriert jetzt richtig übers Dictionary
2022-05-12 19:19:28 +02:00
Olli Graf
fe5ee8b197 Wiederaufnehmen der Planke versperrt den Weg über den Bach. 2022-04-28 07:37:24 +02:00
9 changed files with 655 additions and 83 deletions

View File

@@ -2,8 +2,9 @@ import logging
class ActionModul:
def isBlank(self,str):
if str and len(str.strip()) == 0:
def isBlank(self,str):
logging.debug(f'isBlank(): str=*{str}*')
if str != None and len(str.strip()) == 0:
return True
return False
@@ -45,9 +46,19 @@ class ActionModul:
logging.debug('öffne Truhe')
schluessel = self.world.findItemImInventarById(self.world.ITEM_KLEINER_SCHLUESSEL)
if schluessel != None:
if schluessel != None and item.zustand != item.OFFEN:
item.zustand = item.OFFEN
self.setFehler('Truhe ist jetzt offen')
schluessel.sichtbar = False
self.ausDemInventar(schluessel)
seil = self.world.findItemById(self.world.ITEM_SEIL)
seil.raumid = self.world.aktuellerRaum.id
seil.sichtbar = True
self.world.aktuellerRaum.items[seil.id] = seil
schwert = self.world.findItemById(self.world.ITEM_SCHWERT)
schwert.sichtbar = True
schwert.raumid = self.world.aktuellerRaum.id
self.world.aktuellerRaum.items[schwert.id] = schwert
self.setFehler('Aus der Truhe fallen ein Seil und ein Schwert. Der kleine Schlüssel löst sich auf.')
else:
self.setFehler('Die Truhe ist verschlossen und dir fehlt der passende Schlüssel.')
@@ -58,20 +69,56 @@ class ActionModul:
logging.debug(f'öffne Haustür Schlüssel ist {schluessel}')
if schluessel != None:
item.zustand = item.OFFEN
self.setFehler('Die Haustür ist geöffnet und führt in den Garten.')
schluessel.sichtbar = False
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:
logging.debug('öffne Haustür kein Haustürschlüssel')
self.setFehler('Die Tür ist verschlossen.')
def isAktuellerRaum(self, raumid):
return self.world.aktuellerRaum.id == raumid
def benutze(self, parsedCommand):
item = self.world.findItemImInventarOderAktuellerRaum(parsedCommand.gegenstand);
if item.id ==self.world.ITEM_JACKE:
self.setFehler('Also du die Jacke anziehst, findest du einen kleine Schlüssel in der Tasche.')
self.findeTruhenschluessel()
elif item.id == self.world.ITEM_LEITER:
if(self.world.aktuellerRaum.id == self.world.RAUM_ESSZIMMER):
logging.debug(f'aktuellerRaum ist {self.world.aktuellerRaum.id}')
self.rauf()
elif item.id == self.world.ITEM_PLANKE:
if self.isAktuellerRaum(self.world.RAUM_BACH):
self.baueBruecke()
self.setFehler('Du legst die Planke über den Bach und es ensteht eine Brücke.')
else:
self.setFehler('Das macht hier keinen Sinn.')
def baueBruecke(self):
bach = self.world.sucheRaum(self.world.RAUM_BACH)
bach.ausgaenge[self.world.OST] = self.world.RAUM_TEICH
def ausDemInventar(self,item):
del self.world.inventar[item.id]
self.world.aktuellerRaum.items[item.id] = item
item.raumid = self.world.aktuellerRaum.id
def verliere(self,parsedCommand):
item = self.world.findItemImInventar(parsedCommand.gegenstand);
logging.debug(f'verliere Item {item}')
if item != None:
del self.world.inventar[item.id]
self.world.aktuellerRaum.items[item.id] = item
if self.isAktuellerRaum(self.world.RAUM_BACH):
if item.id == self.world.ITEM_PLANKE:
self.baueBruecke()
self.setFehler('Du legst die Planke über den Bach und es ensteht eine Brücke über den Bach')
self.ausDemInventar(item)
else:
self.setFehler("Diesen Gegenstand besitzt du nicht.")
@@ -87,7 +134,7 @@ class ActionModul:
if item != None:
logging.debug('stelle() item.id=' + str(item.id))
if item.id == self.world.ITEM_GLAS:
if item.id == self.world.ITEM_KRUG:
self.world.aktuellerRaum.ausgaenge[self.world.NORD] = '5'
self.verliere(parsedCommand)
self.world.printText('1')
@@ -99,37 +146,81 @@ class ActionModul:
logging.debug(f'raumId {raum.id}')
logging.debug(f'untersucheAktuellenRaum() {parsedCommand.gegenstand} in {self.world.aktuellerRaum.id}')
if raum.id == self.world.aktuellerRaum.id:
if self.isAktuellerRaum(raum.id):
logging.debug(f'untersuche aktuellen Raum {raum.name}')
if raum.id == '5':
#Schlüssel im Keller sichtbar machen
logging.debug('mache Schlüssel sichtbar')
self.setFehler('Auf dem Boden findest du einen kleinen Schlüssel.')
schluessel = self.world.findRaumItemById(self.world.ITEM_KLEINER_SCHLUESSEL)
schluessel.sichtbar = True
def findeTruhenschluessel(self):
schluessel = self.world.findItemById(self.world.ITEM_KLEINER_SCHLUESSEL)
logging.debug(f'Schlüssel ist sichtbar {schluessel.sichtbar}')
if not schluessel.sichtbar:
logging.debug('mache Schlüssel sichtbar')
self.setFehler('In der Jackentasche findest du einen kleinen Schlüssel.')
schluessel.sichtbar = True
self.insInventar(schluessel)
def schlage(self, parsedCommand):
item = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand)
if item.id == self.world.ITEM_BOXSACK:
self.setFehler('Der Boxsack sagt: Hmm, hmm?')
def leere(self, parsedCommand):
skip
def fuelle(self, parsedCommand):
skip
def zeigeItemBeschreibung(self,item):
self.world.printText(f'item-{item.id}')
def untersuche(self,parsedCommand):
logging.debug(f'untersuche() suche nach Gegenstand: {parsedCommand.gegenstand}')
if parsedCommand.gegenstand == None:
self.untersucheAktuellenRaum
self.untersucheAktuellenRaum()
return
item = self.world.findItemImInventarOderAktuellerRaum(parsedCommand.gegenstand)
if item != None:
if item.id == '4':
glas = self.world.findRaumItemById(self.world.ITEM_GLAS)
logging.debug(f'mache Gegenstand {glas.name} sichtbar')
glas.sichtbar = True
if item.id == self.world.ITEM_PFLANZE:
krug = self.world.findRaumItemById(self.world.ITEM_KRUG)
logging.debug(f'mache Gegenstand {krug.name} sichtbar')
krug.sichtbar = True
self.setFehler('Die Pflanze ist in einen Krug gepflanzt.')
elif item.id == self.world.ITEM_BETT:
# Falltür sichtbar machen
self.world.aktuellerRaum.ausgaenge[self.world.RUNTER] = self.world.RAUM_KELLER
logging.debug('untersuche(): Keller ist jetzt zugänglich')
self.setFehler('Im Boden unter dem Bett findest du eine Falltür, die nach unten führt.')
elif item.id == self.world.ITEM_NACHTSCHRANK:
self.setFehler('In der Schublade findest du einen Schlüssel')
schluessel = self.world.findRaumItemById(self.world.ITEM_HAUSTUERSCHLUESSEL)
schluessel.sichtbar = True
elif item.id == self.world.ITEM_TEICH:
fisch = self.world.findItemById(self.world.ITEM_FISCH)
if fisch.raumid == self.world.RAUM_TEICH:
fisch.sichtbar = True
self.setFehler('Im Teich schwimmt ein kleiner Fisch')
fisch = self.world.findItemById(self.world.ITEM_FISCH)
fisch.sichtbar = True
elif item.id == self.world.ITEM_JACKE:
self.findeTruhenschluessel()
elif item.id == self.world.ITEM_FISCH:
self.zeigeItemBeschreibung(item)
item.sichtbar = False
self.ausDemInventar(item)
else:
self.zeigeItemBeschreibung(item)
else:
logging.debug('Kein Item gefunden, suche nach Raum')
self.untersucheAktuellenRaum(parsedCommand)
@@ -144,9 +235,29 @@ class ActionModul:
else:
self.setFehler('Das sehe ich hier nicht.')
def fange(self, parsedCommand):
skip
def klettere(self, parsedCommand):
leiter = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand)
logging.debug(f'klettere(): Leiter is {leiter}')
if leiter != None:
if self.isAktuellerRaum(self.world.RAUM_ESSZIMMER):
logging.debug(f'aktuellerRaum ist {self.world.aktuellerRaum.id}')
self.rauf()
else:
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):
item = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand)
logging.debug(f'nimm(): item == {item}')
if item != None:
if item.imobil:
text = self.world.msg[item.pickupmsg]
@@ -157,18 +268,65 @@ 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]
self.world.inventar[item.id] = item
logging.debug(f'Item {item.name} ins Inventar')
aufnehmen = True
logging.debug(f'nimm(): RaumId== {self.world.aktuellerRaum.id}')
if self.isAktuellerRaum(self.world.RAUM_BACH):
logging.debug(f'nimm(): ItemId == {item.id}')
if item.id == self.world.ITEM_PLANKE:
logging.debug('nehme Planke am Bach')
self.world.aktuellerRaum.ausgaenge[self.world.SUED] = '-1'
elif self.isAktuellerRaum(self.world.RAUM_TEICH):
if item.id == self.world.ITEM_FISCH:
krug = self.world.findItemImInventarById(self.world.ITEM_KRUG)
if krug != None:
self.setFehler('Du schöpfst mit dem Krug und der Fisch ist drin.')
else:
self.setFehler('Der Fisch ist zu glitschig, um ihn mit der Hand zu fangen.')
aufnehmen = False
if aufnehmen:
self.insInventar(item)
else:
self.setFehler("diesen Gegenstand sehe ich hier nicht.")
def gehe(self):
richtung = self.world.parsedCommand.gegenstand
def sprich(self,parsedCommand):
geist = self.world.findPersonImAktuellenRaum(parsedCommand.gegenstand)
if geist != None:
self.world.printText('geist')
else:
self.setFehler(f'{parsedCommand.gegenstand} ist nicht im Raum.')
def hilfe(self,parsedCommand):
if parsedCommand.gegenstand == 'befehle':
self.world.printBefehle()
else:
self.world.printText('hilfe')
def gehe(self,parsedCommand):
richtung = parsedCommand.gegenstand.lower()
logging.debug("gehe nach " + richtung)
if richtung == 'nord':
self.nord()
self.geheNach(richtung)
elif richtung == 'süd':
self.geheNach(richtung)
if richtung == 'west':
self.geheNach(richtung)
if richtung == 'ost':
self.geheNach(richtung)
if richtung == 'rauf':
self.rauf()
def geheNach(self,richtung):
logging.debug(f'geheNach() Richtung {richtung}')

141
TestModule.py Normal file
View File

@@ -0,0 +1,141 @@
import logging
import ActionModul
class TestModule:
def __init__(self, world):
logging.debug(f'** init Testmodule {world}')
self.world = world
self.schrittzaehler = 0
self.ac = ActionModul.ActionModul(world)
def debug(self,msg):
logging.debug(f'AUTO: {msg}')
def parseInput(self, command):
return self.world.parseInput(command)
def testOeffneTruhe(self):
pcmd = self.parseInput('nimm Truhe')
#Auf den Dachboden
self.ac.rauf()
self.schrittzaehler = self.schrittzaehler +1
self.ac.nimm(pcmd)
self.schrittzaehler = self.schrittzaehler +1
#Zurück ins Wohnzimmer
self.ac.runter()
self.schrittzaehler = self.schrittzaehler +1
#In den Flur
self.ac.sued()
self.schrittzaehler = self.schrittzaehler +1
# Ins Schlafzimmer
self.ac.west()
self.schrittzaehler = 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.debug(f'Ausgänge: {self.world.aktuellerRaum.ausgaenge}')
# In den Keller
self.ac.runter()
self.schrittzaehler = self.schrittzaehler +1
pcmd = self.parseInput('nimm Jacke')
self.ac.nimm(pcmd)
self.schrittzaehler = self.schrittzaehler +1
pcmd = self.parseInput('benutze Jacke')
self.ac.benutze(pcmd)
self.schrittzaehler = self.schrittzaehler +1
pcmd = self.parseInput('öffne Truhe')
self.ac.oeffne(pcmd)
self.schrittzaehler = 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')
self.ac.nimm(pcmd)
self.schrittzaehler = self.schrittzaehler +1
#Rauf ins Schlafzimmer
self.ac.rauf()
self.schrittzaehler = self.schrittzaehler +1
pcmd = self.parseInput('untersuche Nachtschrank')
self.ac.untersuche(pcmd)
self.schrittzaehler = self.schrittzaehler +1
pcmd = self.parseInput('nimm Haustürschlüssel')
self.ac.nimm(pcmd)
self.schrittzaehler = self.schrittzaehler +1
#In den Flur
self.ac.ost()
self.schrittzaehler = self.schrittzaehler +1
pcmd = self.parseInput('untersuche Pflanze')
self.ac.untersuche(pcmd)
self.schrittzaehler = self.schrittzaehler +1
pcmd = self.parseInput('nimm Krug')
self.ac.nimm(pcmd)
self.schrittzaehler = self.schrittzaehler +1
pcmd = self.parseInput('öffne Haustür')
self.ac.oeffne(pcmd)
self.schrittzaehler = self.schrittzaehler +1
# nach draussen
self.ac.sued()
self.schrittzaehler = self.schrittzaehler +1
# aufs Dach
self.ac.rauf()
self.schrittzaehler = self.schrittzaehler +1
pcmd = self.parseInput('nimm Planke')
self.ac.nimm(pcmd)
self.schrittzaehler = self.schrittzaehler +1
#Wieder runter
self.ac.runter()
self.schrittzaehler = self.schrittzaehler +1
#Zum Bach
self.ac.sued()
self.schrittzaehler = self.schrittzaehler +1
pcmd = self.parseInput('verliere Planke')
self.ac.verliere(pcmd)
self.schrittzaehler = self.schrittzaehler +1
#Zum Teich
self.ac.ost()
self.schrittzaehler = self.schrittzaehler +1

101
World.py
View File

@@ -18,11 +18,35 @@ class World:
self.waitForCR()
self.printRaum()
def printBefehle(self):
self.clearScreen()
befehlar = []
count = 0
self.stdscr.addstr(5,1,'Das System versteht folgende Befehle:')
for befehlid in self.befehle:
befehl = self.befehle[befehlid].name
befehlar.append(befehl)
count = count +1
self.stdscr.addstr(6,1, str(befehlar))
self.waitForCR()
self.waitForCR()
def waitForCR(self):
self.stdscr.addstr(0,0,'Taste für Weiter',curses.color_pair(1))
self.stdscr.getch()
def labelsInventar(self):
labels =[]
for itemid in self.inventar:
item = self.inventar[itemid]
if item.sichtbar:
labels.append(item.name)
return labels
def printRaum(self):
raum = self.aktuellerRaum
self.clearScreen()
@@ -33,11 +57,12 @@ class World:
self.stdscr.addstr(3,0,'aktueller Raum: ' + raum.name,curses.color_pair(3))
self.stdscr.addstr(4,0,raum.beschreibung)
self.stdscr.addstr(7,0,'Gegenstände: ' + str(raum.labelsGegenstaende()),curses.color_pair(2))
self.stdscr.addstr(8,0,'Personen: ' + str(raum.labelsPersonen()),curses.color_pair(2))
self.stdscr.addstr(8,0,'Inventar: '+ str(self.labelsInventar()), curses.color_pair(2))
self.stdscr.addstr(9,0,'Personen: ' + str(raum.labelsPersonen()),curses.color_pair(2))
aus = raum.ausgaenge
self.stdscr.addstr(9,0,'mögliche Richtungen: ')
self.stdscr.addstr(10,0,'mögliche Richtungen: ')
r = []
if aus[self.NORD] != '-1':
r.append('Norden')
@@ -54,6 +79,7 @@ class World:
richtungen =''
ixri = 0
self.stdscr.addstr(6,85,f'Schritte: {self.schrittzaehler}')
win = curses.newwin(7,35,7,85)
win.box()
win.addstr('Ausgänge:')
@@ -63,7 +89,7 @@ class World:
if ixri +1 < len(r):
richtungen = richtungen + ', '
ixri = ixri +1
self.stdscr.addstr(9,22,richtungen)
self.stdscr.addstr(10,22,richtungen)
self.stdscr.refresh()
win.refresh()
@@ -89,17 +115,29 @@ class World:
return item
def findItemById(self,id):
for itemkey in self.gegenstaende:
item = self.gegenstaende[itemkey]
logging.debug(f'itemkey: {itemkey} item.id= {item.id} - {id}')
if item.id == id:
logging.debug(f'findItemBy(): return {item.name}')
return item
return None
def findItemInAktuellerRaum(self,itemname):
raum = self.aktuellerRaum
for itemid in raum.items:
item = raum.items[itemid]
logging.debug('raum.id=' + raum.id)
logging.debug('item.raumid=' + item.raumid)
logging.debug('findItemInAktuellerRaum() ' + itemname + '-' + item.name)
logging.debug(f'raum.id={raum.id}')
logging.debug(f'item.raumid={item.raumid}')
logging.debug(f'findItemInAktuellerRaum() {itemname} - {item.name}')
if item.raumid == raum.id and item.name.lower() == itemname.lower():
return item
logging.debug(f'Item {itemname} nicht im aktuellen Raum gefunden')
return None
def findRaumItemById(self,id):
@@ -113,6 +151,17 @@ class World:
return None
def findPersonImAktuellenRaum(self, personname):
raum = self.aktuellerRaum
for persid in raum.personen:
person = raum.personen[persid]
if person.name.lower() == personname.lower():
return person
return None
def findItemImInventar(self,itemname):
for itemid in self.inventar:
@@ -130,6 +179,7 @@ class World:
def ermittleBefehlId(self,befehl):
for id in self.befehle:
name = self.befehle[id].name
logging.debug(f'ermittleBefehlId(): {befehl} - {name}')
if name == befehl:
return id
return None
@@ -150,11 +200,14 @@ class World:
def parseInput(self,input):
logging.debug(f'parseInput() {input}')
words = input.split(' ')
parsedCommand = ParsedCommand.ParsedCommand()
words = self.removeSortouts(words,parsedCommand)
befehlid = self.ermittleBefehlId(words[0])
logging.debug(f'parseInput() befehlid {befehlid}')
if befehlid != None:
befehl = self.befehle[befehlid]
parsedCommand.commandid = befehl.id
@@ -167,7 +220,21 @@ class World:
return parsedCommand
def debug_Items(self):
logging.debug('liste Items')
logging.debug(self.gegenstaende)
count = 1
for key in self.gegenstaende:
item = self.gegenstaende[key]
logging.debug(f'count= {count}')
logging.debug('Itemtyp: ' + str(type(item)))
logging.debug(f'Item-IdId:{item.id} - Item-Name:{item.name}')
count = count +1
def __init__(self):
self.schrittzaehler = 0
self.raumliste = {}
self.msg = {}
self.personen = {}
@@ -194,18 +261,24 @@ class World:
self.ITEM_TRUHE = '3'
self.ITEM_PFLANZE = '4'
self.ITEM_HAUSTUER = '5'
self.ITEM_GLAS = '6'
self.ITEM_KRUG = '6'
self.ITEM_BETT = '7'
self.ITEM_NACHTSCHRANK = '8'
self.ITEM_KLEINER_SCHLUESSEL = '9'
self.ITEM_JACKE = '10'
self.ITEM_SCHWERT = '11'
self.ITEM_SEIL = '12'
self.ITEM_HAUSTUERSCHLUESSEL = '13'
self.ITEM_RANKGITTER = '14'
self.ITEM_PLANKE = '15'
self.ITEM_TEICH = '16'
self.ITEM_FISCH = '17'
self.ITEM_SCHWERT = '18'
self.ITEM_BOXSACK = '19'
self.ITEM_MAUS = '20'
# Räume
self.RAUM_UNDEF = '-1'
self.RAUM_ESSZIMMER = '1'
self.RAUM_DACHBODEN = '2'
self.RAUM_FLUR = '3'
@@ -213,9 +286,21 @@ class World:
self.RAUM_KELLER = '5'
self.RAUM_GARTEN = '6'
self.RAUM_DACH = '7'
self.RAUM_BACH = '8'
self.RAUM_FELD = '9'
self.RAUM_TEICH = '10'
self.RAUM_FELD = '11'
self.RAUM_KLEINES_FELD = '12'
self.RAUM_WIESE = '13'
self.RAUM_BRACHLAND = '14'
# Personen
self.PERSON_GEIST = '4'
self.fehler = ''
parser = WorldParser.WorldParser(self)
parser.parseWorld('world.xml')

View File

@@ -5,12 +5,20 @@ import logging
class WorldParser():
def isBlank(self,str):
lenstr = len(str.strip())
logging.debug(f'isBlank(): {lenstr}')
if str == None or lenstr == 0:
return True
return False
def __init__(self,world):
self.neuerRaum = None
self.world = world
self.textCount = 0
def parseWorld(self,filename):
tree = ET.parse(filename)
root = tree.getroot()
@@ -91,22 +99,31 @@ class WorldParser():
imobil = item.attrib['imobil']
visible = item.attrib['visible']
adjektiv = item.attrib['adjektiv']
display = item.attrib['display']
raum = self.world.sucheRaum(raumid)
if raum is not None:
gegenstand.raum = raum.id
gegenstand.adjektiv = adjektiv
gegenstand.imobil = imobil.lower() in ['true','True','1']
logging.debug('itemid= ' + id + ',visible= ' + visible)
gegenstand.sichtbar = visible.lower() not in ['false','False','0']
#logging.debug('Gegenstand ' + gegenstand.name + ' ist sichtbar: ' + str(gegenstand.sichtbar))
gegenstand.pickupmsg = msgid
print('Item ' + gegenstand.name + ' - Pickup: ' + gegenstand.pickupmsg)
raum.items[id] = gegenstand
self.world.gegenstaende[id] = gegenstand
else:
logging.error(f'Kann Raum für Gegenstand {gegenstand.name} nicht finden')
print(f'Kein Raum für {gegenstand.name}')
if raumid != '-1':
logging.error(f'Kann Raum für Gegenstand {gegenstand.name} nicht finden')
logging.error(f'Kein Raum für {gegenstand.name}')
gegenstand.adjektiv = adjektiv
logging.debug(f'display={display}, isBlank={self.isBlank(display)}')
if not self.isBlank(display):
gegenstand.display = display
else:
gegenstand.display = None
gegenstand.imobil = imobil.lower() in ['true','True','1']
logging.debug('itemid= ' + id + ',visible= ' + visible)
gegenstand.sichtbar = visible.lower() not in ['false','False','0']
#logging.debug('Gegenstand ' + gegenstand.name + ' ist sichtbar: ' + str(gegenstand.sichtbar))
gegenstand.pickupmsg = msgid
# logging.debug('Item ' + gegenstand.name + ' - Pickup: ' + gegenstand.pickupmsg)
self.world.gegenstaende[id] = gegenstand
# Personen
for item in root.findall('personen/person'):

View File

@@ -43,7 +43,10 @@ class Raum(SuperNode):
item = self.items[itemid]
logging.debug('labelsGegenstaende(): Item ' + self.items[itemid].name + ' ist ' + str(item.sichtbar))
if item.sichtbar:
labels.append(item.name)
if item.display != None:
labels.append(item.display)
else:
labels.append(item.name)
return labels
@@ -68,6 +71,7 @@ class Gegenstand(SuperNode):
self.sichtbar = True
self.imobil = False
self.adjektiv = None
self.display = None
self.GESCHLOSSEN = 0
self.OFFEN = 1
self.zustand = self.GESCHLOSSEN

Binary file not shown.

31
map.txt Normal file
View File

@@ -0,0 +1,31 @@
Wohnzimmer
^
|
V
Schlafzimmer<-->Flur
^
|
V
Garten
^
|
V
Bach<-->Teich
^
|
V
Wiese<------->Feld
^ ^
| |
| |
V V
Brachland kleines Feld
^(1)
(1)
Himmelspfad

47
tomb.py
View File

@@ -1,6 +1,7 @@
#!/usr/bin/python3
import World
import ActionModul
import TestModule
import signal
import sys
import logging
@@ -19,6 +20,8 @@ def verarbeiteBefehl(parsedCommand):
actionmodul.nimm(parsedCommand)
elif id == '3':
actionmodul.untersuche(parsedCommand)
elif id == '4':
actionmodul.benutze(parsedCommand)
elif id == '5':
actionmodul.nord()
elif id == '6':
@@ -49,6 +52,14 @@ def verarbeiteBefehl(parsedCommand):
actionmodul.oeffne(parsedCommand)
elif id == '21':
actionmodul.klettere(parsedCommand)
elif id == '22':
actionmodul.fange(parsedCommand)
elif id == '23':
actionmodul.hilfe(parsedCommand)
elif id == '24':
actionmodul.schlage(parsedCommand)
elif id == '25':
actionmodul.sprich(parsedCommand)
elif id == '-1':
world.fehler = 'Ich verstehe diesen Befehl nicht'
else:
@@ -66,7 +77,6 @@ logging.debug('World initialisiert')
actionmodul = ActionModul.ActionModul(world)
def inputLoop(stdscr):
schrittzaehler = 0
world.stdscr = stdscr
curses.echo()
@@ -79,6 +89,7 @@ def inputLoop(stdscr):
actionmodul.clearFehler()
stdscr.addstr(11,0,'Was nun? ')
command = stdscr.getstr(11,10,40).decode(encoding="utf-8")
world.schrittzaehler = world.schrittzaehler +1
command = command.rstrip()
if command.startswith('debug:'):
debugcommand = command.split(':',1)
@@ -86,17 +97,39 @@ def inputLoop(stdscr):
logging.debug(f'debugcommand: {debugcommand}')
if debugcommand[1] == 'items':
logging.debug('liste Items')
logging.debug(world.gegenstaende)
for item in world.gegenstaende:
logging.debug(f'Id:{item.id} - Name:{item.name}')
debug_Items()
elif command.startswith('auto:'):
command = command.rstrip()
if command.startswith('auto:'):
debugcommand = command.split(':',1)
logging.debug(f'debugcommand: {debugcommand}')
testmodul = TestModule.TestModule(world)
if(debugcommand[1] == 'truhe'):
testmodul.testOeffneTruhe()
elif debugcommand[1] == 'teich':
testmodul.testTeich()
else:
parsedCommand = world.parseInput(command)
commandid = parsedCommand.commandid
verarbeiteBefehl(parsedCommand)
schrittzaehler = schrittzaehler +1
actionmodul.raumaction()
wrapper(inputLoop)
def debug_Items():
logging.debug('liste Items')
logging.debug(world.gegenstaende)
count = 0
for item in world.gegenstaende:
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():
wrapper(inputLoop)
if __name__ == '__main__':
main()

165
world.xml
View File

@@ -4,7 +4,7 @@
<raum id='1' name='Esszimmer'>
<ausgang dir='Sued' nachRaum='3' />
<ausgang dir='Rauf' nachRaum='2' />
<beschreibung> Vor dem Fenster steht ein Tisch, rechts davon führt eine Leiter nach oben.
<beschreibung> Vor dem Fenster steht ein Tisch, rechts davon führt eine Leiter nach oben. In der Ecke steht ein Boxsack.
</beschreibung>
</raum>
@@ -36,6 +36,7 @@
</raum>
<raum id='6' name='Garten'>
<ausgang dir='Nord' nachRaum='3' />
<ausgang dir='Sued' nachRaum='8' />
<ausgang dir='Rauf' nachRaum='7' />
Du stehst im Vorgarten, die Haustür führt zurück ins Haus.
<beschreibung>
@@ -47,7 +48,60 @@
<ausgang dir='Runter' nachRaum='6' />
Du hast das Dach erklommen.
<beschreibung>
Du hast das Dach erklommen. Aus dem Schornstein riecht es leicht nach verbranntem Buchenholz.
Du hast das Dach erklommen. Aus dem Schornstein riecht es leicht nach dem letzten Kaminfeuer.
</beschreibung>
</raum>
<raum id='8' name='Bach'>
<ausgang dir='Nord' nachRaum= '6' />
<ausgang dir='Sued' nachRaum= '11' />
<beschreibung>
Du stehst an einem Bach.
</beschreibung>
</raum>
<raum id='10' name='Teich'>
<ausgang dir='West' nachRaum= '8' />
<beschreibung>
Du stehst an einem Teich.
</beschreibung>
</raum>
<raum id='11' name='Feld'>
<ausgang dir='West' nachRaum= '6' />
<ausgang dir='Sued' nachRaum= '12' />
<beschreibung>
Ein Feld.
</beschreibung>
</raum>
<raum id='12' name='kleines Feld'>
<ausgang dir='Nord' nachRaum= '11' />
<ausgang dir='West' nachRaum= '13' />
<beschreibung>
Ein kleineres Feld.
</beschreibung>
</raum>
<raum id='13' name='Wiese'>
<ausgang dir='Ost' nachRaum= '12' />
<ausgang dir='Sued' nachRaum= '14' />
<beschreibung>
Du stehst auf einer Wiese, die nach
</beschreibung>
</raum>
<raum id='14' name='Brachland'>
<ausgang dir='Nord' nachRaum= '13' />
<beschreibung>
Brachland. Hier wächst nicht viel abgesehen von einer einzelnen Bohnenranke.
</beschreibung>
</raum>
<raum id='15' name='Himmelspfad'>
<ausgang dir='Runter' nachRaum= '14' />
<beschreibung>
Brachland. Hier wächst nicht viel abgesehen von einer einzelnen Bohnenranke.
</beschreibung>
</raum>
</ebene>
@@ -56,6 +110,7 @@
<command name='quit' id='0' key='0' />
<command name='ende' id='0' key='0' />
<command name='geh' id='1' key='1' />
<command name='gehe' id='27' key='1' />
<command name='nimm' id='2' key='2' />
<command name='untersuche' id='3' key='3' />
<command name='benutze' id='4' key='4' />
@@ -66,7 +121,6 @@
<command name='west' id='9' key='8' />
<command name='rauf' id='10' key='9' />
<command name='runter' id='11' key='10' />
<command name='gehe' id='12' key='11' />
<command name='inventar' id='13' key='12' />
<command name='about' id='14' key='13' />
<command name='verliere' id='15' key='14' />
@@ -80,7 +134,18 @@
<command name='stell' id='22' key='19' />
<command name='öffne' id='23' key='20' />
<command name='klettere' id='24' key='21' />
<command name='fange' id='25' key='22' />
<command name='hilfe' id='28' key='23' />
<command name='schlage' id='29' key='24' />
<command name='boxe' id='30' key='24' />
<command name='norden' id='31' key='5' />
<command name='süd' id='32' key='7' />
<command name='westen' id='33' key='8' />
<command name='sprich' id='34' key='25' />
<command name='leere' id='35' key='26' />
<command name='fuelle' id='36' key='27' />
</commandset>
<adjektive>
@@ -100,43 +165,52 @@
<sortout name='in' />
<sortout name='und' />
<sortout name='kleiner' />
<sortout name='nach' />
<sortout name='tote' />
</sortouts>
<items>
<item name='Tisch' id='1' raum='1' imobil='true' adjektiv = '0' msgid='1' visible='true' />
<item name='Leiter' id='2' raum='1' imobil='true' adjektiv = '0' msgid='1' visible='true' />
<item name='Truhe' id='3' raum='2' imobil='false' adjektiv = '0' msgid='4' visible='true' />
<item name='Pflanze' id='4' raum='3' imobil='false' adjektiv = '0' msgid='3' visible='true' />
<item name='Haustür' id='5' raum='3' imobil='true' adjektiv = '0' msgid='5' visible='true' />
<item name='Glas' id='6' raum='3' imobil='false' adjektiv = '0' msgid='3' visible='false' />
<item name='Bett' id='7' raum='4' imobil='true' adjektiv = '0' msgid='1' visible=' true' />
<item name='Nachtschrank' id='8' raum='4' imobil='true' adjektiv = '0' msgid='1' visible=' true' />
<item name='Schlüssel' id='9' raum='5' imobil='false' adjektiv = '1' msgid='1' visible='false' />
<item name='Jacke' id='10' raum='5' imobil='false' adjektiv = '0' msgid='1' visible='true' />
<item name='Schwert' id='11' raum='5' imobil='false' adjektiv = '0' msgid='1' visible='false' />
<item name='Seil' id='12' raum='5' imobil='false' adjektiv = '0' msgid='1' visible='false' />
<item name='Haustürschlüssel' id='13' raum='4' imobil='false' adjektiv = '0' msgid='1' visible='false' />
<item name='Rankgitter' id='14' raum='6' imobil='false' adjektiv = '0' msgid='3' visible='true' />
<item name='Planke' id='15' raum='7' imobil='false' adjektiv = '0' msgid='3' visible='true' />
<item name='Tisch' display='' id='1' raum='1' imobil='true' adjektiv = '0' msgid='1' visible='true' />
<item name='Leiter' display='' id='2' raum='1' imobil='true' adjektiv = '0' msgid='1' visible='true' />
<item name='Truhe' display='' id='3' raum='2' imobil='false' adjektiv = '0' msgid='4' visible='true' />
<item name='Pflanze' display='' id='4' raum='3' imobil='false' adjektiv = '0' msgid='3' visible='true' />
<item name='Haustür' display='' id='5' raum='3' imobil='true' adjektiv = '0' msgid='5' visible='true' />
<item name='Krug' display='' id='6' raum='3' imobil='false' adjektiv = '0' msgid='3' visible='false' />
<item name='Bett' display='' id='7' raum='4' imobil='true' adjektiv = '0' msgid='1' visible=' true' />
<item name='Nachtschrank' display='' id='8' raum='4' imobil='true' adjektiv = '0' msgid='1' visible=' true' />
<item name='Schlüssel' display='kleiner Schlüssel' id='9' raum='-1' imobil='false' adjektiv = '1' msgid='1' visible='false' />
<item name='Jacke' display='' id='10' raum='5' imobil='false' adjektiv = '0' msgid='1' visible='true' />
<item name='Schwert' display='' id='11' raum='5' imobil='false' adjektiv = '0' msgid='1' visible='false' />
<item name='Seil' display='' id='12' raum='-1' imobil='false' adjektiv = '0' msgid='1' visible='false' />
<item name='Haustürschlüssel' display='' id='13' raum='4' imobil='false' adjektiv = '0' msgid='1' visible='false' />
<item name='Rankgitter' display='' id='14' raum='6' imobil='false' adjektiv = '0' msgid='3' visible='true' />
<item name='Planke' display='' id='15' raum='7' imobil='false' adjektiv = '0' msgid='3' visible='true' />
<item name='Teich' display='' id='16' raum='10' imobil='true' adjektiv = '0' msgid='2' visible='true' />
<item name='Fisch' display='' id='17' raum='10' imobil='false' adjektiv = '0' msgid='0' visible='false' />
<item name='Schwert' display='' id='18' raum='-1' imobil='false' adjektiv = '0' msgid='1' visible='false' />
<item name='Boxsack' display='' id='19' raum='1' imobil='true' 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='Elefant' id='22' display='' raum='15' imobil='true' adjektiv = '0' msgid='9' visible='true' />
</items>
<personen>
<person name=' Fisch' id='2' raum='2' bewegung='0' />
<person name='Folterknecht' id='3' raum='2' bewegung='1' />
<person name='Geist' id='4' raum='3' bewegung='0' />
<person name='Maus' id='4' raum='2' bewegung='0' />
<person name='Fisch' id='2' raum='10' bewegung='0' />
<person name='Geist' id='4' raum='2' bewegung='1' />
</personen>
<messages>
<pickup text='Das ist zu schwer' id='1' />
<pickup text='Daran sind soviel Körperflüssigkeiten runtergelaufen, du möchtest das nicht anfassen' id='2' />
<pickup text='Das kannst du nicht mitnehmen' id='2' />
<pickup text='Das ist fest verschraubt' id ='3' />
<pickup text='Daran hebst du dir nur nen Bruch' id='4' />
<pickup text='Die Eingangstür ist nicht zum Mitnehmen gedacht.' id='5' />
<pickup text='Das hängt viel zu hoch. Zu kommst nicht dran.' id='6' />
<pickup text='Kunstdiebstahl? Nö!' id='7' />
<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' />
</messages>
<bewegungen>
<bewegung id='0' value='' />
<bewegung id='1' value='1,3' />
<bewegung id='1' value='2,5,4,3,1,2' />
</bewegungen>
<texte>
<text id='1'>
@@ -146,15 +220,44 @@
<text id='2'>
In einer Schreibtischschublade findest du einen Schlüssel.
</text>
<text id='item-11'>
Der Schlüssel ist etwa 10cm lang und hat eine ringförmige Reide. Der Bart hat drei Zacken und zwei Kerben.
<text id='item-13'>
Der Schlüssel schimmert etwas bläulich.
</text>
<text id='item-12'>
Zellblock 11-38
<text id='item-14'>
Mit mehreren Quersprossen reicht das Gitter bis zum Dach. Es ist ziemlich massiv.
</text>
<text id='item-9'>
Das Tor besteht aus schmideeisernen Stäben, die geschmiedete Querträger halten. Das Tor ist an den Seiten in Führungsschienen
eingelassen. Auf der rechten Seite befindet sich etwa in der Mitte ein Schloss. Hinter dem Tor scheint ein Treppenhaus zu sein.
<text id='item-15'>
Die Planke wirkt stabil genug, dein Gewicht zu tragen.
</text>
<text id='item-16'>
Der Teich wird vom Bach gespeist.Einige Wassertiere leben darin.
</text>
<text id='item-17'>
Der magische Fisch sagt: Pflanzen brauchen Wasser und verschwindet.
</text>
<text id='item-19'>
Der Boxsack trägt die Aufschrift: Eigentum von Maddes. Außerdem hat jemand ein großes V draufgemalt.
</text>
<text id='item-20'>
Die ist mausetot.
</text>
<text id='item-21'>
Ein Bohnengewächs der märchenhaften Gattung vigna hansus magicus.
</text>
<text id='hilfe'>
Das Grab des Azteken ist ein klassisches Textadventure.
Es ist eine Adaption des gleichnamigen Adventures vom C64.
Du bedienst es durch Befehle wie "nimm Schwert" oder "gehe Süd". Die Eingabe ist so flexibel wie möglich gestaltet, so dass
auch ganze Sätze wie "nimm das Schwert" verstanden werden.
Die Liste der möglichen Befehle erhälst du mit "hilfe befehle".
Die Aufgabe gibt dir jemand im Spiel.
</text>
<text id='geist'>
Ich bin der Geist deines Großonkels Henry. Mein ganzes Leben habe ich damit verbracht, das Himmelsgrab der Azteken zu finden, wie zuvor
mein Vater.
Leider erfolglos.
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.
</text>
</texte>
</welt>