Ejemplo n.º 1
0
class App(object):
    def __init__(self):
        self._running = False
        self._main_clock = pygame.time.Clock()
        self._display_surf = None
        self.size = self.width, self.height = 640, 480
        self._game = Game()
        self._snake = Snake()
        self._snake.set_position(100, 100)

    def on_init(self):
        pygame.init()
        
        self._display_surf = pygame.display.set_mode(
                                self.size,
                                pygame.HWSURFACE | pygame.DOUBLEBUF)
        
        pygame.display.set_caption('Snake')

        self._running = True

    def on_event(self, event):
        if event.type == pygame.QUIT:
            self._running = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                self._snake.set_direction(Snake.SNAKE_DIR_LEFT)
            if event.key == pygame.K_RIGHT:
                self._snake.set_direction(Snake.SNAKE_DIR_RIGHT)
            if event.key == pygame.K_UP:
                self._snake.set_direction(Snake.SNAKE_DIR_UP)
            if event.key == pygame.K_DOWN:
                self._snake.set_direction(Snake.SNAKE_DIR_DOWN)
            if event.key == pygame.K_SPACE:
                self._snake.set_direction(Snake.SNAKE_DIR_NONE)

    def on_cleanup(self):
        pygame.quit()
        sys.exit()

    def on_loop(self):
        """
        Calculations and objects update
        """
        self._snake.update()     
    
    def on_draw(self):
        """
        Draw all objects
        """
        self._display_surf.fill(Colors['BACKGROUND'])
        
        self._snake.draw(self._display_surf)
    
    def on_execute(self):
        self.on_init()
  
        """
        Main loop
        """
        while self._running:
            for event in pygame.event.get():
                self.on_event(event)

            self.on_loop()
            
            self.on_draw()
            
            pygame.display.flip()
            
            self._main_clock.tick(60)
        
        self.on_cleanup()