Generators

Clue and code generators. These are used to help initialize teams or rounds, but can be replaced with custom input.

RandomCodes

Generator for generating random codes for each team in the Decrypto game.

Parameters:
  • keyword_cards (Sequence[Keywords]) –

    The keyword cards for each team.

  • code_lengths (Sequence[int]) –

    The lengths of the codes for each team. Defaults to DEFAULT_CODE_LENGTH.

  • seed (int) –

    The random seed for consistent code generation. Defaults to None.

Yields:
  • tuple[Code, Code]: A tuple containing the randomly generated codes for each team.

Source code in /home/docs/checkouts/readthedocs.org/user_builds/decryptogame/envs/latest/lib/python3.10/site-packages/decryptogame/generators.py
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
class RandomCodes:
    """Generator for generating random codes for each team in the Decrypto game.

    Args:
        keyword_cards (Sequence[Keywords]): The keyword cards for each team.
        code_lengths (Sequence[int], optional): The lengths of the codes for each team. Defaults to DEFAULT_CODE_LENGTH.
        seed (int, optional): The random seed for consistent code generation. Defaults to None.

    Yields:
        tuple[Code, Code]: A tuple containing the randomly generated codes for each team.
    """
    def __init__(self, keyword_cards: Sequence[Keywords], code_lengths: Sequence[int] = None, seed: Optional[int] = None):
        self.code_lengths = code_lengths if code_lengths is not None else [DEFAULT_CODE_LENGTH] * len(keyword_cards)
        self.random = random.Random(seed) if seed is not None else random.Random()
        self.team_codes = []
        for keywords, code_length in zip(keyword_cards, self.code_lengths):
            codes = list(permutations(range(len(keywords)), code_length))
            self.team_codes.append(codes)

    def __next__(self) -> tuple[Code, Code]:
        """Generate the next set of random codes for each team.

        Returns:
            tuple[Code, Code]: A tuple containing the randomly generated codes for each team.
        """
        return [self.random.choice(codes) for codes in self.team_codes]

    def __iter__(self):
        """Return the generator as an iterable object.

        Returns:
            RandomCodes: The generator object itself.
        """
        return self

__iter__()

Return the generator as an iterable object.

Returns:
  • RandomCodes

    The generator object itself.

/home/docs/checkouts/readthedocs.org/user_builds/decryptogame/envs/latest/lib/python3.10/site-packages/decryptogame/generators.py
39
40
41
42
43
44
45
def __iter__(self):
    """Return the generator as an iterable object.

    Returns:
        RandomCodes: The generator object itself.
    """
    return self

__next__()

Generate the next set of random codes for each team.

Returns:
  • tuple[Code, Code]

    tuple[Code, Code]: A tuple containing the randomly generated codes for each team.

/home/docs/checkouts/readthedocs.org/user_builds/decryptogame/envs/latest/lib/python3.10/site-packages/decryptogame/generators.py
31
32
33
34
35
36
37
def __next__(self) -> tuple[Code, Code]:
    """Generate the next set of random codes for each team.

    Returns:
        tuple[Code, Code]: A tuple containing the randomly generated codes for each team.
    """
    return [self.random.choice(codes) for codes in self.team_codes]

RandomKeywordCards

Generator for generating random keyword cards for the Decrypto game.

Parameters:
  • card_lengths (Sequence[int]) –

    The number of keywords on each team's keyword card. Defaults to DEFAULT_CARD_LENGTH.

  • words (list[str]) –

    The list of words to use for generating keyword cards. Defaults to the official English word list.

  • seed (int) –

    The random seed for consistent card generation. Defaults to None.

Yields:
  • tuple[Keywords, Keywords]: A tuple containing the randomly generated keyword cards for each team.

Source code in /home/docs/checkouts/readthedocs.org/user_builds/decryptogame/envs/latest/lib/python3.10/site-packages/decryptogame/generators.py
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
class RandomKeywordCards:
    """Generator for generating random keyword cards for the Decrypto game.

    Args:
        card_lengths (Sequence[int], optional): The number of keywords on each team's keyword card. Defaults to DEFAULT_CARD_LENGTH.
        words (list[str], optional): The list of words to use for generating keyword cards. Defaults to the official English word list.
        seed (int, optional): The random seed for consistent card generation. Defaults to None.

    Yields:
        tuple[Keywords, Keywords]: A tuple containing the randomly generated keyword cards for each team.
    """
    def __init__(self, card_lengths: Sequence[int] = None, words: list[str] = english.words, seed: Optional[int] = None):
        self.card_lengths = card_lengths if card_lengths is not None else [DEFAULT_CARD_LENGTH] * 2
        self.words = words
        self.random = random.Random(seed) if seed is not None else random.Random()

    def __next__(self) -> tuple[Keywords, Keywords]:
        """Generate the next set of random keyword cards for each team.

        Returns:
            tuple[Keywords, Keywords]: A tuple containing the randomly generated keyword cards for each team.
        """
        word_indices = list(range(len(self.words)))
        cards = []
        for card_length in self.card_lengths:
            keyword_indices = []
            while len(keyword_indices) < card_length:
                keyword_index = self.random.choice(word_indices)
                word_indices.remove(keyword_index)
                keyword_indices.append(keyword_index)
            cards.append(tuple(self.words[i] for i in keyword_indices))
        return cards

    def __iter__(self):
        """Return the generator as an iterable object.

        Returns:
            RandomKeywordCards: The generator object itself.
        """
        return self

__iter__()

Return the generator as an iterable object.

Returns:
  • RandomKeywordCards

    The generator object itself.

/home/docs/checkouts/readthedocs.org/user_builds/decryptogame/envs/latest/lib/python3.10/site-packages/decryptogame/generators.py
80
81
82
83
84
85
86
def __iter__(self):
    """Return the generator as an iterable object.

    Returns:
        RandomKeywordCards: The generator object itself.
    """
    return self

__next__()

Generate the next set of random keyword cards for each team.

Returns:
  • tuple[Keywords, Keywords]

    tuple[Keywords, Keywords]: A tuple containing the randomly generated keyword cards for each team.

/home/docs/checkouts/readthedocs.org/user_builds/decryptogame/envs/latest/lib/python3.10/site-packages/decryptogame/generators.py
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
def __next__(self) -> tuple[Keywords, Keywords]:
    """Generate the next set of random keyword cards for each team.

    Returns:
        tuple[Keywords, Keywords]: A tuple containing the randomly generated keyword cards for each team.
    """
    word_indices = list(range(len(self.words)))
    cards = []
    for card_length in self.card_lengths:
        keyword_indices = []
        while len(keyword_indices) < card_length:
            keyword_index = self.random.choice(word_indices)
            word_indices.remove(keyword_index)
            keyword_indices.append(keyword_index)
        cards.append(tuple(self.words[i] for i in keyword_indices))
    return cards