Guest User

Untitled

a guest
Apr 26th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.99 KB | None | 0 0
  1. import os
  2. import random
  3. from time import sleep
  4.  
  5. import keyboard
  6.  
  7.  
  8. class Card:
  9. def __init__(self, name, first=1, last=90):
  10. self._name = name
  11. self._in_game_numbers = random.sample(range(first, last+1), 15)
  12. self._table = [[],
  13. [],
  14. []]
  15.  
  16. for line in self._table:
  17. for _ in range(5):
  18. x = random.choice(self._in_game_numbers)
  19. self._in_game_numbers.remove(x)
  20. line.append(x)
  21. line.sort()
  22. for _ in range(4):
  23. line.insert(random.randint(0, 9), ' ')
  24.  
  25. def show_card(self):
  26. print(f'\n{self._name:-^26}')
  27. for table in self._table:
  28. print(*table)
  29. print('-' * 26, '\n')
  30.  
  31. def _num_del(self, num):
  32. self._num = num
  33.  
  34. def remove(num, line):
  35. i = line.index(num)
  36. line[i] = '--'
  37.  
  38. for line in self._table:
  39. if self._num in line:
  40. remove(self._num, line)
  41. return True
  42.  
  43. def get_del_result(self, num):
  44. return self._num_del(num)
  45.  
  46. def card_check(self):
  47. for i in self._table[0] + self._table[1] + self._table[2]:
  48. if str(i).isdigit():
  49. return False
  50. return True
  51.  
  52.  
  53. class LotoBagIndexCount(list):
  54. # теперь в мешке индекс бочонка соответствует номеру бочонка
  55. def __getitem__(self, number):
  56. return list.__getitem__(self, number - 1)
  57.  
  58.  
  59. if __name__ == '__main__':
  60. print('''Приветствуем Вас в игре "Лото"!\n
  61. Правила просты: каждый ход тянется бочонок из мешка и если цифра на бочонке
  62. совпадает с одной из цифр на вашей карточке, смело зачёркивайте ее!
  63. Но будьте внимательны, если выпавшей цифры нет на вашей карточке, а вы её
  64. зачеркнули или наоборот, то вы автоматически проигрываете. Желаем удачи!
  65. \nДля выхода нажмите Q\n''')
  66.  
  67. lotobag = LotoBagIndexCount([i for i in range(1, 91)])
  68. user_card = Card(input('Введите ваше имя: '))
  69. ai_card = Card('Компьютер')
  70.  
  71.  
  72. def user_choice():
  73. sleep(1)
  74. choice = None
  75. print('Зачёркиваем? [Y/N]', flush=True, end='')
  76. while choice not in ('y', 'н') or choice not in ('n', 'т'):
  77. choice = keyboard.read_shortcut()
  78. if choice == 'y':
  79. print('\rВы решили зачеркнуть цифру...' + ' ' * 40, flush=True, end=' ')
  80. sleep(1)
  81. print('\r' + ' ' * 26, flush=True)
  82. return 'yes'
  83. elif choice == 'n':
  84. print('\rВы решили не зачёркивать цифру...' + ' ' * 40, flush=True, end=' ')
  85. sleep(1)
  86. print('\r' + ' ' * 26, flush=True, end=' ')
  87. return 'no'
  88. elif choice == 'q':
  89. print('\nДо свидания!')
  90. sleep(1)
  91. exit()
  92. else:
  93. print('Примите решение нажав клавиши Y или N...')
  94.  
  95.  
  96. def clear_console():
  97. os.system('cls' if os.name == 'nt' else 'clear')
  98.  
  99.  
  100. # Реализация самой игры довольно простая, я не стал оборачивать её в класс, на мой взгляд это избыточно
  101. while True:
  102. clear_console()
  103. user_card.show_card()
  104. ai_card.show_card()
  105. x = random.choice(lotobag)
  106. lotobag.remove(x)
  107. print(f'\rВыпал бочонок с числом {x}, осталось бочонков: {len(lotobag)} |', end=' ')
  108. a = user_choice()
  109. ai_card.get_del_result(x)
  110. if a == 'yes':
  111. if not user_card.get_del_result(x):
  112. print('\nТакого числа нет в вашей карте, вы проиграли...')
  113. print('Попробуйте ещё раз.')
  114. sleep(3)
  115. break
  116. else:
  117. user_card.get_del_result(x)
  118. elif a == 'no':
  119. if user_card.get_del_result(x):
  120. print('\nВыпавшее число есть на вашей карте, а вы его не зачеркнули...')
  121. print('Вы проиграли. Попробуйте ещё раз.')
  122. sleep(3)
  123. break
  124. if user_card.card_check():
  125. print('\rВы победили! Поздравляем. Приходите ещё.')
  126. sleep(5)
  127. break
  128. if ai_card.card_check():
  129. print('\rУвы, вы проиграли, компьютер заполнил карточку быстрее Вас. Приходите ещё.')
  130. sleep(5)
  131. break
Add Comment
Please, Sign In to add comment