49 Commits
0.10 ... master

Author SHA1 Message Date
Olli Graf
b1b4a99dff Item 48 Beschreibung 2022-07-10 16:43:16 +02:00
Olli Graf
183fe11075 letzte Hilfeseiten. 2022-06-30 14:54:40 +02:00
Olli Graf
4a0bfb901d Victorytext 2022-06-21 13:40:29 +02:00
Olli Graf
1b96299edc FileReader
hilfe
2022-06-21 06:17:46 +02:00
Olli Graf
740833541b Henry spricht wieder.
Boxsack ist benutzbar.
2022-06-20 18:00:34 +02:00
Olli Graf
e1bf16aa96 None abgefangen. 2022-06-18 17:25:33 +02:00
Olli Graf
6876dab8df Uhr in der Küche.
unversionierte Dateien
2022-06-18 11:01:26 +02:00
Olli Graf
a986d14fbc fehlende Itembeschreibungen ergänzt. 2022-06-18 10:06:42 +02:00
Olli Graf
2cb7358eca Zuul. 2022-06-15 18:48:13 +02:00
Olli Graf
0240e5f441 Der Diamant wird nach der Maueröffnung aus dem Inventar genommen. 2022-06-14 07:19:21 +02:00
Olli Graf
8bd0897af1 Endgame 2022-06-13 17:56:35 +02:00
Olli Graf
ebdf22f6a6 Diamant und Sockel werden sichtbar. 2022-06-13 14:59:55 +02:00
Olli Graf
7bd3ecaba0 Bis Statuenkopf.
Diamant wird sichtbar.
2022-06-12 16:04:41 +02:00
Olli Graf
0ff17aac13 uto: bis zur Klippe. 2022-06-11 14:08:42 +02:00
Olli Graf
3b848ffb80 Schwimmweste anziehen. 2022-06-10 10:26:41 +02:00
Olli Graf
53579c466b Die Jacke ist nicht mehr verfügbar, wenn der Zwerg sie hat. 2022-06-10 09:51:59 +02:00
Olli Graf
6fb8fc6ecd Schtel und Krug lösen sich auf. 2022-06-10 00:48:03 +02:00
Olli Graf
f10378162d Rückweg von Insel ins Beiboot ins Boot. 2022-06-10 00:29:24 +02:00
Olli Graf
6905936fc3 Loch erreichbar.
Beschreibung abhängig vom Zustand der Fackel
2022-06-09 19:02:15 +02:00
Olli Graf
5efd052927 flexibler Ausgang aus dem Beiboot. 2022-06-06 20:07:21 +02:00
Olli Graf
278cb17675 Die Kabine bewegt sich mit dem Boot mit.
Raum Boot2 ist erreichbar.
2022-06-06 16:53:53 +02:00
Olli Graf
9fce43d330 Alle Räume sind definiert. 2022-06-06 11:50:52 +02:00
Olli Graf
8870050345 Boot ist erreichbar. 2022-06-05 11:41:24 +02:00
Olli Graf
b29774ec31 Hafen ist jetzt zugänglich. 2022-06-05 09:44:42 +02:00
Olli Graf
25cc73ccf9 Jacke -> Zwerg -> Schachtel -> Karte 2022-05-29 16:20:40 +02:00
Olli Graf
9cfbf2e0aa Die Karte ist da. 2022-05-29 14:01:34 +02:00
Olli Graf
e004bfc17e Jacke dupliziert sich beim Werfen nicht mehr. 2022-05-29 08:49:08 +02:00
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
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
50 changed files with 2653 additions and 117 deletions

134
ActionBasics.py Normal file
View File

@@ -0,0 +1,134 @@
import logging
import inspect
class ActionBasics:
def __init__(self,world):
self.world = world
self.alleBootRaeume = [world.RAUM_BOOT, world.RAUM_BOOT2, world.RAUM_BOOT3]
def debug(self, method, text):
logging.debug(f'ActionBasics: {text}')
def ausDemInventar(self,item):
del self.world.inventar[item.id]
self.world.aktuellerRaum.items[item.id] = item
item.raumid = self.world.aktuellerRaum.id
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 wechsleBoot(self,raum):
kabine = self.world.findItemById(self.world.ITEM_KABINE)
raumkabine = self.world.findRaumById(self.world.RAUM_KABINE)
beiboot = self.world.findItemById(self.world.ITEM_BEIBOOT)
if raum.id in self.alleBootRaeume:
raumkabine.ausgaenge[self.world.RAUF] = raum.id
self.moveItemVonRaumNachRaum(kabine,raum)
self.moveItemVonRaumNachRaum(beiboot,raum)
def wechsleRaum(self,raum):
logging.debug(f'wechsle in RaumId: {raum.id}')
if raum.id in self.alleBootRaeume:
logging.debug('wechsle nach anderen Bootraum')
self.wechsleBoot(raum)
elif raum.id == self.world.RAUM_BEIBOOT:
beiboot = self.world.findRaumById(self.world.RAUM_BEIBOOT)
logging.debug(f'Pfad: {self.world.weg}')
bootraum = self.world.findRaumById(self.world.weg[-1])
logging.debug(f'wechsle ins Beiboot bootraum.id= {bootraum.id}')
if(bootraum.id in self.alleBootRaeume):
beiboot.ausgaenge[self.world.RAUF] = bootraum.id
else:
if bootraum.id == self.world.RAUM_INSEL:
beiboot.ausgaenge[self.world.RAUF] = self.world.RAUM_BOOT3
else:
beiboot.ausgaenge[self.world.RAUF] = '-1'
logging.debug(f'Ausgang RAUF im Beiboot ist {beiboot.ausgaenge[self.world.RAUF]}')
beiboot.ausgaenge[self.world.OST] = '-1'
if self.world.weg[-1] == self.world.RAUM_BOOT2:
beiboot.ausgaenge[self.world.OST] = self.world.RAUM_INSEL
self.world.weg.append(raum.id)
self.world.aktuellerRaum = raum
raum.entdeckt = True
def liegtItemInRaum(self,itemid, raum):
return itemid in raum.items
def macheItemSichtbar(self, item):
logging.debug(f'mache sichtbar {item.name} in Raum {item.raumid}')
item.sichtbar = True
def moveItemVonRaumNachInventar(self,item):
logging.debug(f'entferne aus aktuellen Raum {item.name}')
if item.id in self.world.aktuellerRaum.items:
del self.world.aktuellerRaum.items[item.id]
logging.debug(f'ins Inventar {item.name}')
self.insInventar(item)
def moveItemVonRaumNachRaum(self,item, raum):
if item.id in self.world.aktuellerRaum.items:
logging.debug(f'entferne {item.name} aus Raum {self.world.aktuellerRaum.id}')
del self.world.aktuellerRaum.items[item.id]
logging.debug(f'bewege {item.name} nach {raum.id}')
item.raumid = raum.id
raum.items[item.id] = item
def moveItemVonInventarNachRaum(self,item, nachRaumId):
del self.world.inventar[item.id]
logging.debug(f' Item {item.name} nach RaumId {nachRaumId}')
raum = self.world.findRaumById(nachRaumId)
logging.debug(f' Item {item.name} liegt jetzt in Raum {raum.name}')
logging.debug(f'{item.name} liegt im {raum.name}: {self.liegtItemInRaum(item.id, raum)}')
logging.debug(f'{item.name} liegt im {self.world.aktuellerRaum.name}: {self.liegtItemInRaum(item.id, self.world.aktuellerRaum)}')
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):
logging.debug(f'person Von Raum {vonRaumId} nach {nachRaumId}')
vonRaum = self.world.findRaumById(vonRaumId)
nachRaum = self.world.findRaumById(nachRaumId)
if person.id in vonRaum.personen:
del vonRaum.personen[person.id]
nachRaum.personen[person.id] = person
person.raumid = nachRaumId

View File

@@ -1,15 +1,22 @@
import logging # Actionmdul - hier werden die Kommandos ausgeführt und die Spielwelt entsprend aktualisiert.
class ActionModul: import logging
from ActionBasics import ActionBasics
import HilfeModul
class ActionModul(ActionBasics):
def isBlank(self,str): def isBlank(self,str):
if str and len(str.strip()) == 0: logging.debug(f'isBlank(): str=*{str}*')
if str != None and len(str.strip()) == 0:
return True return True
return False return False
def __init__(self, world): def __init__(self, world):
self.world = world super().__init__(world)
self.hilfemodul = HilfeModul.HilfeModul(world)
def warte(self): def warte(self):
print('Du wartest') print('Du wartest')
@@ -30,9 +37,21 @@ 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):
if item == None:
return
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);
@@ -45,41 +64,124 @@ 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)
if schluessel != None: self.vanishItem(schluessel)
if schluessel != None and item.zustand != item.OFFEN:
item.zustand = item.OFFEN item.zustand = item.OFFEN
self.setFehler('Truhe ist jetzt offen') 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: else:
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
self.setFehler('Die Haustür ist geöffnet und führt in den Garten.') self.vanishItem(schluessel)
self.setFehler('Die Haustür ist geöffnet,der Haustürschlüssel löst sich auf.')
self.world.aktuellerRaum.ausgaenge[self.world.SUED] = self.world.RAUM_GARTEN self.world.aktuellerRaum.ausgaenge[self.world.SUED] = self.world.RAUM_GARTEN
else: else:
logging.debug('öffne Haustür kein Haustürschlüssel')
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.findPersonImAktuellenRaumById(self.world.PERSON_STIER)
logging.debug(f'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 steht dir im Weg.')
elif item.id == self.world.ITEM_SCHACHTEL:
karte = self.world.findItemById(self.world.ITEM_KARTE)
logging.debug('Schachtel öffnen')
item.zustand = item.OFFEN
self.macheItemSichtbar(karte)
self.vanishItem(item)
elif item.id == self.world.ITEM_KUEHLSCHRANK:
logging.debug('öffne Kühlschrank')
self.world.printText('zuul')
def isAktuellerRaum(self, raumid):
return self.world.aktuellerRaum.id == raumid
def benutze(self, parsedCommand):
item = self.world.findItemImInventarOderAktuellerRaum(parsedCommand.gegenstand);
if item == None:
self.setFehler('Das sehe ich hier nicht.')
return
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 self.isItem(item,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 self.isItem(item,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.')
elif self.isItem(item, self.world.ITEM_SCHWIMMWESTE):
item.zustand = item.ANGEZOGEN
self.setFehler('Du ziehst die Schwimmweste an.')
elif self.isItem(item,self.world.ITEM_DIAMANT):
if self.isAktuellerRaum(self.world.RAUM_MAUER):
geist = self.world.findPersonById(self.world.PERSON_GEIST)
self.world.printText('graböffnung')
self.world.aktuellerRaum.ausgaenge[self.world.SUED] = self.world.RAUM_GRAB
self.personVonRaumNachRaum(geist, geist.raum.id, self.world.RAUM_GRAB)
self.world.printText('victory')
# self.world.aktuellerRaum.personen[self.world.PERSON_GEIST] = geist
self.ausDemInventar(item)
elif self.isItem(item,self.world.ITEM_BOXSACK):
self.schlage(parsedCommand)
else:
self.setFehler('Nichts passiert.')
def about(self):
self.world.printAbout()
def baueBruecke(self):
bach = self.world.sucheRaum(self.world.RAUM_BACH)
bach.ausgaenge[self.world.OST] = self.world.RAUM_TEICH
def verliere(self,parsedCommand): def verliere(self,parsedCommand):
item = self.world.findItemImInventar(parsedCommand.gegenstand); item = self.world.findItemImInventar(parsedCommand.gegenstand);
logging.debug(f'verliere Item {item}')
if item != None: 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: 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):
@@ -87,7 +189,7 @@ class ActionModul:
if item != None: if item != None:
logging.debug('stelle() item.id=' + str(item.id)) 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.world.aktuellerRaum.ausgaenge[self.world.NORD] = '5'
self.verliere(parsedCommand) self.verliere(parsedCommand)
self.world.printText('1') self.world.printText('1')
@@ -99,38 +201,156 @@ class ActionModul:
logging.debug(f'raumId {raum.id}') logging.debug(f'raumId {raum.id}')
logging.debug(f'untersucheAktuellenRaum() {parsedCommand.gegenstand} in {self.world.aktuellerRaum.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}') logging.debug(f'untersuche aktuellen Raum {raum.name}')
if raum.id == '5': if self.isAktuellerRaum(self.world.RAUM_TUNNEL):
#Schlüssel im Keller sichtbar machen self.world.printText(f'raum-{self.world.RAUM_TUNNEL}')
logging.debug('mache Schlüssel sichtbar') self.world.aktuellerRaum.ausgaenge[self.world.OST] = self.world.RAUM_HAFEN
self.setFehler('Auf dem Boden findest du einen kleinen Schlüssel.') elif self.isAktuellerRaum(self.world.RAUM_KOPF):
schluessel = self.world.findRaumItemById(self.world.ITEM_KLEINER_SCHLUESSEL) diamant = self.world.findItemById(self.world.ITEM_DIAMANT)
schluessel.sichtbar = True
self.macheItemSichtbar(diamant)
def untersuchePerson(self,person):
if person.id == self.world.PERSON_ZWERG:
self.world.printText(f'npc-{person.id}-beschr')
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 == None:
self.setFehler('Das sehe ich hier nicht.')
return
if item.id == self.world.ITEM_BOXSACK:
self.setFehler('Der Boxsack sagt: Hmm, hmm?')
def leere(self, parsedCommand):
item = self.world.findItemImInventar(parsedCommand.gegenstand)
if item == None:
self.setFehler('Das trägst du nicht bei dir.')
return
if item.id == self.world.ITEM_KRUG:
if self.isAktuellerRaum(self.world.RAUM_BRACHLAND):
if item.zustand == item.VOLL:
ranke = self.world.findItemById(self.world.ITEM_BOHNENRANKE)
fisch = self.world.findItemImInventarById(self.world.ITEM_FISCH)
krug = self.world.findItemImInventarById(self.world.ITEM_KRUG)
logging.debug(f'Fisch ist {fisch}')
if fisch != None:
logging.debug('Krug leeren löst den Fisch auf.')
self.vanishItem(fisch)
self.setFehler('Der Fisch löst sich auf.')
if ranke.zustand < ranke.GROSS:
ranke.zustand = ranke.zustand +1
meldung = 'Die Bohnenranke wächst.'
if fisch != None:
meldung = meldung + ' Der Fisch löst sich auf.'
self.setFehler(meldung)
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.Der Krug löst sich auf')
self.vanishItem(krug)
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):
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}')
if parsedCommand.gegenstand == None: if parsedCommand.gegenstand == None:
self.untersucheAktuellenRaum self.untersucheAktuellenRaum(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 == '4': logging.debug(f'item.id = {item.id}')
glas = self.world.findRaumItemById(self.world.ITEM_GLAS) if item.id == self.world.ITEM_PFLANZE:
logging.debug(f'mache Gegenstand {glas.name} sichtbar') krug = self.world.findRaumItemById(self.world.ITEM_KRUG)
glas.sichtbar = True 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: elif item.id == self.world.ITEM_BETT:
# Falltür sichtbar machen # Falltür sichtbar machen
self.world.aktuellerRaum.ausgaenge[self.world.RUNTER] = self.world.RAUM_KELLER 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.') self.setFehler('Im Boden unter dem Bett findest du eine Falltür, die nach unten führt.')
elif item.id == self.world.ITEM_NACHTSCHRANK: elif item.id == self.world.ITEM_NACHTSCHRANK:
self.setFehler('In der Schublade findest du einen Schlüssel') self.setFehler('In der Schublade findest du einen Schlüssel')
schluessel = self.world.findRaumItemById(self.world.ITEM_HAUSTUERSCHLUESSEL) schluessel = self.world.findRaumItemById(self.world.ITEM_HAUSTUERSCHLUESSEL)
schluessel.sichtbar = True 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)
elif self.isItem(item,self.world.ITEM_KARTE):
self.world.printKarte()
elif self.isItem(item, self.world.ITEM_KOPF):
self.zeigeItemBeschreibung(item)
diamant = self.world.findItemById(self.world.ITEM_DIAMANT)
self.macheItemSichtbar(diamant)
elif self.isItem(item, self.world.ITEM_MAUER):
self.setFehler('In der Mauer wird ein Sockel sichtbar.')
sockel = self.world.findItemById(self.world.ITEM_SOCKEL)
self.macheItemSichtbar(sockel)
else: else:
self.zeigeItemBeschreibung(item)
else:
person = self.world.findPersonImAktuellenRaum(self.world.PERSON_ZWERG)
logging.debug('Kein Item gefunden, suche nach Raum') logging.debug('Kein Item gefunden, suche nach Raum')
self.untersucheAktuellenRaum(parsedCommand) self.untersucheAktuellenRaum(parsedCommand)
@@ -138,15 +358,106 @@ class ActionModul:
item = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand) item = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand)
if item != None: if item != None:
#alter Code! pass
if item.id == 8:
self.world.stdscr.addstr('Du ziehst den Hebel und es passiert.... nichts!')
else: else:
self.setFehler('Das sehe ich hier nicht.') self.setFehler('Das sehe ich hier nicht.')
def fange(self, parsedCommand):
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)
item.zustand = item.HAENGEND
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.isItemAndAktRaum(item, self.world.ITEM_JACKE, 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')
logging.debug(f'1:Jacke im Raum {self.liegtItemInRaum(jacke.id, self.world.aktuellerRaum)}')
self.personVonRaumNachRaum(stier,self.world.aktuellerRaum.id, self.world.RAUM_FELD)
logging.debug(f'2:Jacke im Raum {self.liegtItemInRaum(jacke.id, self.world.aktuellerRaum)}')
self.moveItemVonInventarNachRaum(jacke, self.world.RAUM_FELD)
logging.debug(f'3:Jacke im Raum {self.liegtItemInRaum(jacke.id, self.world.aktuellerRaum)}')
else:
self.setFehler('Die trägst du nicht bei dir.')
else:
logging.debug(f'verliere Jacke (kein Stier)')
self.verliere(parsedCommand)
else:
logging.debug(f'verliere Jacke (falscher Raum, nicht Jacke)')
self.verliere(parsedCommand)
def klettere(self, parsedCommand):
item = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand)
geklettert = False
if item == None:
self.setFehler('Das sehe ich hier nicht')
return
if item.id == self.world.ITEM_LEITER:
if self.isAktuellerRaum(self.world.RAUM_ESSZIMMER):
logging.debug(f'aktuellerRaum ist {self.world.aktuellerRaum.id}')
self.rauf()
geklettert = True
elif self.isAktuellerRaum(self.world.RAUM_BRACHLAND):
ranke = self.findItemImInventarOderAktuellerRaum(self.world.ITEM_BOHNENRANKE)
if ranke.zustand == Gegenstand.GROSS:
self.ac.rauf()
geklettert = True
else:
self.setFehler('Die Bohnenranke ist zu klein, um daran hoch zu klettern.')
elif item.id == self.world.ITEM_SEIL:
logging.debug(f'klettere am Seil: {item.zustand}')
if item.zustand == item.HAENGEND:
self.rauf()
geklettert = True
else:
self.setFehler('So kannst nicht daran klettern.')
if not geklettert:
self.setFehler('Klettern ist nicht möglich.')
def nimm(self,parsedCommand): def nimm(self,parsedCommand):
logging.debug(f'start nimm() {parsedCommand.gegenstand}')
item = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand) item = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand)
logging.debug(f'nimm(): item == {item.name}')
if item != None: if item != None:
if item.imobil: if item.imobil:
text = self.world.msg[item.pickupmsg] text = self.world.msg[item.pickupmsg]
@@ -157,21 +468,170 @@ class ActionModul:
text = self.world.msg[item.pickupmsg] text = self.world.msg[item.pickupmsg]
self.setFehler(text) self.setFehler(text)
else: else:
del self.world.aktuellerRaum.items[item.id]
self.world.inventar[item.id] = item 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:
krug.zustand = krug.VOLL
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.moveItemVonRaumNachInventar(item)
else: else:
self.setFehler("diesen Gegenstand sehe ich hier nicht.") self.setFehler("diesen Gegenstand sehe ich hier nicht.")
def gehe(self):
richtung = self.world.parsedCommand.gegenstand def spring(self,parsedCommand):
if self.isAktuellerRaum(self.world.RAUM_KLIPPE):
weste = self.world.findItemImInventarById(self.world.ITEM_SCHWIMMWESTE)
logging.debug(f'weste={weste.zustand}')
if weste != None and weste.zustand == weste.ANGEZOGEN:
imwasser = self.world.findRaumById(self.world.RAUM_WASSER)
self.wechsleRaum(imwasser)
else:
self.setFehler('Das Wasser ist viel zu tief, du würdest ertrinken.')
else:
self.setFehler('Hieh-Hüpf')
def sprich(self,parsedCommand):
person = self.world.findPersonImAktuellenRaum(parsedCommand.gegenstand)
if person != None:
self.world.printText(f'npc-{person.id}')
else:
self.setFehler(f'{parsedCommand.gegenstand} ist nicht im Raum.')
def hilfe(self,parsedCommand):
self.hilfemodul.hilfe(parsedCommand.gegenstand)
def geheNachItem(self,parsedCommand):
item = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand)
if item == None:
self.setFehler('Das gibts hier nicht.')
return
logging.debug(f'ItemId: {item.id}')
if self.isItemAndAktRaum(item, self.world.ITEM_LEITER, self.world.RAUM_ESSZIMMER):
self.rauf()
elif self.isItemAndAktRaum(item, self.world.ITEM_BOOT, self.world.RAUM_HAFEN):
boot = self.world.sucheRaum(self.world.RAUM_BOOT)
self.wechsleRaum(boot)
elif self.isItemAndAktRaum(item, self.world.ITEM_LOCH, self.world.RAUM_INSEL):
self.runter()
elif self.isItem(item,self.world.ITEM_KABINE):
logging.debug(f'gehe in Kabine')
raumid = self.world.aktuellerRaum.id
kabine = self.world.sucheRaum(self.world.RAUM_KABINE)
kabine.ausgaenge[self.world.RAUF] = raumid
self.wechsleRaum(kabine)
elif self.isItem(item, self.world.ITEM_BEIBOOT):
beiboot = self.world.findRaumById(self.world.RAUM_BEIBOOT)
self.wechsleRaum(beiboot)
else:
self.setFehler('Das gibt\'s hier nicht.')
def gehe(self,parsedCommand):
richtung = parsedCommand.gegenstand.lower()
logging.debug("gehe nach " + richtung) logging.debug("gehe nach " + richtung)
if richtung == 'nord': if richtung == 'nord':
self.nord() self.geheNach(richtung)
elif richtung == 'süd':
self.geheNach(richtung)
elif richtung == 'west':
self.geheNach(richtung)
elif richtung == 'ost':
self.geheNach(richtung)
elif richtung == 'rauf':
self.rauf()
self.geheNach(richtung)
elif richtung == 'runter':
self.runter()
else:
self.geheNachItem(parsedCommand)
def gib(self, parsedCommand):
item = self.world.findItemImInventar(parsedCommand.gegenstand)
if item == None:
self.setFehler('Das besitzt du nicht')
return
if item.id == self.world.ITEM_JACKE:
zwerg = self.world.findPersonImAktuellenRaumById(self.world.PERSON_ZWERG)
logging.debug(f'gib() Zwerg {zwerg}')
if zwerg != None:
schachtel = self.world.findItemById(self.world.ITEM_SCHACHTEL)
self.setFehler('Der Zwerg zieht sich die Jacke an, lächelt dankbar und verschwindet.')
del self.world.aktuellerRaum.personen[zwerg.id]
self.macheItemSichtbar(schachtel)
self.vanishItem(item)
def toggleFackel(self,item):
weste = self.world.findItemById(self.world.ITEM_SCHWIMMWESTE)
if item.zustand == item.GELOESCHT:
item.zustand = item.ENTZUENDED
weste.sichtbar = True
self.setFehler('Die Fackel brennt jetzt.')
else:
item.zustand = item.GELOESCHT
if self.world.findItemImInventarById(self.world.ITEM_SCHWIMMWESTE) != None:
weste.sichtbar = False
self.setFehler('Du löscht die Fackel.')
def entzuende(self,parsedCommand):
logging.debug(f'entzünde {parsedCommand.gegenstand}')
item = self.world.findItemImInventar(parsedCommand.gegenstand)
if item == None:
self.setFehler('Das besitzt du nicht.')
return
logging.debug(f'item={item}')
if self.isItem(item, self.world.ITEM_FACKEL):
self.toggleFackel(item)
def loesche(self,parsedCommand):
item = self.world.findItemImInventar(parsedCommand.gegenstand)
if item == None:
self.setFehler('Das besitzt du nicht.')
if self.isItem(item, self.world.ITEM_FACKEL):
self.toggleFackel(item)
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]:
@@ -179,12 +639,13 @@ class ActionModul:
logging.debug(f'gefundener Ausgang: {ausgang}') logging.debug(f'gefundener Ausgang: {ausgang}')
if ausgang != None: if ausgang != None:
raum = self.world.sucheRaum(ausgang) raum = self.world.sucheRaum(ausgang)
else: else:
logging.warn('Keine AusgandId gefunde') logging.warn('Keine AusgandId gefunde')
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!")
@@ -209,10 +670,6 @@ class ActionModul:
def runter(self): def runter(self):
self.geheNach(self.world.RUNTER) self.geheNach(self.world.RUNTER)
def about(self):
print("Tomb Version " + self.world.VERSION)
self.world.waitForCR
def raumaction(self): def raumaction(self):
raumid = self.world.aktuellerRaum.id raumid = self.world.aktuellerRaum.id

13
BewegungsModul.py Normal file
View File

@@ -0,0 +1,13 @@
# Bewegungsmodul - Steuert die Bewegungen aller NPC.
import logging
class BewegungsModul:
def __init__(self, world):
self.world = world
def bewegeNPCS(self):
skip

9
ConfigError.py Normal file
View File

@@ -0,0 +1,9 @@
class ConfigError(Exception):
def __init_(self,message):
self.message = message
super().__init(message)
def __str__(self):
return self.message

29
FileReader.py Normal file
View File

@@ -0,0 +1,29 @@
class FileReader() :
__zeilen__ = []
__dateiname__ = ""
def __init__(self,dateiname):
self.__zeilen__ = []
self.__dateiname__ = dateiname
def lines(self):
with open(self.__dateiname__,"r" ) as file:
for zeile in file:
self.__zeilen__.append(zeile.strip())
return self.__zeilen__
def __str__(self):
return str(self.__zeilen__)
class CsvReader(FileReader):
def __init__(self,dateiname):
super().__init__(dateiname)
def lines(self):
zeilen = super().lines()
liste = []
return [zeile.split() for zeile in zeilen]
# for zeile in zeilen:
# liste.append(zeile.split(","))
# return liste

77
HilfeModul.py Normal file
View File

@@ -0,0 +1,77 @@
import logging
import FileReader
from os.path import exists
class HilfeModul():
def isBlank(self,str):
if str != None and len(str.strip()) == 0:
return True
return False
def __init__(self, world):
self.world = world
self.check()
def readTxt(self, datei):
logging.debug(f'öffne Hilfedatei {datei}')
reader = FileReader.FileReader(datei)
lines = reader.lines()
reader = None
# reader.close()
return lines
def check(self):
for id in self.world.befehle:
befehl = self.world.befehle[id]
helptxt = self.baueHilfedatei(befehl.key)
logging.debug(f'suche Hilfedatei {helptxt}')
if not exists(helptxt):
logging.warn(f'Hilfedatei {helptxt} existiert nicht')
def hilfe(self, command):
generalHelp = True
if not self.isBlank(command):
helptxt = self.findHilfetext(command)
logging.debug(f'Hilfetext: {helptxt}')
if helptxt != None:
lines = self.readTxt(helptxt)
logging.debug(f'lines: {lines}')
self.world.printHilfe(lines)
generalHelp = False
if generalHelp:
if command == 'befehle':
self.world.printBefehle()
else:
self.world.printText('hilfe')
def baueHilfedatei(self, key):
return f'ascii/hilfe/cmd-{key}.txt'
def findHilfetext(self, command):
logging.debug(f'suche Hilfetext zu {command}')
for cmdid in range(0,len(self.world.befehle)):
if str(cmdid) in self.world.befehle:
befehl = self.world.befehle[str(cmdid)]
logging.debug(f'cmdid= {cmdid}')
logging.debug(f'vergleiche {befehl.name.lower()} mit {command.lower()}')
if befehl.name.lower() == command.lower():
logging.debug(f'gefundener Befehl: {befehl.name}')
return self.baueHilfedatei(befehl.key)
return None

455
TestModule.py Normal file
View File

@@ -0,0 +1,455 @@
# Testdurchläufe
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):
logging.debug('===== Beginn Testmodul Truhe =====')
#Auf den Dachboden
self.ac.rauf()
self.schrittzaehler += 1
pcmd = self.parseInput('nimm Truhe')
self.ac.nimm(pcmd)
self.schrittzaehler += 1
#Zurück ins Wohnzimmer
self.ac.runter()
self.schrittzaehler += 1
#In den Flur
self.ac.sued()
self.schrittzaehler += 1
# Ins Schlafzimmer
self.ac.west()
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 += 1
# In den Keller
self.ac.runter()
self.schrittzaehler += 1
pcmd = self.parseInput('nimm Jacke')
self.ac.nimm(pcmd)
self.schrittzaehler += 1
pcmd = self.parseInput('benutze Jacke')
self.ac.benutze(pcmd)
self.schrittzaehler += 1
pcmd = self.parseInput('öffne Truhe')
self.ac.oeffne(pcmd)
self.schrittzaehler += 1
pcmd = self.parseInput('nimm Schwert')
self.ac.nimm(pcmd)
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()
logging.debug('===== Beginn Testmodul Teich =====')
#Rauf ins Schlafzimmer
self.ac.rauf()
self.schrittzaehler += 1
pcmd = self.parseInput('untersuche Nachtschrank')
self.ac.untersuche(pcmd)
self.schrittzaehler += 1
pcmd = self.parseInput('nimm Haustürschlüssel')
self.ac.nimm(pcmd)
self.schrittzaehler += 1
#In den Flur
self.ac.ost()
self.schrittzaehler += 1
pcmd = self.parseInput('untersuche Pflanze')
self.ac.untersuche(pcmd)
self.schrittzaehler += 1
pcmd = self.parseInput('nimm Krug')
logging.debug(f'Inventar nach nimm Krug {self.world.inventar}')
self.ac.nimm(pcmd)
self.schrittzaehler += 1
pcmd = self.parseInput('öffne Haustür')
self.ac.oeffne(pcmd)
self.schrittzaehler += 1
# nach draussen
self.ac.sued()
self.schrittzaehler += 1
# aufs Dach
self.ac.rauf()
self.schrittzaehler += 1
pcmd = self.parseInput('nimm Planke')
self.ac.nimm(pcmd)
self.schrittzaehler += 1
#Wieder runter
self.ac.runter()
self.schrittzaehler += 1
#Zum Bach
self.ac.sued()
self.schrittzaehler += 1
pcmd = self.parseInput('verliere Planke')
self.ac.verliere(pcmd)
self.schrittzaehler += 1
#Zum Teich
self.ac.ost()
pcmd = self.parseInput('nimm Fisch')
self.ac.nimm(pcmd)
self.schrittzaehler += 1
self.world.schrittzaehler = self.schrittzaehler
def testStier(self):
self.testTeich()
logging.debug('===== Beginn Testmodul Stier =====')
# 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
pcmd = self.parseInput('wirf Jacke')
self.ac.wirf(pcmd)
self.schrittzaehler += 1
#Feld
self.ac.ost()
self.schrittzaehler += 1
pcmd = self.parseInput('nimm Jacke')
self.ac.nimm(pcmd)
self.schrittzaehler += 1
# Auf die Wiese
self.ac.west()
self.schrittzaehler += 1
pcmd = self.parseInput('öffne Gatter')
self.ac.oeffne(pcmd)
self.schrittzaehler += 1
def testRanke(self):
self.testStier()
logging.debug('===== Beginn Testmodul Ranke =====')
# 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
def testHafen(self):
self.testBaumhaus()
pcmd = self.parseInput('gib Jacke an Zwerg')
self.ac.gib(pcmd)
self.schrittzaehler += 1
pcmd = self.parseInput('nimm Schachtel')
self.ac.nimm(pcmd)
self.schrittzaehler += 1
pcmd = self.parseInput('öffne Schachtel')
self.ac.oeffne(pcmd)
self.schrittzaehler += 1
pcmd = self.parseInput('nimm Karte')
self.ac.nimm(pcmd)
self.schrittzaehler += 1
#Baum
self.ac.runter()
#Tal
self.ac.nord()
#Tunnel
self.ac.ost()
self.schrittzaehler += 1
pcmd = self.parseInput('untersuche')
self.ac.untersuche(pcmd)
self.schrittzaehler += 1
#Hafen
self.ac.ost()
self.schrittzaehler += 1
def testInsel(self):
self.testHafen()
#Boot
pcmd = self.parseInput('gehe Boot')
self.ac.gehe(pcmd)
self.schrittzaehler += 1
#Kabine
pcmd = self.parseInput('gehe Kabine')
self.ac.gehe(pcmd)
self.schrittzaehler += 1
pcmd = self.parseInput('nimm Fackel')
self.ac.nimm(pcmd)
self.schrittzaehler += 1
#Boot
self.ac.rauf()
self.schrittzaehler += 1
# vor Insel
self.ac.sued()
self.schrittzaehler += 1
#Beiboot
pcmd = self.parseInput('gehe Beiboot')
self.ac.gehe(pcmd)
self.schrittzaehler += 1
# Insel
self.ac.ost()
self.schrittzaehler += 1
def testKlippe(self):
self.testInsel()
logging.debug('===== Beginn Testmodul Klippe =====')
pcmd = self.parseInput('entzünde Fackel')
self.ac.entzuende(pcmd)
self.schrittzaehler += 1
#Loch
self.ac.runter()
self.schrittzaehler += 1
pcmd = self.parseInput('nimm Schwimmweste')
self.ac.nimm(pcmd)
self.schrittzaehler += 1
# Insel
self.ac.rauf()
self.schrittzaehler += 1
# Palme
self.ac.rauf()
self.schrittzaehler += 1
# Insel
self.ac.runter()
self.schrittzaehler += 1
#Beiboot
self.ac.ost()
self.schrittzaehler += 1
#Boot
self.ac.rauf()
self.schrittzaehler += 1
#klippe
self.ac.nord()
self.schrittzaehler += 1
pcmd = self.parseInput('benutze Schwimmweste')
self.ac.benutze(pcmd)
self.schrittzaehler += 1
#Wasser
pcmd = self.parseInput('spring')
self.ac.spring(pcmd)
self.schrittzaehler += 1
def testStatue(self):
self.testKlippe()
#Strand
self.ac.sued()
self.schrittzaehler += 1
#Wald
self.ac.ost()
self.schrittzaehler += 1
#Statue
self.ac.nord()
self.schrittzaehler += 1
#Kopf
self.ac.rauf()
self.schrittzaehler += 1
pcmd = self.parseInput('untersuche Kopf')
self.ac.untersuche(pcmd)
self.schrittzaehler += 1
pcmd = self.parseInput('nimm Diamant')
self.ac.nimm(pcmd)
self.schrittzaehler += 1
#Statue
self.ac.runter()
self.schrittzaehler += 1
def testMauer(self):
self.testStatue()
# Mauer
self.ac.ost()
pcmd = self.parseInput('untersuche Mauer')
self.ac.untersuche(pcmd)
pcmd = self.parseInput('benutze Diamant')
self.ac.benutze(pcmd)
#Grab
self.ac.sued()

308
World.py
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
@@ -12,32 +15,142 @@ class World:
def clearScreen(self): def clearScreen(self):
self.stdscr.clear() self.stdscr.clear()
def printAbout(self):
s = self.stdscr
self.clearScreen()
s.addstr(1,0,'Das Grab des Azteken', curses.color_pair(2))
s.addstr(2,0,f'Version {self.VERSION}')
self.waitForCR()
def printText(self,textid): def printText(self,textid):
self.clearScreen() self.clearScreen()
self.stdscr.addstr(1,0,self.texte[textid].name) self.stdscr.addstr(1,0,self.texte[textid].name)
self.waitForCR() self.waitForCR()
self.printRaum() self.printRaum()
def printHilfe(self,lines):
self.clearScreen()
s = self.stdscr
s.addstr(1,0, lines[0])
s.addstr(3,0, lines[2], curses.color_pair(2)) # Befehl
s.addstr(4,0, lines[3]) #Parameter
s.addstr(5,0, lines[4]) # siehe auch
s.addstr(8,0, lines[7]) #Text 1
s.addstr(9,0, lines[8]) #Text 2
if len(lines) == 10 :
s.addstr(10,0, lines[9]) #Text 3
self.waitForCR()
def printKarte(self):
self.clearScreen()
s = self.stdscr
LAND=curses.color_pair( 5)
WASSER=curses.color_pair(4)
s.addstr(1,0,' ',LAND)
s.addstr(1,17,'H', WASSER)
s.addstr(1,18,' ', WASSER)
s.addstr(1,51,'N ', LAND)
s.addstr(2,0,' ',LAND)
s.addstr(2,14,' ', WASSER)
s.addstr(2,48,' W+O ', LAND)
s.addstr(3,0,'X(Baum) ', LAND)
s.addstr(3,10,' ',WASSER)
s.addstr(3,46,' S ', LAND)
s.addstr(4,0,' ', LAND)
s.addstr(4,10,' ',WASSER)
s.addstr(4,45,' ',LAND)
s.addstr(5,0,' ', LAND)
s.addstr(5,7,' ',WASSER)
s.addstr(5,45,' ',LAND)
s.addstr(6,0,' ', LAND)
s.addstr(6,6,' ',WASSER)
s.addstr(6,45,' ',LAND)
s.addstr(7,0,' ', LAND)
s.addstr(7,6,' ',WASSER)
s.addstr(7,44,' ',LAND)
s.addstr(8,0,' ', LAND)
s.addstr(8,6,' ',WASSER)
s.addstr(8,44,' ',LAND)
s.addstr(9,0,' ', LAND)
s.addstr(9,6,' großer ',WASSER)
s.addstr(9,44,' ',LAND)
s.addstr(10,0,' ', LAND)
s.addstr(10,6,' See ',WASSER)
s.addstr(10,44,' ',LAND)
s.addstr(11,0,' ',WASSER)
s.addstr(11,43,' ',LAND)
s.addstr(12,0,' ',WASSER)
s.addstr(12,17,' ', LAND)
s.addstr(12,18,' ',WASSER)
s.addstr(12,41,' o ',LAND)
s.addstr(13,0,' ',WASSER)
s.addstr(13,39,' (Grab) ',LAND)
self.waitForCR()
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): def waitForCR(self):
self.stdscr.addstr(0,0,'Taste für Weiter',curses.color_pair(1)) self.stdscr.addstr(0,0,'Taste für Weiter',curses.color_pair(1))
self.stdscr.getch() self.stdscr.getch()
def labelsInventar(self):
labels =[]
for itemid in self.inventar:
item = self.inventar[itemid]
labels.append(item.name)
return labels
def fortschritt(self):
anz_raeume, anz_entdeckt = self.zaehleRaeume()
progress = round((anz_entdeckt/anz_raeume) *100,2)
logging.debug(f'anz_raeume={anz_raeume}, entdeckt={anz_entdeckt}, progress={progress}')
return progress
def printRaum(self): def printRaum(self):
raum = self.aktuellerRaum raum = self.aktuellerRaum
beschreibung = self.aktuellerRaum.beschreibung
if self.aktuellerRaum.id == self.RAUM_LOCH:
fackel = self.findItemImInventarById(self.ITEM_FACKEL)
logging.debug(f'fackel={fackel}')
if fackel != None:
textid=f'raum-{self.RAUM_LOCH}-{fackel.zustand}'
beschreibung = self.texte[textid].name
self.clearScreen() self.clearScreen()
if self.fehler != None and self.fehler != '': if self.fehler != None and self.fehler != '':
self.stdscr.addstr(self.fehler,curses.color_pair(1)) self.stdscr.addstr(self.fehler,curses.color_pair(1))
self.stdscr.addstr(3,0,'aktueller Raum: ' + raum.name,curses.color_pair(3)) self.stdscr.addstr(3,0,'aktueller Raum: ' + raum.name,curses.color_pair(3))
self.stdscr.addstr(4,0,raum.beschreibung) self.stdscr.addstr(4,0,beschreibung)
self.stdscr.addstr(7,0,'Gegenstände: ' + str(raum.labelsGegenstaende()),curses.color_pair(2)) 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 aus = raum.ausgaenge
self.stdscr.addstr(9,0,'mögliche Richtungen: ') self.stdscr.addstr(10,0,'mögliche Richtungen: ')
r = [] r = []
if aus[self.NORD] != '-1': if aus[self.NORD] != '-1':
r.append('Norden') r.append('Norden')
@@ -54,6 +167,9 @@ class World:
richtungen ='' richtungen =''
ixri = 0 ixri = 0
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:')
@@ -63,18 +179,24 @@ class World:
if ixri +1 < len(r): if ixri +1 < len(r):
richtungen = richtungen + ', ' richtungen = richtungen + ', '
ixri = ixri +1 ixri = ixri +1
self.stdscr.addstr(9,22,richtungen) self.stdscr.addstr(10,22,richtungen)
self.stdscr.refresh() self.stdscr.refresh()
win.refresh() win.refresh()
def sucheRaum(self,id): def sucheRaum(self,id):
for raumid in self.raumliste: for raumid in self.raumliste:
raum = self.raumliste[raumid] raum = self.raumliste[raumid]
# logging.debug(f'{raumid} - {raum.id}')
if raum.id == id: if raum.id == id:
return raum return raum
return None return None
def sucheRaumName(self,name): def sucheRaumName(self,name):
if name == None:
return self.aktuellerRaum
for raumid in self.raumliste: for raumid in self.raumliste:
raum = self.raumliste[raumid] raum = self.raumliste[raumid]
if raum.name.lower() == name.lower(): if raum.name.lower() == name.lower():
@@ -89,17 +211,37 @@ class World:
return item 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 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
for itemid in raum.items: for itemid in raum.items:
item = raum.items[itemid] item = raum.items[itemid]
logging.debug('raum.id=' + raum.id) logging.debug(f'raum.id={raum.id}')
logging.debug('item.raumid=' + item.raumid) logging.debug(f'item.raumid={item.raumid}')
logging.debug('findItemInAktuellerRaum() ' + itemname + '-' + item.name) logging.debug(f'findItemInAktuellerRaum() {itemname} - {item.name}')
if item.raumid == raum.id and item.name.lower() == itemname.lower(): if item.raumid == raum.id and item.name.lower() == itemname.lower():
logging.debug(f'return {item.name}')
return item return item
logging.debug(f'Item {itemname} nicht im aktuellen Raum gefunden')
return None return None
def findRaumItemById(self,id): def findRaumItemById(self,id):
@@ -113,8 +255,42 @@ class World:
return None 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 findPersonById(self,persid):
for id in self.personen:
person = self.personen[id]
if person.id == persid:
return person
return None
def findPersonImAktuellenRaumById(self, personid):
raum = self.aktuellerRaum
for persid in raum.personen:
person = raum.personen[persid]
logging.debug(f'{person.id} - {personid}')
if person.id == personid:
return person
return None
def findItemImInventar(self,itemname): def findItemImInventar(self,itemname):
for itemid in self.inventar: for itemid in self.inventar:
if self.inventar[itemid].name.lower() == itemname.lower(): if self.inventar[itemid].name.lower() == itemname.lower():
return self.inventar[itemid] return self.inventar[itemid]
@@ -130,6 +306,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'{befehl} - {name}')
if name == befehl: if name == befehl:
return id return id
return None return None
@@ -150,11 +327,14 @@ class World:
def parseInput(self,input): def parseInput(self,input):
logging.debug(f'parseInput() {input}')
words = input.split(' ') words = input.split(' ')
parsedCommand = ParsedCommand.ParsedCommand() parsedCommand = ParsedCommand.ParsedCommand()
words = self.removeSortouts(words,parsedCommand) words = self.removeSortouts(words,parsedCommand)
befehlid = self.ermittleBefehlId(words[0]) befehlid = self.ermittleBefehlId(words[0])
logging.debug(f'parseInput() befehlid {befehlid}')
if befehlid != None: if befehlid != None:
befehl = self.befehle[befehlid] befehl = self.befehle[befehlid]
parsedCommand.commandid = befehl.id parsedCommand.commandid = befehl.id
@@ -167,7 +347,44 @@ 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 findPrevRaumId(self):
return self.weg[-1]
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): def __init__(self):
self.schrittzaehler = 0
self.raumliste = {} self.raumliste = {}
self.msg = {} self.msg = {}
self.personen = {} self.personen = {}
@@ -179,6 +396,8 @@ class World:
self.objekte = {} self.objekte = {}
self.sortouts = [] self.sortouts = []
self.texte = {} self.texte = {}
self.weg = []
self.vorraum = '-1'
self.aktuellerRaum = None self.aktuellerRaum = None
self.parsedCommand = None self.parsedCommand = None
self.NOEXIT = '-1' self.NOEXIT = '-1'
@@ -188,13 +407,15 @@ class World:
self.WEST = '3' self.WEST = '3'
self.RAUF = '4' self.RAUF = '4'
self.RUNTER = '5' self.RUNTER = '5'
self.VERSION = '0.5'
self.VERSION = '0.91'
self.ITEM_TISCH = '1' self.ITEM_TISCH = '1'
self.ITEM_LEITER = '2' self.ITEM_LEITER = '2'
self.ITEM_TRUHE = '3' self.ITEM_TRUHE = '3'
self.ITEM_PFLANZE = '4' self.ITEM_PFLANZE = '4'
self.ITEM_HAUSTUER = '5' self.ITEM_HAUSTUER = '5'
self.ITEM_GLAS = '6' self.ITEM_KRUG = '6'
self.ITEM_BETT = '7' self.ITEM_BETT = '7'
self.ITEM_NACHTSCHRANK = '8' self.ITEM_NACHTSCHRANK = '8'
self.ITEM_KLEINER_SCHLUESSEL = '9' self.ITEM_KLEINER_SCHLUESSEL = '9'
@@ -203,9 +424,33 @@ class World:
self.ITEM_SEIL = '12' self.ITEM_SEIL = '12'
self.ITEM_HAUSTUERSCHLUESSEL = '13' self.ITEM_HAUSTUERSCHLUESSEL = '13'
self.ITEM_RANKGITTER = '14' self.ITEM_RANKGITTER = '14'
self.ITEM_PLANKE = '15'
self.ITEM_TEICH = '16'
self.ITEM_FISCH = '17'
self.ITEM_BOXSACK = '19'
self.ITEM_MAUS = '20'
self.ITEM_BOHNENRANKE = '21'
self.ITEM_ELEFANT = '22'
self.ITEM_GATTER = '25'
self.ITEM_SCHACHTEL = '26'
self.ITEM_KARTE = '27'
self.ITEM_BOOT = '28'
self.ITEM_FACKEL = '29'
self.ITEM_SCHWIMMWESTE = '30'
self.ITEM_KABINE = '31'
self.ITEM_BEIBOOT = '32'
self.ITEM_DIAMANT = '38'
self.ITEM_PALME = '40'
self.ITEM_SOCKEL = '41'
self.ITEM_KOPF = '42'
self.ITEM_MAUER = '43'
self.ITEM_LOCH = '44'
self.ITEM_PLAKETTE = '45'
self.ITEM_KUEHLSCHRANK = '46'
# Räume # Räume
self.RAUM_UNDEF = '-1'
self.RAUM_ESSZIMMER = '1' self.RAUM_ESSZIMMER = '1'
self.RAUM_DACHBODEN = '2' self.RAUM_DACHBODEN = '2'
self.RAUM_FLUR = '3' self.RAUM_FLUR = '3'
@@ -213,9 +458,54 @@ class World:
self.RAUM_KELLER = '5' self.RAUM_KELLER = '5'
self.RAUM_GARTEN = '6' self.RAUM_GARTEN = '6'
self.RAUM_DACH = '7' 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'
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'
self.RAUM_BOOT = '25'
self.RAUM_KABINE = '26'
self.RAUM_BOOT2 = '27'
self.RAUM_BEIBOOT = '28'
self.RAUM_INSEL = '30'
self.RAUM_LOCH = '31'
self.RAUM_BOOT3 = '32'
self.RAUM_KLIPPE = '33'
self.RAUM_WASSER = '34'
self.RAUM_STRAND = '35'
self.RAUM_WALD = '36'
self.RAUM_STATUE = '37'
self.RAUM_KOPF = '38'
self.RAUM_MAUER = '39'
self.RAUM_GRAB = '40'
# Personen
self.PERSON_GEIST = '4'
self.PERSON_FISCH = '2'
self.PERSON_STIER = '5'
self.PERSON_ZWERG = '6'
self.fehler = '' self.fehler = ''
parser = WorldParser.WorldParser(self) parser = WorldParser.WorldParser(self)
parser.parseWorld('world.xml') parser.parseWorld('world.xml')

View File

@@ -2,15 +2,48 @@ import xml.etree.ElementTree as ET
from data.Raum import Raum, Befehl, Adjektiv,Gegenstand,Person,TextNode from data.Raum import Raum, Befehl, Adjektiv,Gegenstand,Person,TextNode
import io import io
import logging import logging
from ConfigError import ConfigError
class WorldParser(): 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): def __init__(self,world):
self.neuerRaum = None self.neuerRaum = None
self.world = world self.world = world
self.textCount = 0 self.textCount = 0
def check(self):
for itemid in self.world.gegenstaende:
item = self.world.gegenstaende[itemid]
textid = 'item-'+ itemid
if textid in self.world.texte:
pass
else:
logging.error(f'keine Beschreibung für Item {itemid} - {item.name}')
raise ValueError('Text ' +textid + ' fehlt')
for raumid in self.world.raumliste:
raum = self.world.raumliste[raumid]
textid = 'raum-' +raumid
if textid in self.world.raumliste:
pass
else:
logging.warn(f' keine Beschreibung für Raum {raumid} - {raum.name}')
def parseWorld(self,filename): def parseWorld(self,filename):
tree = ET.parse(filename) tree = ET.parse(filename)
root = tree.getroot() root = tree.getroot()
@@ -18,6 +51,8 @@ class WorldParser():
id = item.attrib['id'] id = item.attrib['id']
name = item.attrib['name'] name = item.attrib['name']
beschreibung = '' beschreibung = ''
if id in self.world.raumliste:
raise ValueError(f'doppelte RaumId {id}')
# Beschreibung # Beschreibung
for text in item.iter(): for text in item.iter():
if text != None and text.text != None: if text != None and text.text != None:
@@ -47,8 +82,6 @@ class WorldParser():
self.world.raumliste[id] = raum self.world.raumliste[id] = raum
startr = root.find('startraum') startr = root.find('startraum')
print(startr)
print(startr.attrib['id'])
startraum = self.world.sucheRaum(startr.attrib['id']) startraum = self.world.sucheRaum(startr.attrib['id'])
self.world.aktuellerRaum = startraum self.world.aktuellerRaum = startraum
print('Startraum gefunden.') print('Startraum gefunden.')
@@ -61,6 +94,9 @@ class WorldParser():
key = befehl.attrib['key'] key = befehl.attrib['key']
command = Befehl(name,id,key) command = Befehl(name,id,key)
if id in self.world.befehle:
raise ValueError(f'doppelte Befehl-Id {id}')
self.world.befehle[id] = command self.world.befehle[id] = command
# Adjektive # Adjektive
for adj in root.findall('adjektive/adjektiv'): for adj in root.findall('adjektive/adjektiv'):
@@ -91,22 +127,34 @@ class WorldParser():
imobil = item.attrib['imobil'] imobil = item.attrib['imobil']
visible = item.attrib['visible'] visible = item.attrib['visible']
adjektiv = item.attrib['adjektiv'] adjektiv = item.attrib['adjektiv']
display = item.attrib['display']
raum = self.world.sucheRaum(raumid) raum = self.world.sucheRaum(raumid)
if raum is not None: if raum is not None:
gegenstand.raum = raum.id gegenstand.raum = raum.id
raum.items[id] = gegenstand
else:
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 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'] gegenstand.imobil = imobil.lower() in ['true','True','1']
logging.debug('itemid= ' + id + ',visible= ' + visible) logging.debug('itemid= ' + id + ',visible= ' + visible)
gegenstand.sichtbar = visible.lower() not in ['false','False','0'] gegenstand.sichtbar = visible.lower() not in ['false','False','0']
#logging.debug('Gegenstand ' + gegenstand.name + ' ist sichtbar: ' + str(gegenstand.sichtbar)) #logging.debug('Gegenstand ' + gegenstand.name + ' ist sichtbar: ' + str(gegenstand.sichtbar))
gegenstand.pickupmsg = msgid gegenstand.pickupmsg = msgid
print('Item ' + gegenstand.name + ' - Pickup: ' + gegenstand.pickupmsg) # logging.debug('Item ' + gegenstand.name + ' - Pickup: ' + gegenstand.pickupmsg)
if id in self.world.gegenstaende:
raise ValueError(f'dopplete Item-Id {id}')
raum.items[id] = gegenstand
self.world.gegenstaende[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}')
# Personen # Personen
for item in root.findall('personen/person'): for item in root.findall('personen/person'):
@@ -118,7 +166,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'):
@@ -127,6 +175,8 @@ class WorldParser():
textnode = TextNode(id,item.text) textnode = TextNode(id,item.text)
self.world.texte[id] = textnode self.world.texte[id] = textnode
self.check()

9
ascii/dach.txt Normal file
View File

@@ -0,0 +1,9 @@

/\
/ \
/ \
/ \
/ \
/ \
^[[40;33m
------------

11
ascii/hilfe/cmd-0.txt Normal file
View File

@@ -0,0 +1,11 @@
Hilfeseite
Befehl: ende, quit
Parameter: -keine
siehe auch:
Beendet das Programm.

14
ascii/hilfe/cmd-1.txt Normal file
View File

@@ -0,0 +1,14 @@
Hilfeseite
Befehl: geh, gehe
Parameter: Richtung, Objekt
siehe auch: süd, nord, west, ost
geht in die angegebene Richtung oder das Objekt. Ist der Ausgang in die Richtung frei, landest du
im nächsten Raum.
mögliche Richtungen sind: Nord, Ost, Süd, West, Rauf und Runter

9
ascii/hilfe/cmd-10.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: runter
Parameter: -keiner-
siehe auch: gehe,klettere
Geht runter, sofern dort ein Ausgang ist.

9
ascii/hilfe/cmd-12.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: inventar
Parameter: -keiner-
siehe auch:
Listet die Gegenstände im Inventar auf.

9
ascii/hilfe/cmd-13.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: about
Parameter: -keiner-
siehe auch:
Git Informationen zum Programm.

9
ascii/hilfe/cmd-14.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: verliere
Parameter: Objekt
siehe auch: nimm
entfernt einen Gegenstand aus dem Inventar und legt ihn im aktuellen Raum ab.

9
ascii/hilfe/cmd-15.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: warte
Parameter: -keiner
siehe auch:
Tut nix.

9
ascii/hilfe/cmd-16.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: drücke
Parameter: Gegenstand
siehe auch:
Drückt auf einen Gegenstand imInventar oder aktuellen Raum.

9
ascii/hilfe/cmd-17.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: ziehe
Parameter: Objekt
siehe auch: drücke
Zieht an einem Objekt im Inventar oder aktuellen Raum.

9
ascii/hilfe/cmd-19.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: stelle, stell
Parameter: Objekt
siehe auch:
Stellt ein Objekt im Inventar ab.

12
ascii/hilfe/cmd-2.txt Normal file
View File

@@ -0,0 +1,12 @@
Hilfeseite
Befehl: nimm
Parameter: Objekt
siehe auch:
Nimmt einen Gegenstand im aktuellen Raum auf und verstaut ihn in deinem Inventar.
Hinweis: Einge Gegenstände können nicht mitgenommen werden.

10
ascii/hilfe/cmd-20.txt Normal file
View File

@@ -0,0 +1,10 @@
Hilfeseite
Befehl: öffne
Parameter: Objekt
siehe auch: nimm
Öffnet einen Behälter oder eine Tür.
Der Gegenstand muss sich im Inventar oder aktuellen Raum befinden.

11
ascii/hilfe/cmd-21.txt Normal file
View File

@@ -0,0 +1,11 @@
Hilfeseite
Befehl: klettere
Parameter: Objekt
siehe auch: rauf, runter
Klettert an einem Gegenstand rauf oder runter.
Der Gegenstand muss sich im aktuellen Raum befinden.
Hinweis: Manchmal muss der Gegenstand erst kletterbar gemacht werden.

10
ascii/hilfe/cmd-22.txt Normal file
View File

@@ -0,0 +1,10 @@
Hilfeseite
Befehl: fange
Parameter: Person
siehe auch:
Fängt die angebene Person. Möglicherweise benötigst du einen weiteren
Gegenstand zum Fangen.

9
ascii/hilfe/cmd-23.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: hilfe
Parameter: Befehl
siehe auch:
Zeigt Hilfe zu einem Befehl an.

10
ascii/hilfe/cmd-24.txt Normal file
View File

@@ -0,0 +1,10 @@
Hilfeseite
Befehl: schlage, boxe
Parameter: Genstand
siehe auch:
Schlägt auf einen Gegenstand im aktuellen Raum.
Achte darauf, wen oder was du schlägst!

10
ascii/hilfe/cmd-25.txt Normal file
View File

@@ -0,0 +1,10 @@
Hilfeseite
Befehl: sprich
Parameter: Person
siehe auch:
Spricht eine Person im aktuellen Raum an. Dadurch könntest du an spielentscheidende
Informationen kommen.

9
ascii/hilfe/cmd-26.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: leere
Parameter: Gegenstand
siehe auch:
Leert einen Gegenstand im Inventar bzw. schüttet seinen Inhalt aus.

9
ascii/hilfe/cmd-27.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: fülle, fuelle
Parameter: Gegenstand
siehe auch:
Füllt einen Gegenstand im Inventar. Das einzufüllende Material muss im aktuellen Raum vorhanden sein.

9
ascii/hilfe/cmd-28.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: wirf
Parameter: Gegenstand
siehe auch:
Wirft einen Gegenstand im Inventar.

9
ascii/hilfe/cmd-29.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: gib
Parameter: Gegenstand
siehe auch:
Gibt einen Gegenstand aus dem Inventar an eine Person im aktuellen Raum.

13
ascii/hilfe/cmd-3.txt Normal file
View File

@@ -0,0 +1,13 @@
Hilfeseite
Befehl: untersuche,schaue
Parameter: Objekt
siehe auch:
Gibt dir eine genauere Beschreibung eines Gegenstands. Der Gegenstand muss sich in deinem Inventar
oder im aktuellen Raum befinden.
Hinweis: Lässt du das Objekt weg, gibt es eine Beschreibung des aktuellen Raums.

9
ascii/hilfe/cmd-30.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: entzünde
Parameter: Gegenstand
siehe auch:
Entzündet einenbrennbaren Gegestand aus dem Inventar. Feuer bedeutet Licht.

9
ascii/hilfe/cmd-31.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: lösche
Parameter: Gegenstand
siehe auch: entzünde
Löscht einen brennden Gegenstand im Inventar.

9
ascii/hilfe/cmd-32.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: spring
Parameter: -keiner-
siehe auch:
Springt in die Höhe oder über etwas rüber oder in etwas hinein.

9
ascii/hilfe/cmd-4.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: benutze
Parameter: Objekt
siehe auch:
Benutzt einen Gegenstand aus dem Inventar. Unter Umständen kann ein spezieller Gegenstand nur
in bestimmten Räumen benutzt werden.

9
ascii/hilfe/cmd-5.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: nord
Parameter: -keiner-
siehe auch: gehe
Geht nach Norden, sofern dort ein Ausgang ist.

9
ascii/hilfe/cmd-6.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: süd, süden
Parameter: -keiner-
siehe auch: gehe
Geht nach Süden, sofern dort ein Ausgang ist.

7
ascii/hilfe/cmd-7.txt Normal file
View File

@@ -0,0 +1,7 @@
Hilfeseite
Befehl: nord
Parameter: -keiner-
siehe auch: gehe
Geht nach Norden, sofern dort ein Ausgang ist.

9
ascii/hilfe/cmd-8.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: west, westen
Parameter: -keiner-
siehe auch: gehe
Geht nach Westen, sofern dort ein Ausgang ist.

9
ascii/hilfe/cmd-9.txt Normal file
View File

@@ -0,0 +1,9 @@
Hilfeseite
Befehl: rauf
Parameter: -keiner-
siehe auch: gehe, klettere
Geht rauf, sofern dort ein Ausgang ist.

13
ascii/karte.txt Normal file
View File

@@ -0,0 +1,13 @@
H N
------- W+O
X(Baum) | |S
| --
------ |
| |
--- |
| --
| großer | o(Grab)
--- See --
|
* --
|

View File

@@ -15,6 +15,8 @@ class Raum(SuperNode):
self.personen = {} self.personen = {}
self.beschreibung=beschreibung self.beschreibung=beschreibung
self.pickupmsg = '' self.pickupmsg = ''
self.entdeckt = False
self.vorraum = '-1'
self.ausgaenge = { self.ausgaenge = {
'0': '-1', # Nord '0': '-1', # Nord
'1': '-1', # West '1': '-1', # West
@@ -41,8 +43,11 @@ class Raum(SuperNode):
for itemid in self.items: for itemid in self.items:
item = self.items[itemid] item = self.items[itemid]
logging.debug('labelsGegenstaende(): Item ' + self.items[itemid].name + ' ist ' + str(item.sichtbar)) #logging.debug('labelsGegenstaende(): Item ' + self.items[itemid].name + ' ist ' + str(item.sichtbar))
if item.sichtbar: if item.sichtbar:
if item.display != None:
labels.append(item.display)
else:
labels.append(item.name) labels.append(item.name)
return labels return labels
@@ -64,12 +69,22 @@ class Gegenstand(SuperNode):
def __init__(self,name,id,raumid): def __init__(self,name,id,raumid):
super().__init__(name,id) super().__init__(name,id)
self.raumid = raumid self.raumid = raumid
self.zustand = 0
self.sichtbar = True self.sichtbar = True
self.imobil = False self.imobil = False
self.adjektiv = None self.adjektiv = 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.HAENGEND = 0
self.GELOESCHT = 0
self.ENTZUENDED = 1
self.ANGEZOGEN = 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

63
map.txt Normal file
View File

@@ -0,0 +1,63 @@
Wohnzimmer
^
|
V
Schlafzimmer<-->Flur<--> Küche
^
|
V
Garten
^
|
V
Stall Bach<-->Teich
^ ^
| |
V V
Wiese<------->Feld
^ ^
| |
| |
V V
(0)Brachland kleines Feld
(1)
(0)
(1)Spitze der Bohnenranke
^
|
|
V
Pfad
^
|
|
V
Pfad<--> Pfad Kopf
^ ^
| |
| |
V V
Tal<---> Tunnel <--->Hafen<-->Boot Statue<-------------->Mauer
^ ^ \ ^ ^
| | Kabine | |
Boot2 | | |
| | / \ | |
V V / \ V V
Baum <--> Baumhaus Klippe<-->Strand<--> Wald Grabkammer
| |
| Boot3
V /
Beiboot<--> Insel
^
|
|
V
Loch

36
printKarte.py Normal file
View File

@@ -0,0 +1,36 @@
import curses
from curses import wrapper
def printKarte(stdscr):
s = stdscr
s.addstr(1,0,' H N')
s.addstr(2,0,' ------- W+O')
s.addstr(3,0,'X(Baum) | |S')
s.addstr(4,0,' | --')
s.addstr(5,0,' ------ |')
s.addstr(6,0,' | |')
s.addstr(7,0,'--- |')
s.addstr(8,0,'| --')
s.addstr(9,0,'| großer | o(Grab)')
s.addstr(10,0,'--- See -- ')
s.addstr(11,0,' |')
s.addstr(12,0,' * --')
s.addstr(13,0,' |')
def inputLoop(stdscr):
curses.echo()
curses.init_pair(1,curses.COLOR_RED, curses.COLOR_WHITE)
curses.init_pair(2,curses.COLOR_GREEN, curses.COLOR_BLACK)
curses.init_pair(3,curses.COLOR_YELLOW, curses.COLOR_BLACK)
printKarte(stdscr)
def main():
wrapper(inputLoop)
if __name__ == '__main__':
main()

134
tomb.py
View File

@@ -1,6 +1,9 @@
#!/usr/bin/python3 #!/usr/bin/python3
# Hauptprogramm - Eingabeschleife und Dispatching
import World import World
import ActionModul import ActionModul
import TestModule
import signal import signal
import sys import sys
import logging import logging
@@ -19,6 +22,8 @@ def verarbeiteBefehl(parsedCommand):
actionmodul.nimm(parsedCommand) actionmodul.nimm(parsedCommand)
elif id == '3': elif id == '3':
actionmodul.untersuche(parsedCommand) actionmodul.untersuche(parsedCommand)
elif id == '4':
actionmodul.benutze(parsedCommand)
elif id == '5': elif id == '5':
actionmodul.nord() actionmodul.nord()
elif id == '6': elif id == '6':
@@ -49,6 +54,28 @@ def verarbeiteBefehl(parsedCommand):
actionmodul.oeffne(parsedCommand) actionmodul.oeffne(parsedCommand)
elif id == '21': elif id == '21':
actionmodul.klettere(parsedCommand) 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 == '26':
actionmodul.leere(parsedCommand)
elif id == '27':
actionmodul.fuelle(parsedCommand)
elif id == '28':
actionmodul.wirf(parsedCommand)
elif id == '29':
actionmodul.gib(parsedCommand)
elif id == '30':
actionmodul.entzuende(parsedCommand)
elif id == '31':
actionmodul.loesche(parsedCommand)
elif id == '32':
actionmodul.spring(parsedCommand)
elif id == '-1': elif id == '-1':
world.fehler = 'Ich verstehe diesen Befehl nicht' world.fehler = 'Ich verstehe diesen Befehl nicht'
else: else:
@@ -58,27 +85,32 @@ 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')
actionmodul = ActionModul.ActionModul(world) actionmodul = ActionModul.ActionModul(world)
def inputLoop(stdscr): def inputLoop(stdscr):
schrittzaehler = 0
world.stdscr = stdscr world.stdscr = stdscr
curses.echo() curses.echo()
curses.init_pair(1,curses.COLOR_RED, curses.COLOR_WHITE) curses.init_pair(1,curses.COLOR_RED, curses.COLOR_WHITE)
curses.init_pair(2,curses.COLOR_GREEN, curses.COLOR_BLACK) curses.init_pair(2,curses.COLOR_GREEN, curses.COLOR_BLACK)
curses.init_pair(3,curses.COLOR_YELLOW, curses.COLOR_BLACK) curses.init_pair(3,curses.COLOR_YELLOW, curses.COLOR_BLACK)
curses.init_pair(4,curses.COLOR_WHITE, curses.COLOR_BLUE)
curses.init_pair(5,curses.COLOR_WHITE, curses.COLOR_GREEN)
commandid = '' commandid = ''
while commandid != '0': while commandid != '0':
world.printRaum() world.printRaum()
actionmodul.clearFehler() actionmodul.clearFehler()
stdscr.addstr(11,0,'Was nun? ') stdscr.addstr(11,0,'Was nun? ')
command = stdscr.getstr(11,10,40).decode(encoding="utf-8") command = stdscr.getstr(11,10,40).decode(encoding="utf-8")
world.schrittzaehler = world.schrittzaehler +1
command = command.rstrip() command = command.rstrip()
if command.startswith('debug:'): if command.startswith('debug:'):
debugcommand = command.split(':',1) debugcommand = command.split(':',1)
@@ -86,17 +118,103 @@ def inputLoop(stdscr):
logging.debug(f'debugcommand: {debugcommand}') logging.debug(f'debugcommand: {debugcommand}')
if debugcommand[1] == 'items': if debugcommand[1] == 'items':
logging.debug('liste Items') debug_Items()
logging.debug(world.gegenstaende) elif debugcommand[1] == 'inventar':
for item in world.gegenstaende: debug_Inventar()
logging.debug(f'Id:{item.id} - Name:{item.name}') elif debugcommand[1] == 'personen':
debug_Personen()
elif debugcommand[1] == 'karte':
world.printKarte()
commandid = '0'
elif debugcommand[1] == 'weg':
logging.debug(f'gelaufener Weg: {world.weg}')
elif debugcommand[1] == 'unvisited':
debug_NonVisited()
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()
elif debugcommand[1] == 'ranke':
testmodul.testRanke()
elif debugcommand[1] == 'tal':
testmodul.testTal()
elif debugcommand[1] =='baumhaus':
testmodul.testBaumhaus()
elif debugcommand[1] == 'stier':
testmodul.testStier()
elif debugcommand[1] == 'hafen':
testmodul.testHafen()
elif debugcommand[1] == 'insel':
testmodul.testInsel()
elif debugcommand[1] == 'klippe':
testmodul.testKlippe()
elif debugcommand[1] == 'statue':
testmodul.testStatue()
elif debugcommand[1] == 'mauer':
testmodul.testMauer()
world.fehler = ''
else: else:
actionmodul.clearFehler()
parsedCommand = world.parseInput(command) parsedCommand = world.parseInput(command)
commandid = parsedCommand.commandid commandid = parsedCommand.commandid
verarbeiteBefehl(parsedCommand) verarbeiteBefehl(parsedCommand)
schrittzaehler = schrittzaehler +1
actionmodul.raumaction() actionmodul.raumaction()
wrapper(inputLoop) def debug_NonVisited():
logging.debug('nicht entdeckte Räume:')
for raumid in world.raumliste:
raum = world.raumliste[raumid]
if not raum.entdeckt:
logging.debug(f'{raum.id} - {raum.name}')
def debug_Personen():
logging.debug('Personen im aktuellen Raum')
for pid in world.aktuellerRaum.personen:
person = world.personen[pid]
logging.debug(f'Id: {person.id} - Name: {person.name}')
def debug_Items():
logging.debug('liste Items im aktuellen Raum')
logging.debug(world.aktuellerRaum.items)
count = 0
for itemid in world.aktuellerRaum.items:
item = world.aktuellerRaum.items[itemid]
logging.debug(f'count= {count}')
# logging.debug(f'Itemtyp: {type(item)}')
logging.debug(f'Item-IdId:{item.id} - Item-Name:{item.name} - sichtbar= {item.sichtbar}')
count = count +1
def debug_Inventar():
logging.debug('liste Items')
logging.debug(world.inventar)
count = 0
for itemid in world.inventar:
item = world.inventar[itemid]
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()

545
world.xml
View File

@@ -4,7 +4,7 @@
<raum id='1' name='Esszimmer'> <raum id='1' name='Esszimmer'>
<ausgang dir='Sued' nachRaum='3' /> <ausgang dir='Sued' nachRaum='3' />
<ausgang dir='Rauf' nachRaum='2' /> <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> </beschreibung>
</raum> </raum>
@@ -16,6 +16,7 @@
<raum id='3' name='Flur'> <raum id='3' name='Flur'>
<ausgang dir='Nord' nachRaum='1' /> <ausgang dir='Nord' nachRaum='1' />
<ausgang dir='West' nachRaum='4' /> <ausgang dir='West' nachRaum='4' />
<ausgang dir='Ost' nachRaum='43' />
<beschreibung> <beschreibung>
Du stehst in Flur vor der Eingangstür, die nach Süden ins Freie führt. Du stehst in Flur vor der Eingangstür, die nach Süden ins Freie führt.
Rechts von der Tür hängt ein abstraktes Bild, links steht eine Pflanze in einer Nische. Rechts von der Tür hängt ein abstraktes Bild, links steht eine Pflanze in einer Nische.
@@ -36,6 +37,7 @@
</raum> </raum>
<raum id='6' name='Garten'> <raum id='6' name='Garten'>
<ausgang dir='Nord' nachRaum='3' /> <ausgang dir='Nord' nachRaum='3' />
<ausgang dir='Sued' nachRaum='8' />
<ausgang dir='Rauf' nachRaum='7' /> <ausgang dir='Rauf' nachRaum='7' />
Du stehst im Vorgarten, die Haustür führt zurück ins Haus. Du stehst im Vorgarten, die Haustür führt zurück ins Haus.
<beschreibung> <beschreibung>
@@ -47,15 +49,248 @@
<ausgang dir='Runter' nachRaum='6' /> <ausgang dir='Runter' nachRaum='6' />
Du hast das Dach erklommen. Du hast das Dach erklommen.
<beschreibung> <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> </beschreibung>
</raum> </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='Nord' nachRaum= '8' />
<ausgang dir='Sued' nachRaum= '12' />
<ausgang dir='West' nachRaum= '13' />
<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='Nord' nachRaum= '42' />
<ausgang dir='Ost' nachRaum= '11' />
<beschreibung>
Du stehst auf einer umzäunten Wiese, Ein Gatter versperrt den Weg nach Süden.
</beschreibung>
</raum>
<raum id='14' name='Brachland'>
<beschreibung>
Brachland. Hier wächst nicht viel abgesehen von einer einzelnen Bohnenranke.
</beschreibung>
</raum>
<raum id='15' name='Spitze der Bohnenranke'>
<ausgang dir='Runter' nachRaum= '14' />
<beschreibung>
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= '19' />
<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='23' name='Hafen'>
<ausgang dir='Ost' nachRaum= '21' />
<beschreibung>
Du stehst auf einem Steg, an dem ein Segelboot angeleint liegt.
</beschreibung>
</raum>
<raum id='24' name='Baumhaus'>
<ausgang dir='Runter' nachRaum= '20' />
<beschreibung>
Das Baumhaus
</beschreibung>
</raum>
<raum id='25' name='Boot'>
<ausgang dir='Sued' nachRaum= '27' />
<ausgang dir='runter' nachRaum='26' />
<beschreibung>
Du stehst an Deck des Segelboots
</beschreibung>
</raum>
<raum id='26' name='Kabine'>
<ausgang dir='Rauf' nachRaum= '25' />
<beschreibung>
In der Kabine ist die Luft etwas abgestanden. Zum Glück steht die Luke offen, um frische Luft hineinzulassen.
</beschreibung>
</raum>
<raum id='27' name='Boot'>
<ausgang dir='Nord' nachRaum= '33' />
<beschreibung>
Du stehst an Deck des Segelboots. Vor dem Bug liegt eine kleine Insel.
</beschreibung>
</raum>
<raum id='28' name='Beiboot'>
<beschreibung>
Das Beiboot ist geeignet, in seichterem Wasser weiterzufahren. Links und rechts ist jeweils ein Ruder angebracht.
</beschreibung>
</raum>
<raum id='30' name='Insel'>
<ausgang dir='Ost' nachRaum= '28' />
<ausgang dir='Runter' nachRaum= '31' />
<ausgang dir='Rauf' nachRaum= '41' />
<beschreibung>
Auf der Insel wächst eine einzelne Palme. In Sand hat jemand ein großes Loch gegraben.
</beschreibung>
</raum>
<raum id='31' name='Loch'>
<ausgang dir='Rauf' nachRaum= '30' />
<beschreibung>
Im Loch.
</beschreibung>
</raum>
<raum id='32' name='Boot'>
<ausgang dir='Nord' nachRaum= '33' />
<beschreibung>
Du stehst an Deck des Segelboots. Vor dem Bug liegt eine kleine Insel.
</beschreibung>
</raum>
<raum id='33' name='Klippe'>
<ausgang dir='Sued' nachRaum= '32' />
<beschreibung>
Das Boot liegt vor einer Klippe. Neben dieser ist ein Kiesstrand zu erkennen.
</beschreibung>
</raum>
<raum id='34' name='Im Wasser'>
<ausgang dir='Sued' nachRaum= '35' />
<beschreibung>
Du treibst im Wasser. Glücklicherweise hast du deine Rettungsweste an.
</beschreibung>
</raum>
<raum id='35' name='Strand'>
<ausgang dir='Ost' nachRaum= '36' />
<beschreibung>
Das Strand ist mit unzähligen Kieselsteinen übersäht. Im Osten sind Baumwipfel eines Waldes zu erkennen.
</beschreibung>
</raum>
<raum id='36' name='Wald'>
<ausgang dir='West' nachRaum= '35' />
<ausgang dir='Nord' nachRaum= '37' />
<beschreibung>
Ein alter, dichter Laubwald.
</beschreibung>
</raum>
<raum id='37' name='Statue'>
<ausgang dir='Rauf' nachRaum= '38' />
<ausgang dir='Ost' nachRaum= '39' />
<ausgang dir='Sued' nachRaum= '36' />
<beschreibung>
Du stehst vor einer etwa 10m hohen Statue
</beschreibung>
</raum>
<raum id='38' name='Auf dem Kopf der Statue'>
<ausgang dir='Runter' nachRaum= '37' />
<beschreibung>
Nach einer kleinen Kletterpartie stehst du auf dem Kopf der Statue.
</beschreibung>
</raum>
<raum id='39' name='Mauer'>
<ausgang dir='Ost' nachRaum= '37' />
<beschreibung>
Du stehst vor einer Mauer.
</beschreibung>
</raum>
<raum id='40' name='Grabkammer'>
<ausgang dir='Nord' nachRaum= '39' />
<beschreibung>
Das Grab des Azteken. Du bist am Ziel.
</beschreibung>
</raum>
<raum id='41' name='Palme'>
<ausgang dir='Runter' nachRaum= '30' />
<beschreibung>
Du stehst in der Krone der Palme. Du hast einen weiten, aber völlig uninformativen Ausblick.
Aber, du fühlst dich wie der König der Welt.
</beschreibung>
</raum>
<raum id='42' name='Stall'>
<ausgang dir='Sued' nachRaum= '13' />
<beschreibung>
Du stehst in einem leeren Pferdestall. Der Boden besteht aus festgestampfter Erde.
Am Tor ist eine Namenplakette angebracht.
</beschreibung>
</raum>
<raum id='43' name='Küche'>
<ausgang dir='West' nachRaum= '3' />
<beschreibung>
Du stehst in der Küche. In der Ecke steht ein Kühlschrank.
</beschreibung>
</raum>
</ebene> </ebene>
<commandset> <commandset>
<command name='quit' id='0' key='0' /> <command name='quit' id='0' key='0' />
<command name='ende' id='0' key='0' /> <command name='ende' id='43' key='0' />
<command name='geh' id='1' key='1' /> <command name='geh' id='1' key='1' />
<command name='gehe' id='27' key='1' />
<command name='nimm' id='2' key='2' /> <command name='nimm' id='2' key='2' />
<command name='untersuche' id='3' key='3' /> <command name='untersuche' id='3' key='3' />
<command name='benutze' id='4' key='4' /> <command name='benutze' id='4' key='4' />
@@ -66,20 +301,34 @@
<command name='west' id='9' key='8' /> <command name='west' id='9' key='8' />
<command name='rauf' id='10' key='9' /> <command name='rauf' id='10' key='9' />
<command name='runter' id='11' key='10' /> <command name='runter' id='11' key='10' />
<command name='gehe' id='12' key='11' />
<command name='inventar' id='13' key='12' /> <command name='inventar' id='13' key='12' />
<command name='about' id='14' key='13' /> <command name='about' id='14' key='13' />
<command name='verliere' id='15' key='14' /> <command name='verliere' id='15' key='14' />
<command name='warte' id='16' key='15' /> <command name='warte' id='16' key='15' />
<command name='drücke' id='17' key='16' /> <command name='drücke' id='17' key='16' />
<command name='ende' id='18' key='0' />
<command name='schaue' id='18' key='3' /> <command name='schaue' id='18' key='3' />
<command name='ziehe' id='19' key='17' /> <command name='ziehe' id='19' key='17' />
<command name='benutze' id='20' key='18' />
<command name='stelle' id='21' key='19' /> <command name='stelle' id='21' key='19' />
<command name='stell' id='22' key='19' /> <command name='stell' id='22' key='19' />
<command name='öffne' id='23' key='20' /> <command name='öffne' id='23' key='20' />
<command name='klettere' id='24' key='21' /> <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üden' 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' />
<command name='fülle' id='37' key='27' />
<command name='wirf' id='38' key='28' />
<command name='gib' id='39' key='29' />
<command name='entzünde' id='40' key='30' />
<command name='lösche' id='41' key='31' />
<command name='spring' id='42' key='32' />
</commandset> </commandset>
@@ -100,61 +349,283 @@
<sortout name='in' /> <sortout name='in' />
<sortout name='und' /> <sortout name='und' />
<sortout name='kleiner' /> <sortout name='kleiner' />
<sortout name='nach' />
<sortout name='tote' />
</sortouts> </sortouts>
<items> <items>
<item name='Tisch' id='1' raum='1' imobil='true' adjektiv = '0' msgid='1' visible='true' /> <item name='Tisch' display='' 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='Leiter' display='' 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='Truhe' display='' 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='Pflanze' display='' 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='Haustür' display='' 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='Krug' display='' 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='Bett' display='' 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='Nachtschrank' display='' 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='Schlüssel' display='kleiner Schlüssel' id='9' raum='-1' 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='Jacke' display='' 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='Schwert' display='' 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='Seil' display='' id='12' raum='-1' 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='Haustürschlüssel' display='' 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='Rankgitter' display='' 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='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='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' />
<item name='Gatter' id='25' display='' raum='13' imobil='true' adjektiv = '0' msgid='11' visible='true' />
<item name='Schachtel' id='26' display='' raum='24' imobil='false' adjektiv = '0' msgid='11' visible='false' />
<item name='Karte' id='27' display='' raum='24' imobil='false' adjektiv = '0' msgid='11' visible='false' />
<item name='Boot' id='28' display='' raum='23' imobil='true' adjektiv = '0' msgid='12' visible='true' />
<item name='Fackel' id='29' display='' raum='26' imobil='false' adjektiv = '0' msgid='11' visible='true' />
<item name='Schwimmweste' id='30' display='' raum='31' imobil='false' adjektiv = '0' msgid='13' visible='false' />
<item name='Kabine' id='31' display='' raum='25' imobil='true' adjektiv = '0' msgid='11' visible='true' />
<item name='Beiboot' id='32' display='' raum='25' imobil='false' adjektiv = '0' msgid='12' visible='true' />
<item name='Plakat' id='33' display='' raum='24' imobil='false' adjektiv='0' msgid='3' visible='true' />
<item name='Diamant' id='38' display='' raum='38' imobil='false' adjektiv='0' msgid='3' visible='false' />
<item name='Palme' id='40' display='' raum='30' imobil='true' adjektiv='0' msgid='8' visible='true' />
<item name='Sockel' id='41' display='' raum='39' imobil='true' adjektiv='0' msgid='8' visible='false' />
<item name='Mauer' id='43' display='' raum='39' imobil='true' adjektiv='0' msgid='8' visible='true' />
<item name='Kopf' id='42' display='' raum='38' imobil='true' adjektiv='0' msgid='12' visible='true' />
<item name='Loch' id='44' display='' raum='30' imobil='true' adjektiv='0' msgid='8' visible='true' />
<item name='Plakette' id='45' display='' raum='42' imobil='true' adjektiv='0' msgid='2' visible='true' />
<item name='Kühlschrank' id='46' display='' raum='43' imobil='true' adjektiv='0' msgid='2' visible='true' />
<item name='Uhr' id='47' display='' raum='43' imobil='true' adjektiv='0' msgid='2' visible='true' />
<item name='Schriftzug' id='48' display='' raum='39' imobil='true' adjektiv='0' msgid='2' visible='false' />
</items> </items>
<personen> <personen>
<person name=' Fisch' id='2' raum='2' bewegung='0' /> <person name='Fisch' id='2' raum='10' bewegung='0' />
<person name='Folterknecht' id='3' raum='2' bewegung='1' /> <person name='Geist' id='4' raum='2' bewegung='1' />
<person name='Geist' id='4' raum='3' bewegung='0' /> <person name='Stier' id='5' raum='13' bewegung='0' />
<person name='Maus' id='4' raum='2' 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' />
<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='Das ist fest verschraubt' id ='3' />
<pickup text='Daran hebst du dir nur nen Bruch' id='4' /> <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='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='Das hängt viel zu hoch. Zu kommst nicht dran.' id='6' />
<pickup text='Kunstdiebstahl? Nö!' id='7' /> <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' />
<pickup text='Das kannst du nicht tragen.' id='10' />
<pickup text='Boote gehören ins Wasser.' id='12' />
<pickup text='Die Kabine zu demontieren würde das Boot zerstören.' id='13' />
</messages> </messages>
<bewegungen> <bewegungen>
<bewegung id='0' value='' /> <bewegung id='0' value='' />
<bewegung id='1' value='1,3' /> <bewegung id='1' value='2,5,4,3,1,2' />
</bewegungen> </bewegungen>
<texte> <texte>
<text id='1'>
Als du die Fackel in den Fackelhalter stellst, kippt der Halter zur Seite. Hinter der Wand hörst du Seilzüge und Zahnräder
anlaufen. Über den verborgenen Mechanismus wird das Gittertor in die Höhe gezogen und der Weg nach Norden ist frei.
</text>
<text id='2'> <text id='2'>
In einer Schreibtischschublade findest du einen Schlüssel. In einer Schreibtischschublade findest du einen Schlüssel.
</text> </text>
<text id='item-11'> <text id='item-1'>
Der Schlüssel ist etwa 10cm lang und hat eine ringförmige Reide. Der Bart hat drei Zacken und zwei Kerben. Der Wohnzimmertisch ist leer.
</text> </text>
<text id='item-12'> <text id='item-2'>
Zellblock 11-38 Sie führt nach oben.
</text>
<text id='item-3'>
Eine massive Truhe aus Holz. Sie ist mit Eisenbändern verstärkt und besitzt ein kleines Schloss.
</text>
<text id='item-4'>
Audrey II
</text>
<text id='item-5'>
Eine einfache Tür.
</text>
<text id='item-6'>
Der Krug ist aus gebrannten und glasiertem Ton mit einem Henkel an der Seite.
</text>
<text id='item-7'>
Das Bett ist frisch bezogen.
</text>
<text id='item-8'>
Ein Schränkchen mit einer Schublade.
</text> </text>
<text id='item-9'> <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 Ein ganz normaler Schlüssel. Er schimmert etwas bläulich.
eingelassen. Auf der rechten Seite befindet sich etwa in der Mitte ein Schloss. Hinter dem Tor scheint ein Treppenhaus zu sein.
</text> </text>
<text id='item-10'>
Die Jacke ist aus rotem Leinenstoff genäht.
</text>
<text id='item-11'>
Für ein Schwert ist es relativ klein (könnte auch ein Brieföffner sein). Auf der Klinge ist das Wort "Stich" eingraviert.
</text>
<text id='item-12'>
Das Seil ist etwa 5m lang und könnte aus Garnfasern geflochten sein. Es ist stark genug, dein Gewicht zu tragen.
</text>
<text id='item-13'>
Der Schlüssel schimmert etwas bläulich.
</text>
<text id='item-14'>
Mit mehreren Quersprossen reicht das Gitter bis zum Dach. Es ist ziemlich massiv.
</text>
<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 hans in beatitudinem.
Sie ist etwas mickrig und braucht Pflege.
</text>
<text id='item-21-0'>
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 id='item-25'>
Das Gatter ist im südlichen Teil der Wiesenumzäunung angebracht.
</text>
<text id='item-26'>
Eine einfache Schachtel aus Pappe. Jemand hat "Eigentum von Henry" auf die Oberseite geschrieben.
</text>
<text id='item-27'>
Dies ist die Karte von der Henry die erzählt hat.
</text>
<text id='item-28'>
Das Segelboot besitzt einen weißen Rumpf und ein schwarzes Dreieckssegel. Am Heck steht keine Name geschrieben, dafür ist eine schwarze Perle
aufgemalt.
</text>
<text id='item-29'>
Die Fackel hättest du schon eher brauchen können.
</text>
<text id='item-30'>
Eine orangefarbene Rettungsweste, die dir im Wasser genügend Auftrieb verleiht. Solltest du auf einen Eisberg treffen, bist
du in Sicherheit.
</text>
<text id='item-31'>
Die Luft ist abgestanden und durch das ungeputzte Bullauge dringt kaum Licht.
</text>
<text id='item-32'>
Mit dem Beiboot kann man durch flacheres Wasser fahren. Und, falls ein Eisberg...
</text>
<text id='item-33'>
---------
| No |
| Homers |
| Club |
----------
</text>
<text id='item-38'>
Der Diamant ist oktaederförmig geschliffen und funkelt im Sonnenlicht.
</text>
<text id='item-41'>
Der Sockel dient seiner Form nach zur Aufnahme eines achtseitigen Gegenstands.
</text>
<text id='item-40'>
Eine einzelne Palme. Irgendwer hat die Kokosnuss geklaut.
</text>
<text id='item-42'>
Der Kopf repräsentiert einen dir unbekannten Mann, der würdevoll über seine linke Schulter schaut.
</text>
<text id='item-43'>
Die Mauer wurde scheinbar vor ewigen Zeiten aus getrockneten Lehmziegel errichtet und die Fugen
anschlißend mit Lehm verputzt.
</text>
<text id='item-44'>
Ein in den Sand gegrabenes Loch.
</text>
<text id='item-45'>
Horst.
Der Pferd heisst Horst.
</text>
<text id='item-46'>
Wie überraschend, er ist weiß.
</text>
<text id='item-47'>
Die Uhr ist bei 22:04 Uhr stehen geblieben.
</text>
<text id='item-48'>
Über die ganze Wand hat jemand "Romanum ite domum" gepinselt.
</text>
<text id='raum-21'>
Im Tunnel ist es zu dunkel, um etwas zu sehen. Aber du spürst einen leichten Wind, der von Osten durch den Tunnel weht.
</text>
<text id='raum-31-0'>
In das Loch dringt kein Sonnenlicht, du siehst gar nichts.
</text>
<text id='raum-31-1'>
Im Licht der Fackel erkennst du, dass das Loch sorgfältig gegraben und mit Schiffsplanken abgestützt wurde.
</text>
<text id='raum-43'>
Eine praktisch eingerichtete Küche. An der Wand hängt eine Uhr, ein Kühlschrank steht gegenüber der Tür.
</text>
<text id='npc-5'>
Muuuh.
</text>
<text id='npc-6'>
Der Zwerg klappert vor Kälte mit den Zähnen und kann nicht sprechen.
</text>
<text id='npc-6-beschr'>
Der Zwerg ist etwa hüfthoch. Auf dem Kopf trägt er eine blaue Zipfelmütze (natürlich).Er ist nur mit einer violetten Hose bekleidet,
der Oberkörper ist frei.
Er scheint offensichtlich zu frieren.
</text>
<text id='zuul'>
*** * * * * *
* * * * * *
* * * * * *
**** ***** ***** *****
</text>
<text id='hilfe'>
Das Grab des Azteken ist ein klassisches Textadventure.
Es ist eine Adaption des gleichnamigen Adventures auf dem 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='npc-4'>
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. Die Karte, die ich mir mühsam aus Hinweisen erstellt hatte, wurde mir von einem hinterlistigen Zwerg entwendet.
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>
<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>
<text id='graböffnung'>
Also du den Diamant in den Sockel setzt, schiebt sich ein Teil der Mauer knirschend nach hinten und gibt einen Durchgang frei. Staubige Luft
quillt dir entgegen.
</text>
<text id='victory'>
Henry erscheint und sagt:
"Es war sehr beeindruckend, deine Suche zu verfolgen. Du hast meine Aufgabe erfolgreich zu Ende geführt."
"Endlich kann ich meine Frieden finden."
</text>
</texte> </texte>
</welt> </welt>