Exemplo n.º 1
0
class GameState(object):
    def __init__(self, screen):
        self.screen = screen
        self.score = 0
        self.is_gameover = True
        self.is_paused = False
        self.time_interval = GameConfig.TIMER_INTERVAL
        self.piece = None
        self.next_piece = None
        self.wall = Wall(self.screen)

    def new_piece(self):
        self.piece = self.next_piece
        shape = GameConfig.SHAPES[random.randint(0,
                                                 len(GameConfig.SHAPES) - 1)]
        self.next_piece = Piece(self.screen, shape, self.wall)

    def add_score(self, elimiate_lines):
        self.score += elimiate_lines * GameConfig.SCORE_PER_LINE

    def start(self):
        self.score = 0
        self.is_gameover = False
        self.is_paused = False
        self.new_piece()
        self.new_piece()
        self.wall.clear()
        self.set_timer()

    def restart(self):
        self.start()

    def gameover(self):
        self.is_gameover = True
        self.clear_timer()

    def pause(self):
        self.is_paused = True
        self.clear_timer()

    def resume(self):
        self.is_paused = False
        self.set_timer()

    def set_timer(self):
        pygame.time.set_timer(pygame.USEREVENT, self.time_interval)

    def clear_timer(self):
        pygame.time.set_timer(pygame.USEREVENT, 0)

    def judge(self):
        elimiate_lines = self.wall.elimiate_lines()
        self.add_score(elimiate_lines)

        for i in range(GameConfig.COLUMN_NUM):
            if self.wall.is_wall(0, i):
                self.gameover()
                return

        self.new_piece()