Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import random
- from time import sleep
- import keyboard
- class Card:
- def __init__(self, name, first=1, last=90):
- self._name = name
- self._in_game_numbers = random.sample(range(first, last+1), 15)
- self._table = [[],
- [],
- []]
- for line in self._table:
- for _ in range(5):
- x = random.choice(self._in_game_numbers)
- self._in_game_numbers.remove(x)
- line.append(x)
- line.sort()
- for _ in range(4):
- line.insert(random.randint(0, 9), ' ')
- def show_card(self):
- print(f'\n{self._name:-^26}')
- for table in self._table:
- print(*table)
- print('-' * 26, '\n')
- def _num_del(self, num):
- self._num = num
- def remove(num, line):
- i = line.index(num)
- line[i] = '--'
- for line in self._table:
- if self._num in line:
- remove(self._num, line)
- return True
- def get_del_result(self, num):
- return self._num_del(num)
- def card_check(self):
- for i in self._table[0] + self._table[1] + self._table[2]:
- if str(i).isdigit():
- return False
- return True
- class LotoBagIndexCount(list):
- # теперь в мешке индекс бочонка соответствует номеру бочонка
- def __getitem__(self, number):
- return list.__getitem__(self, number - 1)
- if __name__ == '__main__':
- print('''Приветствуем Вас в игре "Лото"!\n
- Правила просты: каждый ход тянется бочонок из мешка и если цифра на бочонке
- совпадает с одной из цифр на вашей карточке, смело зачёркивайте ее!
- Но будьте внимательны, если выпавшей цифры нет на вашей карточке, а вы её
- зачеркнули или наоборот, то вы автоматически проигрываете. Желаем удачи!
- \nДля выхода нажмите Q\n''')
- lotobag = LotoBagIndexCount([i for i in range(1, 91)])
- user_card = Card(input('Введите ваше имя: '))
- ai_card = Card('Компьютер')
- def user_choice():
- sleep(1)
- choice = None
- print('Зачёркиваем? [Y/N]', flush=True, end='')
- while choice not in ('y', 'н') or choice not in ('n', 'т'):
- choice = keyboard.read_shortcut()
- if choice == 'y':
- print('\rВы решили зачеркнуть цифру...' + ' ' * 40, flush=True, end=' ')
- sleep(1)
- print('\r' + ' ' * 26, flush=True)
- return 'yes'
- elif choice == 'n':
- print('\rВы решили не зачёркивать цифру...' + ' ' * 40, flush=True, end=' ')
- sleep(1)
- print('\r' + ' ' * 26, flush=True, end=' ')
- return 'no'
- elif choice == 'q':
- print('\nДо свидания!')
- sleep(1)
- exit()
- else:
- print('Примите решение нажав клавиши Y или N...')
- def clear_console():
- os.system('cls' if os.name == 'nt' else 'clear')
- # Реализация самой игры довольно простая, я не стал оборачивать её в класс, на мой взгляд это избыточно
- while True:
- clear_console()
- user_card.show_card()
- ai_card.show_card()
- x = random.choice(lotobag)
- lotobag.remove(x)
- print(f'\rВыпал бочонок с числом {x}, осталось бочонков: {len(lotobag)} |', end=' ')
- a = user_choice()
- ai_card.get_del_result(x)
- if a == 'yes':
- if not user_card.get_del_result(x):
- print('\nТакого числа нет в вашей карте, вы проиграли...')
- print('Попробуйте ещё раз.')
- sleep(3)
- break
- else:
- user_card.get_del_result(x)
- elif a == 'no':
- if user_card.get_del_result(x):
- print('\nВыпавшее число есть на вашей карте, а вы его не зачеркнули...')
- print('Вы проиграли. Попробуйте ещё раз.')
- sleep(3)
- break
- if user_card.card_check():
- print('\rВы победили! Поздравляем. Приходите ещё.')
- sleep(5)
- break
- if ai_card.card_check():
- print('\rУвы, вы проиграли, компьютер заполнил карточку быстрее Вас. Приходите ещё.')
- sleep(5)
- break
Add Comment
Please, Sign In to add comment