Example #1
0
 def get_card(self):
     """
     Получить карту из стопки карт
     :return: вернет случайно сгенерированную карточку
     """
     loto_logger.debug(f'Ведущий достает случайную карту')
     return self.stack.get_random_card()
Example #2
0
 def get_random_card() -> Card:
     """
     Получить карту из стопки
     :return:
     """
     loto_logger.debug(f'Получили случайную карту')
     return Card()
Example #3
0
 def __init__(self):
     """
     Инициализация мешка
     """
     self.numbers = [i for i in range(1, 91)]
     loto_logger.debug('Инициализация мешка')
     self.shake_the_bag()
Example #4
0
 def shake_the_bag(self):
     """
     Перемешать содержимое мешка
     """
     print('Встряхнул мешок')
     loto_logger.debug('Встряхнул мешок')
     shuffle(self.numbers)
Example #5
0
 def get_barrel(self):
     """
     Вынуть бочонок из мешка
     :return: бочонок с номером
     """
     barrel = self.bag.get_barrel()
     loto_logger.debug(f'Ведущий достает бочонок {barrel}')
     return barrel
Example #6
0
 def is_number_on_card(self, number):
     """
     Проверка есть ли номер на карте
     безхитростно говорит правду
     :param number:
     :return: результат ответа True или False
     """
     result = number in self.card.numbers
     loto_logger.debug('Игрок {} говорит что у него {} {}'.format(self.name, number, 'есть' if result else 'нет'))
     return result
Example #7
0
 def __init__(self, players_list):
     """
     Инициализация игры
     :param players_list: список игроков
     """
     self.players = players_list
     loto_logger.debug(
         f'Ведущий создает игру для {len(players_list)} игроков')
     print(
         f'В игре участвуют: {", ".join([player.name for player in self.players])}'
     )
Example #8
0
 def get_barrel(self):
     """
     Достать бочонок из мешка
     """
     try:
         barrel = self.numbers.pop()
         loto_logger.debug(f'Найден бочонок {barrel}')
         return barrel
     except IndexError as e:
         loto_logger.exception(e)
         raise NoBarrelError from e
Example #9
0
    def is_number_on_card(self, number: int) -> bool:
        """
        Проверка есть ли номер на карте
        :param number: номер
        :return: результат ответа True или False
        """
        self.show_card()
        answer = input(f'У вас на карте есть номер {number}? ')
        result = self.answers.get(answer, False)
        loto_logger.debug('Игрок {} говорит что у него {} {}'.format(self.name, number, 'есть' if result else 'нет'))

        return result
Example #10
0
 def start_game(self):
     """
     Начало игры
     выясняется какие бочонки нужно будет вернуть в мешок, чтобы все игроки могли выиграть
     :return:
     """
     all_numbers = [player.card.numbers for player in self.players]
     all_numbers = sum(all_numbers, [])
     self.barrels_to_be_returned = [
         num for num in set(all_numbers)
         if all_numbers.count(num) > 1 and num > 0
     ]
     loto_logger.debug(
         f'Ведущий сформировал список бочонков которые нужно будет вернуть в мешок {self.barrels_to_be_returned}'
     )
Example #11
0
    def __init__(self) -> None:
        """
        Инициализация карты и расположение номеров в соответствие с условиями

        Получилось довольно громоздко и не красиво
        в соответствие с условиями генерации https://infostart.ru/public/144326/
        будет время, переделаю
        """
        self.found = []
        placeholders = self._generate_card()
        placeholders = sum(placeholders, [])

        loto_logger.debug(placeholders)

        try:
            assert len(placeholders) == 27
            assert len([num for num in placeholders if num is not 0]) == 15
        except AssertionError:
            print([num for num in placeholders if num is not 0])

        self.numbers = placeholders
Example #12
0
    def mark_number(self, number: int) -> None:
        """
        Число на карте помечается как найденное
        :param number: номер числа
        """
        loto_logger.debug(f'Пробуем отметить номер {number}')
        loto_logger.debug(f'Номера на карте {self.numbers}')

        if number in self.numbers:
            loto_logger.debug('Номер найден')
            self.found.append(number)
Example #13
0
from log import loto_logger
from loto.exceptions import EndOfTheGame
from loto.game_master import GameMaster
from loto.player import HumanPlayer, AIPlayer

players = [HumanPlayer(name='Человек'), AIPlayer(name='Компьютер')]

master = GameMaster(players_list=players)

print('Раздаем карточки игрокам')

for player in players:
    random_card = master.get_card()
    loto_logger.debug(
        f'Игрок {player.name} получает карту {random_card.numbers}')
    player.get_a_card(random_card)

master.start_game()

while True:
    try:
        loto_logger.debug('-' * 10)
        master.game_cycle()
    except EndOfTheGame as e:
        print(e)
        loto_logger.exception(e)
        break
    except Exception as e:
        loto_logger.exception(e)
Example #14
0
 def return_barrel(self, number):
     """
     Вернуть бочонок в мешок
     """
     loto_logger.debug(f'Бочонок {number} вернулся в мешок')
     self.numbers.append(number)