예제 #1
0
 def create_world(self):
     config = self.create_world_config()
     self.world = World(config)
     self.world.create()
예제 #2
0
class GameScreen(CursesScreen, SnakeListener, WorldListener):

    def __init__(self, application):
        CursesScreen.__init__(self, application)

        self.world = None
        self.game_window = None

        self.snake_body = []
        self.score = 0
        self.food = (0, 0)

        self.create()

    def create(self):
        self.create_world()
        self.setup_listener()
        self.create_game_window()

    def create_world(self):
        config = self.create_world_config()
        self.world = World(config)
        self.world.create()

    def create_world_config(self):
        return WorldConfig()

    def setup_listener(self):
        self.world.listener = self
        self.world.snake.listener = self

    def create_game_window(self):
        self.game_window = self.stdscr.derwin(1, 0)

    def setup_gamepad(self):
        def snake_up():
            self.world.snake.direction = Snake.UP
        def snake_right():
            self.world.snake.direction = Snake.RIGHT
        def snake_down():
            self.world.snake.direction = Snake.DOWN
        def snake_left():
            self.world.snake.direction = Snake.LEFT
        def pause():
            self.application.screen = GamePauseScreen(self.application, self)
            logger.info("Pause Menu")

        self.gamepad.commands[GamePad.UP] = snake_up
        self.gamepad.commands[GamePad.RIGHT] = snake_right
        self.gamepad.commands[GamePad.DOWN] = snake_down
        self.gamepad.commands[GamePad.LEFT] = snake_left
        self.gamepad.commands[GamePad.BACK] = pause

    def process_logic(self, delta):
        self.world.update(delta)

    def process_input(self):
        self.gamepad.process_input()

    def render(self):
        self.stdscr.erase()
        self.render_screen()
        self.update_screen()

    def render_screen(self):
        self.render_score()
        self.render_food()
        self.render_snake_body()
        self.render_game_window_border()

    def render_score(self):
        self.stdscr.addstr(0, 0, "Score: {}".format(self.score))

    def render_food(self):
        x, y = self.food
        self.game_window.addch(y + 1, x + 1, '*')

    def render_snake_body(self):
        for x, y in self.snake_body:
            self.game_window.addch(y + 1, x + 1, '#')

    def render_game_window_border(self):
        self.game_window.border()

    def update_screen(self):
        self.stdscr.noutrefresh()
        self.game_window.noutrefresh()
        curses.doupdate()

    def snake_body_updated(self, body):
        self.snake_body = body

    def world_finished(self, world):
        logger.info("Game Over")

    def food_created(self, world):
        self.food = world.food
        logger.info("I see a yummy food at {} :B".format(self.food))

    def score_updated(self, world):
        self.score = world.score
        logger.info("Score updated to {}".format(self.score))