def get_card(self): """ Получить карту из стопки карт :return: вернет случайно сгенерированную карточку """ loto_logger.debug(f'Ведущий достает случайную карту') return self.stack.get_random_card()
def get_random_card() -> Card: """ Получить карту из стопки :return: """ loto_logger.debug(f'Получили случайную карту') return Card()
def __init__(self): """ Инициализация мешка """ self.numbers = [i for i in range(1, 91)] loto_logger.debug('Инициализация мешка') self.shake_the_bag()
def shake_the_bag(self): """ Перемешать содержимое мешка """ print('Встряхнул мешок') loto_logger.debug('Встряхнул мешок') shuffle(self.numbers)
def get_barrel(self): """ Вынуть бочонок из мешка :return: бочонок с номером """ barrel = self.bag.get_barrel() loto_logger.debug(f'Ведущий достает бочонок {barrel}') return barrel
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
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])}' )
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
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
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}' )
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
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)
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)
def return_barrel(self, number): """ Вернуть бочонок в мешок """ loto_logger.debug(f'Бочонок {number} вернулся в мешок') self.numbers.append(number)