def player_ends(self): self.player_clock.stop() points = 0 letters = ' ' for letter in self.ai.rack: points += Sack.get_value(letter) letters += f'{letter}, ' self.score.add_points('AI', f'(Zostały {letters[:-2]})', -points) self.score.add_points('Gracz', '', points) self.end_game()
def add_letter(self, letter: str, coords: Coords, extra_points: Optional[int] = 0, is_from_rack: Optional[bool] = False, is_blank: Optional[bool] = False): if not self._start: self._start = coords self._end = coords self._word = letter elif coords < self._start: self._start = coords self._word = letter + self._word self.check_beginning() else: self._end = coords self._word = self._word + letter self.check_end() if not self.is_valid: return letter_points = Sack.get_value(letter) if not is_blank else 0 if is_from_rack: self._added_letters[coords] = letter, letter_points self._rack.remove(letter if letter_points else BLANK) if coords in double_letter_bonuses: letter_points *= 2 elif coords in triple_letter_bonuses: letter_points *= 3 elif coords in double_word_bonuses: self._multiplier *= 2 elif coords in triple_word_bonuses: self._multiplier *= 3 if extra_points: extra_points += letter_points if coords in double_word_bonuses: extra_points *= 2 elif coords in triple_word_bonuses: extra_points *= 3 self._bonus += extra_points self._points += letter_points if len(self._added_letters) == MAX_RACK_SIZE: self._bonus += 50
def add_letters_to_rack(self, letters=None): if not letters: letters = self.sack.draw(MAX_RACK_SIZE - len(self._tiles_in_rack) - len(self._tiles_to_exchange)) for column in range(LEFT_RACK_BOUND, RIGHT_RACK_BOUND + 1): if not letters: return coords = Coords(column, RACK_ROW) if not self.get_tile(coords) and len(self._tiles_in_rack) + len(self._tiles_to_exchange) < MAX_RACK_SIZE: letter = letters.pop() coords = Coords(column, RACK_ROW) points = Sack.get_value(letter) tile = Tile(letter, points, coords, self.scale, self.on_tile_move, self.move_to_rack) self.scene.addItem(tile) self._tiles_in_rack.add(coords) self._tiles[coords] = tile
def points_for_letters(letters: Iterable[str]) -> int: points = 0 for letter in letters: points += Sack.get_value(letter) return points