コード例 #1
0
 def getNumNeighbors(self):
     num_neighbors = 0
     positions = Position.getNeighborPositions(self.position)
     for position in positions:
         if Context.getField().isSiteOccupied(position):
             num_neighbors += 1
     return num_neighbors
コード例 #2
0
 def getNextPosition(self):
     # Diffusion is one-way down.
     positions = Position.getSameHeightNeighborPositions(self.position)
     unoccupied_positions = []
     for position in positions:
         if not Context.getField().isSiteOccupied(position):
             unoccupied_positions.append(position)
     if len(unoccupied_positions) == 0:
         return self.position
     rn = random.randint(0, len(unoccupied_positions)-1)
     position = unoccupied_positions[rn]
     return Context.getField().getLowestUnoccupiedPosition(position.x, position.y)
コード例 #3
0
 def deactivate(self):
     if self.position.z == 0:
         return
     # only deactivate atom underneath
     atom = Context.getField().getSiteAtom(Position.getDownPosition(self.position))
     atom.process.interrupt(('Freeze', self))