def __init__(self, save): self.history = [] self.clue_sets = config('clue-sets') if len(self.clue_sets) == 0: raise ValueError('At least one complete clue set is needed') self.next = 0 self.state = [] for i in range(6): self.state.append([ None, None, None, None, None ]) self.sel = None self.scores = [ 0, 0, 0, 0 ] self.names = ['Nameless #'+str(i+1) for i in range(4)] self.choosing = 0 self.responding = None self.responded = [ False, False, False, False ] if save: with open(save, 'r') as f: s = load(f, Loader) if len(s['board']) != 6: raise ValueError('Serialized board state must have six columns') for r in s['board']: if len(r) != 5: raise ValueError('Serialized board state must have five rows') if len(s['scores']) != 4: raise ValueError('There have to be exactly four score values') if len(s['names']) != 4: raise ValueError('There have to be exactly four player names') self.state = s['board'] self.scores = s['scores'] self.names = s['names'] self.choosing = s['choosing'] self.append_history()
def publish_event(name, player, value): host = config('mqtt.host', None) if host: port = config('mqtt.port', 1883) topic = config('mqtt.topic', 'cluequiz') try: single(topic, dumps({ 'name': name, 'player': player, 'value': value }), hostname=host, port=port) except: pass
def set_responding(self, i): if config('ignore-responded', False) or not self.responded[i]: self.responding = i self.responded[i] = True publish_event('respond', i, (self.sel[1]+1) * 100) return True return False
def __init__(self, instance): self.serial = Serial(config('serial.port', '/dev/ttyUSB0'), config('serial.baud', 9600)) screen_size = pygame.display.get_surface().get_size() if config.debug: screen_size = (800, 600) self.screen_w = screen_size[0] - (screen_size[0] % 12) cell_w = screen_size[0] // 12 self.clue_w = cell_w * 2 self.score_w = cell_w * 3 half_cell_h = screen_size[1] // 14 self.cell_h = half_cell_h * 2 self.score_h = half_cell_h * 7 self.padding = ((screen_size[0] % 12) // 2, (screen_size[1] % 14) // 2) self.font = pygame.font.Font(None, FONT_SIZE) self.bigfont = pygame.font.Font(None, BIGFONT_SIZE) self.music = config('music', None) if self.music: if isinstance(self.music, str): self.music = [self.music] self.load_next_music() self.values = [] for i in range(1, 6): self.values.append( self.font.render(str(i * 100), True, TEXT_COLOR, CLUE_COLOR)) self.scores = [None, None, None, None] self.render_score(None, instance) self.names = [None, None, None, None] self.render_name(None, instance) self.load_clue_set(instance.next_clue_set()) self.prompt = TextPrompt(self.font, self.score_w, 'Player name', max_width=self.score_w, placeholder='Hier könnte dein Name stehen') self.sound_triggered = False self.state = CHOOSING
def all_responded(self): if config('ignore-responded', False): return False return not (False in self.responded)