Пример #1
0
class Player:
    """Класс Player представляет игрока.

    Атрибуты экземпляра класса:
      - self.name (str): имя игрока;
      - self.card_list (CardList): выбранные карты игрока.

    Методы экземпляра класса:
      - add_card(): добавляет карту в выбранные;
      - make_choice(): возвращает индекс выбранной игроком карты.
    """
    def __init__(self, name):
        self.name = name
        self.card_list = CardList()

    def __str__(self):
        return self.name + " [" + str(self.card_list) + "] " + str(
            self.card_list.sum())

    def add_card(self, card):
        card.is_face = True
        self.card_list.append(card)

    def make_choice(self):
        return int(input())
Пример #2
0
    def __init__(self, cards_count):
        """Инициализация стола.

        Параметры:
          - cards_count (int): количество карт для игры.

        При инициализации стола происходит генерация набора
        из 'cards_count' карт (номерами от 1 до 'cards_count').
        Если options.debug == True, карты должны быть лицом вверх.
        После генерации их необходимо перемешать -
        используйте self._card_list.shuffle().

        Необходимо удостовериться, что 'cards_count' > 1.
        """
        assert cards_count > 1, 'Количество карт должно быть больше единицы'
        self._card_list = CardList()
        # print(self._card_list._cards)
        self._card_list._cards = [Card(x) for x in range(1, cards_count + 1)]
        # self._card_list._cards=map(Card,list(range(1,cards_count+1)))
# кажется нельзя использовать мап для создания списка объектов класса
        # print(self._card_list._cards)
# используется поле CardList с '_', еще map может не работать с range
        # print(options.debug)
        if options.debug:
            # print('love')
            list(map(lambda x: x.turn_face(), self._card_list._cards))
# почему мап работает только, когда конвертируется в список???
        # print(self._card_list._cards[0].is_face)
# можно ли без lambda?
        self._card_list.shuffle()
Пример #3
0
    def __init__(self, cards_count):
        assert cards_count > 1, "Недостаточное кол-во карт, для игры!"

        self._card_list = CardList()
        for i in range(1, cards_count + 1):
            card = Card(i)
            if options.debug:
                card.is_face = True
            self._card_list.append(card)
        self._card_list.shuffle()
Пример #4
0
    def __init__(self, name):
        """Инициализация игрока.

        Параметры:
          - name (str): имя игрока.

        В процессе инициализации необходимо:
          - запомнить имя игрока;
          - инициализировать набор карт.
        """
        self.name = name
        self.card_list = CardList()
Пример #5
0
class Player:
    """Класс Player представляет игрока.

    Атрибуты экземпляра класса:
      - self.name (str): имя игрока;
      - self.card_list (CardList): выбранные карты игрока.

    Методы экземпляра класса:
      - add_card(): добавляет карту в выбранные;
      - make_choice(): возвращает индекс выбранной игроком карты.
    """
    def __init__(self, name):
        """Инициализация игрока.

        Параметры:
          - name (str): имя игрока.

        В процессе инициализации необходимо:
          - запомнить имя игрока;
          - инициализировать набор карт.
        """
        self.name = name
        self.card_list = CardList()

    def __str__(self):
        """Вернуть строковое представление класса.

        Формат: 'Имя [выбранные карты] сумма', например,
                'Иван [1 2 5] 8'.
        """

        return (self.name + ' [' + str(self.card_list) + '] ' +
                str(self.card_list.sum()))
# возможно не должна возвращать бэки, только числа

    def add_card(self, card):
        """Добавить карту 'card' в выбранные.

        Для игрока карта должна быть открытой (лицом вверх).
        """
        card.turn_face()
        self.card_list.append(card)

# не очень понятно: должна быть проверка на открытость
# или ее нужно открыть после?

    def make_choice(self):
        """Вернуть номер карты, выбранной игроком (int).

        Номер вводится с клавиатуры (первая карта - номер 1).
        """
        return (int(input()))
Пример #6
0
    def create_list(self, language: Language, name: str):
        card_list = CardList(util.slugify(name) + ".json", language, name=name)

        if self.get_flashcard_list_by_name(language, name) is not None:
            msg = QMessageBox()
            msg.setIcon(QMessageBox.Warning)
            msg.setText(
                "Die neue Liste konnte nicht erstellt werden, da eine andere mit dem gleichen Namen bereits existiert."
            )
            msg.setWindowTitle("Liste existiert bereits")
            msg.exec_()

            return

        self.card_lists[language.value][card_list.id] = card_list

        self.save_list(card_list)
Пример #7
0
class CardTable:
    """Класс CardTable представляет игорный стол.

    Умеет:
      - хранить карты, лежащие на столе;
      - "отдавать" карту;
      - определять - пуст или нет.

    Атрибуты экземпляра класса:
      - self._card_list (CardList): набор карт на столе.

    Методы экземпляра класса:
      - self.take_card(): берет карту со стола;
      - self.is_empty(): True, если на слоле нет карт.

    Свойства:
      - card_count (int): количество карт на столе.
    """
    def __init__(self, cards_count):
        assert cards_count > 1, "Недостаточное кол-во карт, для игры!"

        self._card_list = CardList()
        for i in range(1, cards_count + 1):
            card = Card(i)
            if options.debug:
                card.is_face = True
            self._card_list.append(card)
        self._card_list.shuffle()

    def __str__(self):
        line = "Карты на столе ({length}): {cards}".format(
            length=len(self._card_list), cards=self._card_list)
        return line

    def take_card(self, index):
        try:
            if 1 <= index:
                return self._card_list.pop(index - 1)
            else:
                raise IndexError
        except IndexError:
            raise

    def is_empty(self):
        if self._card_list.is_empty():
            return True
        else:
            return False

    @property
    def card_count(self):
        return len(self._card_list)
Пример #8
0
    def load_lists(self):
        for language in Language:
            self.card_lists[language.value] = {}

            language_dir = self.language_dirs[language.name]

            for file in os.listdir(language_dir):
                if file.endswith(".json"):
                    try:
                        with open(os.path.join(language_dir, file),
                                  encoding='utf-8') as json_file:
                            card_list = CardList(
                                file, language, json_data=json.load(json_file))
                            self.card_lists[language.value][
                                card_list.id] = card_list
                    except:
                        print("Invalid", language.name, "card list '", file,
                              "'")
                        traceback.print_exc()
Пример #9
0
    draw_cards(players_hand, hand_size)
    draw_cards(bots_hand, hand_size)


def draw_cards(card_list, num_of_cards):
    # draws num_of_cards from the top of the deck to the input card_list
    for i in range(num_of_cards):
        card_list.cards.append(deck.cards.pop(0))


def display_current():
    print(players_hand)
    print(bots_hand)
    print(deck.cards)


if __name__ == '__main__':
    # script for playing 2s and 4s 1v1 vs a bot

    # Hardcoded default variables for the game
    hand_size = 5

    # init stuff
    players_hand = CardList()
    bots_hand = CardList()
    deck = CardList()
    play_pile = CardList()
    new_game()

Пример #10
0
class CardTable:
    """Класс CardTable представляет игорный стол.

    Умеет:
      - хранить карты, лежащие на столе;
      - "отдавать" карту;
      - определять - пуст или нет.

    Атрибуты экземпляра класса:
      - self._card_list (CardList): набор карт на столе.

    Методы экземпляра класса:
      - self.take_card(): берет карту со стола;
      - self.is_empty(): True, если на слоле нет карт.

    Свойства:
      - card_count (int): количество карт на столе.
    """

    def __init__(self, cards_count):
        """Инициализация стола.

        Параметры:
          - cards_count (int): количество карт для игры.

        При инициализации стола происходит генерация набора
        из 'cards_count' карт (номерами от 1 до 'cards_count').
        Если options.debug == True, карты должны быть лицом вверх.
        После генерации их необходимо перемешать -
        используйте self._card_list.shuffle().

        Необходимо удостовериться, что 'cards_count' > 1.
        """
        assert cards_count > 1, 'Количество карт должно быть больше единицы'
        self._card_list = CardList()
        # print(self._card_list._cards)
        self._card_list._cards = [Card(x) for x in range(1, cards_count + 1)]
        # self._card_list._cards=map(Card,list(range(1,cards_count+1)))
# кажется нельзя использовать мап для создания списка объектов класса
        # print(self._card_list._cards)
# используется поле CardList с '_', еще map может не работать с range
        # print(options.debug)
        if options.debug:
            # print('love')
            list(map(lambda x: x.turn_face(), self._card_list._cards))
# почему мап работает только, когда конвертируется в список???
        # print(self._card_list._cards[0].is_face)
# можно ли без lambda?
        self._card_list.shuffle()

    def __str__(self):
        """Вернуть строковое представление карт на столе.

        Формат:

        Карты на столе (3): X X X
        """

        return('Карты на столе ({}): {}'.format(self.card_count,
                                                self._card_list))

    def take_card(self, index):
        """Взять (вернуть) со стола одну карту под номером 'index'.

        Параметры:
          - 'index' - номер карты, начиная с 1.

        Исключения:
          - IndexError: если не 1 <= index <= card_count.
        """
        if not 1 <= index <= self.card_count:
            raise IndexError('Номер карты должен быть в интервале [1;{}]'
                             .format(self.card_count))
        return self._card_list.pop(index - 1)

    def is_empty(self):
        """Вернуть True, если на столе нет карт."""
        return self._card_list.is_empty()

    @property
    def card_count(self):
        """Вернуть количество карт на столе."""
        return len(self._card_list)
Пример #11
0
 def save_list(self, card_list: CardList):
     with open(
             os.path.join(self.language_dirs[card_list.language.name],
                          card_list.filename), 'w') as outfile:
         json.dump(card_list.to_dict(), outfile)
Пример #12
0
    Attributes:
        normal_cards: 通常札
        trump_cards: 切札
        extra_cards: 追加札・毒
    """
    def __init__(self, normal_cards, trump_cards, extra_cards=None):
        # TODO: 追加札はカードから得る(引数で与えない)
        self.normal_cards = normal_cards
        self.trump_cards = trump_cards
        if extra_cards is None:
            self.extra_cards = []
        else:
            self.extra_cards = extra_cards

    def __str__(self):
        return str(self.normal_cards + self.trump_cards)


card_list = CardList()

# ウツロのかけら初期デッキ
utsuro_no_kakera_1 = Deck(
    [card_list[Goddess.UTSURO_HAJIMARI][0][0][i][0] for i in range(7)],
    [card_list[Goddess.UTSURO_HAJIMARI][0][1][i][0] for i in range(3)])

# ホノカのかけら初期デッキ
honoka_no_kakera_1 = Deck(
    [card_list[Goddess.HONOKA_HAJIMARI][0][0][i][0] for i in range(7)],
    [card_list[Goddess.HONOKA_HAJIMARI][0][1][i][0] for i in range(3)])
Пример #13
0
 def __init__(self, name):
     self.name = name
     self.card_list = CardList()