# Deklaration der Klasse Roboter

class Roboter(object):
    def __init__(self):
        self.x = 0
        self.y = 0
        self.r = 'S'
        self.w = None      

    def getX(self):
        return self.x

    def getY(self):
        return self.y

    def getR(self):
        return self.r

    def getZustand(self):
        return (self.x, self.y, self.r)

    def setZustand(self, x, y, r):
        self.x = x
        self.y = y
        self.r = r

    def setWelt(self, w):
        self.w = w

    def getWelt(self):
        return self.w

    def schritt(self):
        if self.r == 'O' and self.x < self.w.getFelderX()-1:
            self.x = self.x + 1
        elif self.r == 'S' and self.y < self.w.getFelderY()-1:
            self.y = self.y + 1
        elif self.r == 'W' and self.x > 0:
            self.x = self.x - 1
        elif self.r == 'N' and self.y > 0:
            self.y = self.y - 1

    def rechts(self):
        if self.r == 'O':
            self.r = 'S'
        elif self.r == 'S':
            self.r = 'W'
        elif self.r == 'W':
            self.r = 'N'
        elif self.r == 'N':
            self.r = 'O'

    def links(self):
        if self.r == 'O':
            self.r = 'N'
        elif self.r == 'N':
            self.r = 'W'
        elif self.r == 'W':
            self.r = 'S'
        elif self.r == 'S':
            self.r = 'O'

    def ziegelHinlegen(self):
        if self.r == 'O' and self.x < self.w.getFelderX()-1:
            self.w.incZiegel(self.x+1, self.y)
        elif self.r == 'S' and self.y < self.w.getFelderY()-1:
            self.w.incZiegel(self.x, self.y+1)
        elif self.r == 'W' and self.x > 0:
            self.w.incZiegel(self.x-1, self.y)
        elif self.r == 'N' and self.y > 0:
            self.w.incZiegel(self.x, self.y-1)

    def ziegelAufheben(self):
        if self.r == 'O' and self.x < self.w.getFelderX()-1:
            self.w.decZiegel(self.x+1, self.y)
        elif self.r == 'S' and self.y < self.w.getFelderY()-1:
            self.w.decZiegel(self.x, self.y+1)
        elif self.r == 'W' and self.x > 0:
            self.w.decZiegel(self.x-1, self.y)
        elif self.r == 'N' and self.y > 0:
            self.w.decZiegel(self.x, self.y-1)

    def vorWand(self):
        if self.r == 'O' and self.x < self.w.getFelderX()-1:
            return False
        elif self.r == 'S' and self.y < self.w.getFelderY()-1:
            return False
        elif self.r == 'W' and self.x > 0:
            return False
        elif self.r == 'N' and self.y > 0:
            return False
        else:
            return True

    def nichtVorWand(self):
        return not self.vorWand()

    def vorZiegel(self):
        if self.r == 'O' and self.x < self.w.getFelderX()-1:
            return (self.w.getZiegel(self.x+1, self.y) > 0)
        elif self.r == 'S' and self.y < self.w.getFelderY()-1:
            return (self.w.getZiegel(self.x, self.y+1) > 0)
        elif self.r == 'W' and self.x > 0:
            return (self.w.getZiegel(self.x-1, self.y) > 0)
        elif self.r == 'N' and self.y > 0:
            return (self.w.getZiegel(self.x, self.y-1) > 0)

    def nichtVorZiegel(self):
        return not self.vorZiegel()

    def markeSetzen(self):
        self.w.setMarke(self.x, self.y)

    def markeLoeschen(self):
        self.w.delMarke(self.x, self.y)

    def aufMarke(self):
        if self.w.getMarke(self.x, self.y) == 0:
            return False
        else:
            return True

    def nichtAufMarke(self):
        return not self.aufMarke()


# Deklaration der Klasse Welt

class Welt(object):
    def __init__(self, x, y):
        self.felderX = x
        self.felderY = y
        l = []
        for i in range(self.felderY):
            m = []
            for j in range(self.felderX):
                m = m + [0]
            l = l + [m]
        self.ziegel = l
        l = []
        for i in range(self.felderY):
            m = []
            for j in range(self.felderX):
                m = m + [False]
            l = l + [m]
        self.marken = l
        
    def getFelderX(self):
        return self.felderX

    def getFelderY(self):
        return self.felderY

    def incZiegel(self, x, y):
        self.ziegel[y][x] = self.ziegel[y][x] + 1

    def decZiegel(self, x, y):
        if self.ziegel[y][x] > 0:
            self.ziegel[y][x] = self.ziegel[y][x] - 1

    def getZiegel(self, x, y):
        return self.ziegel[y][x]

    def getAlleZiegel(self):
        return self.ziegel    
    
    def setMarke(self, x, y):
        self.marken[y][x] = True

    def delMarke(self, x, y):
        self.marken[y][x] = False

    def getMarke(self, x, y):
        return self.marken[y][x]

    def getAlleMarken(self):
        return self.marken
