Example #1
0
    def update(self, key='LEFT') -> str:
        """Update World next state (Snake, Food) 
        according current state and keystrokes.

        Keyword Arguments:
            key (str): keystroke signal (default: 'LEFT')

        Returns:
            str: World state signal ('QUIT', 'DONE', 'CONT')
        """

        if key == 'LEFT':
            self.wd.snake_.move_left()
        elif key == 'RIGHT':
            self.wd.snake_.move_right()
        elif key == 'UP':
            self.wd.snake_.move_up()
        elif key == 'DOWN':
            self.wd.snake_.move_down()
        elif key == 'EXIT':  # quit game
            return 'QUIT'
        else:
            pass

        coll = Collision(self.wd)  # init Collision object
        head_collide = coll.check_snake_head()  # check snake head collision

        if head_collide[0]:  # eat tails
            return 'DONE'
        if head_collide[1]:  # eat food
            self.wd.snake_.eat()  # update snake state after eating
            self.wd.food_.spawn_new()  # spawn a new food
            while any(coll.check_new_food()):  # spawn new food w/t collision
                self.wd.food_.spawn_new()
        if head_collide[2]:  # hit wall
            return 'DONE'

        return 'CONT'  # continue game