Beispiel #1
0
    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()
Beispiel #2
0
    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
Beispiel #3
0
    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
Beispiel #4
0
    def points_for_letters(letters: Iterable[str]) -> int:
        points = 0
        for letter in letters:
            points += Sack.get_value(letter)

        return points