Dateien von pykerker übernommen.
This commit is contained in:
172
World.py
Normal file
172
World.py
Normal file
@@ -0,0 +1,172 @@
|
||||
import WorldParser
|
||||
import ParsedCommand
|
||||
import ActionModul
|
||||
import curses
|
||||
from curses import wrapper
|
||||
import logging
|
||||
from os import system, name
|
||||
|
||||
|
||||
class World:
|
||||
|
||||
def clearScreen(self):
|
||||
self.stdscr.clear()
|
||||
|
||||
def printText(self,textid):
|
||||
self.clearScreen()
|
||||
self.stdscr.addstr(1,0,self.texte[textid].name)
|
||||
self.waitForCR()
|
||||
self.printRaum()
|
||||
|
||||
def waitForCR(self):
|
||||
self.stdscr.addstr(0,0,'Taste für Weiter',curses.color_pair(1))
|
||||
self.stdscr.getch()
|
||||
|
||||
|
||||
def printRaum(self):
|
||||
raum = self.aktuellerRaum
|
||||
self.clearScreen()
|
||||
|
||||
if self.fehler != None and self.fehler != '':
|
||||
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(4,0,raum.beschreibung)
|
||||
self.stdscr.addstr(7,0,'Gegenstände: ' + str(raum.labelsGegenstaende()),curses.color_pair(2))
|
||||
self.stdscr.addstr(8,0,'Personen: ' + str(raum.labelsPersonen()),curses.color_pair(2))
|
||||
|
||||
|
||||
aus = raum.ausgaenge
|
||||
self.stdscr.addstr(9,0,'mögliche Richtungen: ')
|
||||
r = []
|
||||
if aus[self.NORD] != '-1':
|
||||
r.append('Norden')
|
||||
if aus[self.OST] != '-1':
|
||||
r.append('Osten')
|
||||
if aus[self.WEST] != '-1':
|
||||
r.append('Westen')
|
||||
if aus[self.SUED] != '-1':
|
||||
r.append('Süden')
|
||||
if aus[self.RAUF] != '-1':
|
||||
r.append('Rauf')
|
||||
if aus[self.RUNTER] != '-1':
|
||||
r.append('Runter')
|
||||
|
||||
richtungen =''
|
||||
ixri = 0
|
||||
win = curses.newwin(7,35,7,85)
|
||||
win.box()
|
||||
win.addstr('Ausgänge:')
|
||||
for ri in r:
|
||||
richtungen = richtungen + ri
|
||||
win.addstr(ixri+1,1,ri)
|
||||
if ixri +1 < len(r):
|
||||
richtungen = richtungen + ', '
|
||||
ixri = ixri +1
|
||||
self.stdscr.addstr(9,22,richtungen)
|
||||
self.stdscr.refresh()
|
||||
win.refresh()
|
||||
|
||||
def sucheRaum(self,id):
|
||||
for raumid in self.raumliste:
|
||||
raum = self.raumliste[raumid]
|
||||
if raum.id == id:
|
||||
return raum
|
||||
return None
|
||||
|
||||
def findItemImInventarOderAktuellerRaum(self,itemname):
|
||||
item = self.findItemImInventar(itemname)
|
||||
|
||||
if item == None:
|
||||
item = self.findIteminAktuellerRaum(itemname)
|
||||
return item
|
||||
|
||||
|
||||
def findIteminAktuellerRaum(self,itemname):
|
||||
raum = self.aktuellerRaum
|
||||
|
||||
for itemid in raum.items:
|
||||
item = raum.items[itemid]
|
||||
logging.debug('raum.id=' + raum.id)
|
||||
logging.debug('item.raumid=' + item.raumid)
|
||||
logging.debug('findItemInAktuellerRaum() ' + itemname + '-' + item.name)
|
||||
if item.raumid == raum.id and item.name == itemname:
|
||||
return item
|
||||
|
||||
return None
|
||||
|
||||
def findRaumItemById(self,id):
|
||||
raum = self.aktuellerRaum
|
||||
|
||||
for itemid in raum.items:
|
||||
item = raum.items[itemid]
|
||||
if item.raumid == raum.id and item.id == id:
|
||||
return item
|
||||
|
||||
return None
|
||||
|
||||
def findItemImInventar(self,itemname):
|
||||
|
||||
for itemid in self.inventar:
|
||||
if self.inventar[itemid].name == itemname:
|
||||
return self.inventar[itemid]
|
||||
return None
|
||||
|
||||
def ermittleBefehlId(self,befehl):
|
||||
for id in self.befehle:
|
||||
name = self.befehle[id].name
|
||||
if name == befehl:
|
||||
return id
|
||||
return None
|
||||
|
||||
def removeSortouts(self,words):
|
||||
w = []
|
||||
for word in words:
|
||||
if word not in self.sortouts:
|
||||
w.append(word)
|
||||
return w
|
||||
|
||||
|
||||
def parseInput(self,input):
|
||||
words = input.split(' ')
|
||||
words = self.removeSortouts(words)
|
||||
parsedCommand = ParsedCommand.ParsedCommand()
|
||||
befehlid = self.ermittleBefehlId(words[0])
|
||||
|
||||
if befehlid != None:
|
||||
befehl = self.befehle[befehlid]
|
||||
parsedCommand.commandid = befehl.id
|
||||
parsedCommand.key = befehl.key
|
||||
|
||||
if len(words) > 1:
|
||||
parsedCommand.gegenstand = words[1]
|
||||
if len(words) > 2:
|
||||
parsedCommand.gegenstand2 = words[2]
|
||||
|
||||
return parsedCommand
|
||||
|
||||
def __init__(self):
|
||||
self.raumliste = {}
|
||||
self.msg = {}
|
||||
self.personen = {}
|
||||
self.bewegungen = {}
|
||||
self.gegenstaende = {}
|
||||
self.befehle = {}
|
||||
self.inventar = {}
|
||||
self.objekte = {}
|
||||
self.sortouts = []
|
||||
self.texte = {}
|
||||
self.aktuellerRaum = None
|
||||
self.parsedCommand = None
|
||||
self.NOEXIT = '-1'
|
||||
self.NORD = '0'
|
||||
self.OST = '1'
|
||||
self.SUED = '2'
|
||||
self.WEST = '3'
|
||||
self.RAUF = '4'
|
||||
self.RUNTER = '5'
|
||||
self.VERSION = '0.5'
|
||||
self.fehler = ''
|
||||
parser = WorldParser.WorldParser(self)
|
||||
parser.parseWorld('world.xml')
|
||||
|
Reference in New Issue
Block a user