class Frame: def __init__(self, width, height, bgColor, title): self.frame = Canvas(width, height, bgColor, title) # constructs a new Frame object def getWidth(self): return self.frame.getWidth() # returns the width of the Frame def getHeight(self): return self.frame.getHeight() # returns the height of the Frame def setWidth(self, width): self.frame.setWidth(width) # sets a new width for the Frame def setHeight(self, height): self.frame.setHeight(height) # sets a new height for the Frame def add(self, obj): self.frame.add(obj) # adds a new object to the Frame def getContents(self): return self.frame.getContents() def close(self): self.frame.close() def wait(self): self.frame.wait() def remove(self, obj): self.frame.remove(obj) def setTitle(self, title): self.frame.setTitle(title)
class World: def __init__(self,width=500,height=400,color="white",title="Simulated World"): self._canvas = Canvas(width,height,color,title) self._canvas.setAutoRefresh(False) self._star = None self._controller = None self._timestamp = 0 def getWidth(self): return self._canvas.getWidth() def getHeight(self): return self._canvas.getHeight() def setController(self,controller): self._controller = controller def getGravity(self): if self._controller: return self._controller.getGravity() else: return 0.0 def getStar(self): return self._star def _setStar(self,star): if (self._star): self._canvas.remove(star) self._star = star star.setDepth(0) self._canvas.add(star) self._canvas.refresh() def add(self,updatable): try: updatable.advance # note this is not a call, just a check to see if advance exists except: raise StandardError, "You may only add objects which support an appropriate 'advance' method" self._timestamp += 1 updatable.setDepth(self._timestamp) self._canvas.add(updatable) self._canvas.refresh() def remove(self, obj): self._canvas.remove(obj) def numObj(self): return len(self._canvas.getContents()) def _mainloop(self): more = True while more: # global debug # if debug: # print "within world's mainloop" objects = self._canvas.getContents() # latest list of objects for obj in objects: obj.advance(self) self._canvas.refresh() if self._controller: more = self._controller.processDelay(self)