def placeBeepers(self, street, avenue, howMany=1, byUser=True):
        """
        Place any number of beepers at a corner. Use RobotWorld.infinity to place an infinite number.
        The number will be added to the number currently there. Don't try to reduce the number
        by giving a negative value. Strange behavior can result since negative values are treated as infinite. 
        """
        self.__beeperControl.acquire()
        if howMany == 0:
            return
        legalCorner(street, avenue)
        place = (street, avenue)

        if howMany < 0:
            self._beepers[place] = infinity
            if _window != None:
                _window.deleteBeeper(place)
                _window.placeBeeper(street, avenue, infinity)
                self.__beeperControl.notify()
                self.__beeperControl.release()
            return
        inWorld = self._beepers.get(place, 0)
        toPut = howMany + inWorld
        if inWorld != infinity:
            self._beepers[place] = toPut
            if _window != None:
                if inWorld > 0:
                    _window.deleteBeeper(place)
                _window.placeBeeper(street, avenue, toPut)
        self.__beeperControl.notify()
        self.__beeperControl.release()
Exemplo n.º 2
0
 def __init__(self,
              street,
              avenue,
              direction,
              beepers,
              fill=None,
              outline='black'):
     '''Create a robot in a particular situation. The fill and outline colors (strings) may be 
     ignored in some versions, and some colors might not work.'''
     Observable.__init__(self)
     legalCorner(street, avenue)
     self.__street = street
     self.__avenue = avenue
     self.__direction = direction
     if beepers < 0:
         beepers = infinity
     self.__beepers = beepers
     self.__fill = fill
     self.__outline = outline
     self.__running = True
     self.addObserver(world)
     #        world._World__registerRobot(self)
     self.setChanged()
     self.notifyObservers(self.RobotState(self, self.createAction))
     self.__pausing = False
     self.__userPausing = False
     self.__ID = _incrementRobotCount()
Exemplo n.º 3
0
 def removeWallEastOf(self, street, avenue):
     legalCorner(street, avenue)
     try:
         self._northSouthWalls.pop((street, avenue))
         if window() != None:
             _window.removeWallEastOf(street, avenue)
     except:
         pass
Exemplo n.º 4
0
 def removeWallNorthOf(self, street, avenue):
     legalCorner(street, avenue)
     try:
         self._eastWestWalls.pop((street, avenue))
         if window() != None:
             _window.removeWallNorthOf(street, avenue)
     except:
         pass
Exemplo n.º 5
0
 def removeWallEastOf(self, street, avenue):
     legalCorner(street, avenue)
     try:
         self._northSouthWalls.pop((street, avenue))
         if _window != None:
             _window.removeWallEastOf(street, avenue)
     except:
         #            print "world ns wall"
         pass
Exemplo n.º 6
0
 def removeWallNorthOf(self, street, avenue):
     legalCorner(street, avenue)
     try:
         self._eastWestWalls.pop((street, avenue))
         if _window != None:
             _window.removeWallNorthOf(street, avenue)
     except:
         #            print "world ew wall"
         pass
Exemplo n.º 7
0
 def placeBeepers(self, street, avenue, howMany=1, byUser=True):
     """
     Place any number of beepers at a corner. Use RobotWorld.infinity to place an infinite number.
     The number will be added to the number currently there. Don't try to reduce the number
     by giving a negative value. Strange behavior can result since negative values are treated as infinite. 
     """
     if howMany == 0:
         return
     legalCorner(street, avenue)
     place = (street, avenue)
     if howMany < 0:
         self._beepers[place] = infinity
         return
     inWorld = self._beepers.get(place, 0)
     if inWorld != infinity:
         self._beepers[place] = howMany + inWorld
Exemplo n.º 8
0
    def __init__(self, street, avenue, direction, beepers, fill = 'blue', outline = 'black'):
        "Create a robot in a particular situation."
        Observable.__init__(self)
        legalCorner(street, avenue)
        self.__street = street
        self.__avenue = avenue
        self.__direction = direction
        if beepers < 0 :
            beepers = infinity
        self.__beepers = beepers
        self.__fill = fill
        self.__outline = outline
        self.__running = True;
        self.addObserver(world)
#        world._World__registerRobot(self)
        self.setChanged()
        self.notifyObservers(self.RobotState(self, self.createAction))
        self.__pausing = False
        self.__userPausing = False
        self.__ID = _incrementRobotCount()
Exemplo n.º 9
0
 def placeWallEastOf(self, street, avenue):
     "Place a north-south wall segment east of this corner"
     legalCorner(street, avenue)
     self._northSouthWalls[(street, avenue)] = 1
     World.placeNSWall(street, avenue, 1)
Exemplo n.º 10
0
 def placeWallNorthOf(self, street, avenue):
     "Place an east-west wall segment north of this corner"
     legalCorner(street, avenue)
     self._eastWestWalls[(street, avenue)] = 1
     World.placeEWWall(street, avenue, 1)
Exemplo n.º 11
0
 def placeWallEastOf(self, street, avenue):
     "Place a north-south wall segment east of this corner"
     legalCorner(street, avenue)
     self._northSouthWalls[(street, avenue)] = 1
     if _window != None:
         _window.placeWallEastOf(street, avenue)
Exemplo n.º 12
0
 def placeWallNorthOf(self, street, avenue):
     "Place an east-west wall segment north of this corner"
     legalCorner(street, avenue)
     self._eastWestWalls[(street, avenue)] = 1
     if _window != None:
         _window.placeWallNorthOf(street, avenue)
Exemplo n.º 13
0
 def _clearWestOf(self, street, avenue):
     legalCorner(street, avenue)
     if avenue == 1:
         return False
     return self._northSouthWalls.get((street, avenue - 1), 0) == 0
Exemplo n.º 14
0
 def _clearEastOf(self, street, avenue):
     legalCorner(street, avenue)
     return self._northSouthWalls.get((street, avenue), 0) == 0
Exemplo n.º 15
0
 def _clearSouthOf(self, street, avenue):
     legalCorner(street, avenue)
     if street == 1:
         return False
     return self._eastWestWalls.get((street - 1, avenue), 0) == 0
Exemplo n.º 16
0
 def _clearNorthOf(self, street, avenue):
     legalCorner(street, avenue)
     return self._eastWestWalls.get((street, avenue), 0) == 0