diff --git a/ActionBasics.py b/ActionBasics.py
new file mode 100644
index 0000000..2f24c25
--- /dev/null
+++ b/ActionBasics.py
@@ -0,0 +1,8 @@
+import logging
+
+class ActionBasics:
+
+ def __init__(self,world):
+ self.world = world
+
+
diff --git a/ActionModul.py b/ActionModul.py
index 92c6184..3cdf48e 100644
--- a/ActionModul.py
+++ b/ActionModul.py
@@ -1,6 +1,9 @@
-import logging
+# Actionmdul - hier werden die Kommandos ausgeführt und die Spielwelt entsprend aktualisiert.
-class ActionModul:
+import logging
+from ActionBasics import ActionBasics
+
+class ActionModul(ActionBasics):
def isBlank(self,str):
logging.debug(f'isBlank(): str=*{str}*')
@@ -10,7 +13,7 @@ class ActionModul:
def __init__(self, world):
- self.world = world
+ super().__init__(world)
def warte(self):
print('Du wartest')
@@ -31,10 +34,19 @@ class ActionModul:
if item != None:
if item.id == self.world.ITEM_RANKGITTER:
self.rauf()
+ elif item.id == self.world.ITEM_BOHNENRANKE:
+ if item.zustand == item.GROSS:
+ self.rauf()
+ else:
+ self.setFehler('zum Klettern ist die Bohnenranke zu klein.')
else:
self.setFehler('Das sehe ich hier nicht.')
+ def vanishItem(self, item):
+ item.sichtbar = False
+ self.ausDemInventar(item)
+
def oeffne(self,parsedCommand):
item = self.world.findItemImInventarOderAktuellerRaum(parsedCommand.gegenstand);
@@ -46,10 +58,10 @@ class ActionModul:
logging.debug('öffne Truhe')
schluessel = self.world.findItemImInventarById(self.world.ITEM_KLEINER_SCHLUESSEL)
+ self.vanishItem(schluessel)
+
if schluessel != None and item.zustand != item.OFFEN:
item.zustand = item.OFFEN
- schluessel.sichtbar = False
- self.ausDemInventar(schluessel)
seil = self.world.findItemById(self.world.ITEM_SEIL)
seil.raumid = self.world.aktuellerRaum.id
seil.sichtbar = True
@@ -69,10 +81,9 @@ class ActionModul:
logging.debug(f'öffne Haustür Schlüssel ist {schluessel}')
if schluessel != None:
item.zustand = item.OFFEN
- schluessel.sichtbar = False
+ self.vanishItem(schluessel)
self.setFehler('Die Haustür ist geöffnet,der Haustürschlüssel löst sich auf.')
self.world.aktuellerRaum.ausgaenge[self.world.SUED] = self.world.RAUM_GARTEN
- self.ausDemInventar(schluessel)
else:
self.setFehler('Die Tür ist verschlossen.')
@@ -263,6 +274,15 @@ class ActionModul:
def fange(self, parsedCommand):
skip
+ def wirf(self,parsedCommand):
+ item = self.world.findItemImInventar(parsedCommand.gegenstand)
+
+ if self.isItemAndAktRaum(item, self.world.ITEM_SEIL,self.world.RAUM_BAUM):
+ self.world.printText('seilwurf')
+ self.world.aktuellerRaum.richtungen[self.world.RAUF] = self.world.RAUM_BAUMHAUS
+ self.ausDemInventar(item)
+
+
def klettere(self, parsedCommand):
leiter = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand)
@@ -271,6 +291,13 @@ class ActionModul:
if self.isAktuellerRaum(self.world.RAUM_ESSZIMMER):
logging.debug(f'aktuellerRaum ist {self.world.aktuellerRaum.id}')
self.rauf()
+ elif self.isAktuellerRaum(self.world.RAUM_BRACHLAND):
+ ranke = self.findItemImInventarOderAktuellerRaum(self.world.ITEM_BOHNENRANKE):
+
+ if ranke.zustand == Gegenstand.GROSS:
+ self.ac.rauf()
+ else:
+ self.setFehler('Die Bohnenranke ist zu klein, um daran hoch zu klettern.')
else:
self.setFehler('Eine Leiter sehe ich hier nicht.')
@@ -278,6 +305,11 @@ class ActionModul:
logging.debug(f'neu ins Inventar: {item.name}')
self.world.inventar[item.id] = item
+ def moveItemVonRaumNachInventar(self,item):
+ logging.debug(f'moveItemVonRaumNachInventar(): entferne aus aktuellen Raum {item.name}')
+ del self.world.aktuellerRaum.items[item.id]
+ logging.debug(f'moveItemVonRaumNachInventar(): ins Inventar {item.name}')
+ self.insInventar(item)
def nimm(self,parsedCommand):
item = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand)
@@ -293,8 +325,6 @@ class ActionModul:
text = self.world.msg[item.pickupmsg]
self.setFehler(text)
else:
- logging.debug(f'Item {item.name} aus aktuellem Raum entfernen')
- del self.world.aktuellerRaum.items[item.id]
aufnehmen = True
@@ -316,14 +346,20 @@ class ActionModul:
aufnehmen = False
if aufnehmen:
- logging.debug(f'Item {item.name} ins Inventar')
- self.insInventar(item)
+ self.moveItemVonRaumNachInventar(item)
+
else:
self.setFehler("diesen Gegenstand sehe ich hier nicht.")
+ def isItemAndAktRaum(self,item, itemid, raumid):
+ return self.isItem(item, itemid) and self.isAktuellerRaum(raumid)
+
+ def isItem(self, item, itemid):
+ return item.id == itemid
+
def sprich(self,parsedCommand):
geist = self.world.findPersonImAktuellenRaum(parsedCommand.gegenstand)
@@ -338,6 +374,17 @@ class ActionModul:
else:
self.world.printText('hilfe')
+ def geheNachItem(parsedCommand):
+ item = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand)
+
+ if item == None:
+ self.setFehler('Das gibts hier nicht.')
+ return
+ if self.isItemAndAktRaum(item, self.world.ITEM_LEITER, self.world.RAUM_ESSZIMMER):
+ self.rauf()
+ else:
+ self.setFehler('Das gibt\'s hier nicht.')
+
def gehe(self,parsedCommand):
richtung = parsedCommand.gegenstand.lower()
logging.debug("gehe nach " + richtung)
@@ -346,14 +393,19 @@ class ActionModul:
self.geheNach(richtung)
elif richtung == 'süd':
self.geheNach(richtung)
- if richtung == 'west':
+ elif richtung == 'west':
self.geheNach(richtung)
- if richtung == 'ost':
+ elif richtung == 'ost':
self.geheNach(richtung)
- if richtung == 'rauf':
+ elif richtung == 'rauf':
self.rauf()
+ else:
+ self.geheNachItem(parsedCommand)
+ def wechsleRaum(self,raum):
+ self.world.aktuellerRaum = raum
+ raum.entdeckt = True
def geheNach(self,richtung):
logging.debug(f'geheNach() Richtung {richtung}')
raum = self.world.aktuellerRaum
@@ -368,7 +420,7 @@ class ActionModul:
self.setFehler("In diese Richtung gibt's keine Ausgang!")
if raum != None:
- self.world.aktuellerRaum = raum
+ self.wechsleRaum(raum)
else:
logging.debug('Kein Raum zur AusgangId')
self.setFehler("In diese Richtung gibt's keine Ausgang!")
diff --git a/TestModule.py b/TestModule.py
index c666973..5e8f7bf 100644
--- a/TestModule.py
+++ b/TestModule.py
@@ -1,3 +1,4 @@
+# Testdurchläufe
import logging
import ActionModul
@@ -21,53 +22,53 @@ class TestModule:
#Auf den Dachboden
self.ac.rauf()
- self.schrittzaehler = self.schrittzaehler +1
+ self.schrittzaehler += 1
self.ac.nimm(pcmd)
- self.schrittzaehler = self.schrittzaehler +1
+ self.schrittzaehler += 1
#Zurück ins Wohnzimmer
self.ac.runter()
- self.schrittzaehler = self.schrittzaehler +1
+ self.schrittzaehler += 1
#In den Flur
self.ac.sued()
- self.schrittzaehler = self.schrittzaehler +1
+ self.schrittzaehler += 1
# Ins Schlafzimmer
self.ac.west()
- self.schrittzaehler = self.schrittzaehler +1
+ self.schrittzaehler += 1
self.debug(f'aktueller Raum: {self.world.aktuellerRaum.name}')
self.debug(f'Ausgänge: {self.world.aktuellerRaum.ausgaenge}')
pcmd = self.parseInput('untersuche Bett')
self.ac.untersuche(pcmd)
- self.schrittzaehler = self.schrittzaehler +1
+ self.schrittzaehler += 1
self.debug(f'Ausgänge: {self.world.aktuellerRaum.ausgaenge}')
# In den Keller
self.ac.runter()
- self.schrittzaehler = self.schrittzaehler +1
+ self.schrittzaehler += 1
pcmd = self.parseInput('nimm Jacke')
self.ac.nimm(pcmd)
- self.schrittzaehler = self.schrittzaehler +1
+ self.schrittzaehler += 1
pcmd = self.parseInput('benutze Jacke')
self.ac.benutze(pcmd)
- self.schrittzaehler = self.schrittzaehler +1
+ self.schrittzaehler += 1
pcmd = self.parseInput('öffne Truhe')
self.ac.oeffne(pcmd)
- self.schrittzaehler = self.schrittzaehler +1
+ self.schrittzaehler += 1
pcmd = self.parseInput('nimm Schwert')
self.ac.nimm(pcmd)
- self.schrittzaehler = self.schrittzaehler +1
+ self.schrittzaehler += 1
pcmd = self.parseInput('nimm Seil')
self.ac.nimm(pcmd)
- self.schrittzaehler = self.schrittzaehler +1
+ self.schrittzaehler += 1
self.world.schrittzaehler = self.schrittzaehler
@@ -78,60 +79,91 @@ class TestModule:
#Rauf ins Schlafzimmer
self.ac.rauf()
- self.schrittzaehler = self.schrittzaehler +1
+ self.schrittzaehler += 1
pcmd = self.parseInput('untersuche Nachtschrank')
self.ac.untersuche(pcmd)
- self.schrittzaehler = self.schrittzaehler +1
+ self.schrittzaehler += 1
pcmd = self.parseInput('nimm Haustürschlüssel')
self.ac.nimm(pcmd)
- self.schrittzaehler = self.schrittzaehler +1
+ self.schrittzaehler += 1
#In den Flur
self.ac.ost()
- self.schrittzaehler = self.schrittzaehler +1
+ self.schrittzaehler += 1
pcmd = self.parseInput('untersuche Pflanze')
self.ac.untersuche(pcmd)
- self.schrittzaehler = self.schrittzaehler +1
+ self.schrittzaehler += 1
pcmd = self.parseInput('nimm Krug')
self.ac.nimm(pcmd)
- self.schrittzaehler = self.schrittzaehler +1
+ self.schrittzaehler += 1
pcmd = self.parseInput('öffne Haustür')
self.ac.oeffne(pcmd)
- self.schrittzaehler = self.schrittzaehler +1
+ self.schrittzaehler += 1
# nach draussen
self.ac.sued()
- self.schrittzaehler = self.schrittzaehler +1
+ self.schrittzaehler += 1
# aufs Dach
self.ac.rauf()
- self.schrittzaehler = self.schrittzaehler +1
+ self.schrittzaehler += 1
pcmd = self.parseInput('nimm Planke')
self.ac.nimm(pcmd)
- self.schrittzaehler = self.schrittzaehler +1
+ self.schrittzaehler += 1
#Wieder runter
self.ac.runter()
- self.schrittzaehler = self.schrittzaehler +1
+ self.schrittzaehler += 1
#Zum Bach
self.ac.sued()
- self.schrittzaehler = self.schrittzaehler +1
+ self.schrittzaehler += 1
pcmd = self.parseInput('verliere Planke')
self.ac.verliere(pcmd)
- self.schrittzaehler = self.schrittzaehler +1
+ self.schrittzaehler += 1
#Zum Teich
self.ac.ost()
- self.schrittzaehler = self.schrittzaehler +1
+ self.schrittzaehler += 1
+
+ self.world.schrittzaehler = self.schrittzaehler
+
+ def testRanke(self):
+ self.testTeich()
+
+ pcmd = self.parseInput('nimm Fisch')
+ self.ac.nimm(pcmd)
+
+ # zum Bach
+ self.ac.west()
+ self.schrittzaehler += 1
+
+
+ #Aufs Feld
+ self.ac.sued()
+ self.schrittzaehler += 1
+
+
+ # Auf die Wiese
+ self.ac.west()
+ self.schrittzaehler += 1
+
+
+ # Aufs Brachland
+ self.ac.sued()
+ self.schrittzaehler += 1
+
+ pcmd = self.parseInput('leere Krug')
+ self.ac.leere(pcmd)
+ self.schrittzaehler += 1
self.world.schrittzaehler = self.schrittzaehler
diff --git a/World.py b/World.py
index da528bb..a7bf237 100644
--- a/World.py
+++ b/World.py
@@ -1,3 +1,6 @@
+# Hier wird die Spielwelt verwaltet.
+# Auch die Terminalausgabe passiert hier.
+
import WorldParser
import ParsedCommand
import ActionModul
@@ -45,7 +48,12 @@ class World:
item = self.inventar[itemid]
labels.append(item.name)
- return labels
+ return labels
+
+ def fortschritt(self):
+ anz_raeume, anz_entdeckt = self.zaehleRaeume()
+ return round((anz_entdeckt/anz_raeume) *100,2)
+
def printRaum(self):
raum = self.aktuellerRaum
self.clearScreen()
@@ -78,7 +86,9 @@ class World:
richtungen =''
ixri = 0
- self.stdscr.addstr(6,85,f'Schritte: {self.schrittzaehler}')
+ anz_raeume, anz_entdeckt = self.zaehleRaeume()
+ progress = (anz_entdeckt/anz_raeume) *100
+ self.stdscr.addstr(6,85,f'Schritte: {self.schrittzaehler}, Räume:{anz_entdeckt}/{anz_raeume}, Fortschritt: {self.fortschritt()}%')
win = curses.newwin(7,35,7,85)
win.box()
win.addstr('Ausgänge:')
@@ -219,6 +229,27 @@ class World:
return parsedCommand
+ def zaehleEntdeckteRaeume(self):
+ count = 0
+ for raumid in self.raumliste:
+ raum = self.raumliste[raumid]
+ if raum .entdeckt:
+ count += 1
+
+ return count
+
+ def zaehleRaeume(self):
+ count = 0
+ entdeckt = 0
+ for raumid in self.raumliste:
+ raum = self.raumliste[raumid]
+ if raum .entdeckt:
+ entdeckt += 1
+ count += 1
+
+ return count, entdeckt
+
+
def debug_Items(self):
logging.debug('liste Items')
logging.debug(self.gegenstaende)
@@ -275,6 +306,8 @@ class World:
self.ITEM_BOXSACK = '19'
self.ITEM_MAUS = '20'
self.ITEM_BOHNENRANKE = '21'
+ self.ITEM_ELEFANT = '22'
+ self.ITEM_HAFEN = '23'
# Räume
@@ -302,6 +335,7 @@ class World:
self.RAUM_BAUMHAUS = '23'
self.RAUM_TUNNEL = '20'
self.RAUM_STRAND = '21'
+ self.RAUM_HAFEN = '22'
diff --git a/data/Raum.py b/data/Raum.py
index 1c46f8d..60e7644 100644
--- a/data/Raum.py
+++ b/data/Raum.py
@@ -15,6 +15,7 @@ class Raum(SuperNode):
self.personen = {}
self.beschreibung=beschreibung
self.pickupmsg = ''
+ self.entdeckt = False
self.ausgaenge = {
'0': '-1', # Nord
'1': '-1', # West
diff --git a/data/__pycache__/Raum.cpython-38.pyc b/data/__pycache__/Raum.cpython-38.pyc
index f0d5d33..0f4de45 100644
Binary files a/data/__pycache__/Raum.cpython-38.pyc and b/data/__pycache__/Raum.cpython-38.pyc differ
diff --git a/tomb.py b/tomb.py
index 6863afd..19882eb 100755
--- a/tomb.py
+++ b/tomb.py
@@ -1,4 +1,6 @@
#!/usr/bin/python3
+# Hauptprogramm - Eingabeschleife und Dispatching
+
import World
import ActionModul
import TestModule
@@ -116,6 +118,8 @@ def inputLoop(stdscr):
testmodul.testOeffneTruhe()
elif debugcommand[1] == 'teich':
testmodul.testTeich()
+ elif debugcommand[1] == 'ranke':
+ testmodul.testRanke()
else:
diff --git a/world.xml b/world.xml
index 68b583a..ddc13e1 100644
--- a/world.xml
+++ b/world.xml
@@ -67,8 +67,9 @@
-
+
+
Ein Feld.
@@ -150,6 +151,13 @@
Du stehst am Strand eines großen Sees. In südlicher Richtung scheint ein Hafen zu sein.
+
+
+
+
+ Im Hafen liegt ein Segelschiff angeleint.
+
+
@@ -190,7 +198,8 @@
-
+
+
@@ -238,6 +247,8 @@
+
+
@@ -254,6 +265,7 @@
+
@@ -318,5 +330,8 @@
Jetzt musst du dich auf die Suche machen, so dass ich endlich meinen Frieden finden kann.
Suche das Grab im Wolkenreich.Öffne es und ich bin erlöst.
+
+ Du wirfst das Seil Richtung Baumkrone. Dort verfängt es sich so fest, dass du daran klettern kannst.
+