class GridControl(object): def __init__(self, sizex, sizey): self.sizex = sizex self.sizey = sizey self.view = GridView(sizex,sizey,800,480) self.model = GridModel(sizex,sizey) self.keyPressed = False self.action() def action(self): while True: self.beforeAction() for event in pygame.event.get(): self.handleEvent(event) self.afterAction() def beforeAction(self): pass def afterAction(self): pass def handleEvent(self, event): if event.type == QUIT: self.triggerEnd() if event.type == MOUSEBUTTONDOWN: self.handleMouseButtonEvents(event) if event.type == KEYUP: self.keyPressed = False if event.type == KEYDOWN and not self.keyPressed: self.keyPressed = True self.handleKeyEvents(event) def handleKeyEvents(self, event): if event.key == pygame.K_ESCAPE or event.key == pygame.K_q: self.triggerEnd() def triggerEnd(self): exit() def handleMouseButtonEvents(self, event): (x,y) = event.pos (bx,by) = self.view.point2Box(x,y) if bx in range(self.sizex) and by in range(self.sizey): if event.button == 1: self.setBox(bx,by) elif event.button == 3: self.unsetBox(bx,by) def renderModel(self): for x in range(self.sizex): for y in range(self.sizey): if self.model.getPoint(x,y) == 1: self.view.setBox(x,y) else: self.view.unsetBox(x,y) self.view.update() def setBox(self,bx,by): self.view.setBox(bx,by) self.model.setPoint(bx,by) self.view.update() def unsetBox(self,bx,by): self.view.unsetBox(bx,by) self.model.unsetPoint(bx,by) self.view.update() def invertBox(self,bx,by): pointStatus = self.model.getPoint(bx,by) if pointStatus == 0: self.setBox(bx,by) elif pointStatus ==1: self.unsetBox(bx,by)