Advertisement
Guest User

виселица

a guest
Jan 18th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.47 KB | None | 0 0
  1. from tkinter import *
  2. import random
  3.  
  4. root = Tk()
  5. root.title('Виселица')
  6.  
  7. # создаём окно
  8. canvas = Canvas(root, width=600, height=600)
  9. canvas.pack()
  10.  
  11.  
  12. # рисуем клеточки
  13. def but():
  14. y = 0
  15. while y < 600:
  16. x = 0
  17. while x < 600:
  18. canvas.create_rectangle(x, y, x + 33, y + 33, fill='white', outline='blue')
  19. x += 33
  20. y += 33
  21.  
  22.  
  23. # приветствие и правила
  24. faq = '''Привет, игрок!
  25. Я хочу сыграть с тобой в одну игру...
  26. Я загадываю слово и рисую на листе такое
  27. количество подчёркиваний, сколько букв в слове,
  28. оставив тебе только две буквы в подсказку.
  29. Ты начинаешь нажимать на буквы, чтобы
  30. отгадать слово. Если буква есть в слове,
  31. то я впишу её на своё место в слово (если
  32. таких букв несколько — то вписываются все),
  33. а если нет — то я рисую один элемент твоего
  34. персонажа (голова, туловище, 2 руки, 2 ноги
  35. — всего 6 элементов-попыток).
  36. Ты готов рискнуть?'''
  37. canvas.create_text(310, 290, text=faq, font='Arial 16', fill='blue')
  38.  
  39. # слова для игры
  40. words = ['смартфон', 'страница', 'лампочка', 'картинка', 'публично']
  41.  
  42.  
  43. # меняем буквы на чёрточки
  44. def change():
  45. but()
  46. gallows()
  47. word_random = random.choice(words)
  48. word = word_random[1:-1]
  49. word_for_game = []
  50. for i in word:
  51. word_for_game.append(i)
  52. a0 = canvas.create_text(282, 40, text=word_random[0], fill='blue', font='Arial 18')
  53. a1 = canvas.create_text(315, 40, text='_', fill='blue', font='Arial 18')
  54. a2 = canvas.create_text(347, 40, text='_', fill='blue', font='Arial 18')
  55. a3 = canvas.create_text(380, 40, text='_', fill='blue', font='Arial 18')
  56. a4 = canvas.create_text(412, 40, text='_', fill='blue', font='Arial 18')
  57. a5 = canvas.create_text(444, 40, text='_', fill='blue', font='Arial 18')
  58. a6 = canvas.create_text(477, 40, text='_', fill='blue', font='Arial 18')
  59. a7 = canvas.create_text(510, 40, text=word_random[-1], fill='blue', font='Arial 18')
  60. unknown_letters = [1, 2, 3, 4, 5, 6]
  61. alphabet = 'абвгдежзийклмнопрстуфхцчшщъыьэюя'
  62. incorrect = []
  63. correct = []
  64. buttons = {}
  65.  
  66. # проверка для букв
  67. def check(a):
  68. correct_alphabet = alphabet.index(a)
  69. key = alphabet[correct_alphabet]
  70.  
  71. if a in word_for_game:
  72. ind = word_for_game.index(a)
  73. b2 = unknown_letters[ind]
  74. word_for_game[ind] = a
  75.  
  76. # размещение по х и у
  77. def cord():
  78. if b2 == 1:
  79. x1, y1 = 315, 40
  80. if b2 == 2:
  81. x1, y1 = 347, 40
  82. if b2 == 3:
  83. x1, y1 = 380, 40
  84. if b2 == 4:
  85. x1, y1 = 412, 40
  86. if b2 == 5:
  87. x1, y1 = 444, 40
  88. if b2 == 6:
  89. x1, y1 = 477, 40
  90. return x1, y1
  91.  
  92. x1, y1 = cord()
  93.  
  94. buttons[key]['bg'] = 'green'
  95. if a not in word:
  96. buttons[key]['state'] = 'disabled'
  97. if a in word and a not in correct:
  98. correct.append(a)
  99. ind2 = word.index(a)
  100. b2 = unknown_letters[ind2]
  101. x1, y1 = cord()
  102. canvas.create_text(x1, y1, text=word_for_game[ind2], fill='blue', font='Arial 18')
  103. if len(correct) == 6:
  104. canvas.create_text(150, 150, text='Ты победил!', font='Arial 18', fill='blue')
  105. for i in alphabet:
  106. buttons[i]['state'] = 'disabled'
  107. else:
  108. incorrect.append(a)
  109. buttons[key]['bg'] = 'red'
  110. buttons[key]['state'] = 'disabled'
  111. if len(incorrect) == 1:
  112. head()
  113. elif len(incorrect) == 2:
  114. body()
  115. elif len(incorrect) == 3:
  116. right_hand()
  117. elif len(incorrect) == 4:
  118. left_hand()
  119. elif len(incorrect) == 5:
  120. right_leg()
  121. elif len(incorrect) == 6:
  122. left_leg()
  123. rope()
  124. canvas.create_text(150, 150, text='Ты проиграл', fill='black', font='Arial 18')
  125. for i in alphabet:
  126. buttons[i]['state'] = 'disabled'
  127. root.update()
  128.  
  129. # генерируем кнопки
  130. def gen_buttons(letter, x, y):
  131. buttons[letter] = Button(root, text=letter, width=3, height=1, command=lambda: check(letter))
  132. buttons[letter].place(x=str(x), y=str(y))
  133.  
  134. x, y = 265, 110
  135. for i in alphabet[0:8]:
  136. gen_buttons(i, x, y)
  137. x += 33
  138. x, y = 265, 137
  139. for i in alphabet[8:16]:
  140. gen_buttons(i, x, y)
  141. x += 33
  142. x, y = 265, 164
  143. for i in alphabet[16:24]:
  144. gen_buttons(i, x, y)
  145. x += 33
  146. x, y = 265, 191
  147. for i in alphabet[24:32]:
  148. gen_buttons(i, x, y)
  149. x += 33
  150.  
  151.  
  152. # рисуем персонажа и виселицу
  153. def head():
  154. canvas.create_oval(79, 59, 120, 80, width=4, fill='white')
  155. root.update()
  156.  
  157.  
  158. def right_hand():
  159. canvas.create_line(100, 80, 145, 100, width=4)
  160. root.update()
  161.  
  162.  
  163. def left_hand():
  164. canvas.create_line(100, 80, 45, 100, width=4)
  165. root.update()
  166.  
  167.  
  168. def body():
  169. canvas.create_line(100, 80, 100, 200, width=4)
  170. root.update()
  171.  
  172.  
  173. def right_leg():
  174. canvas.create_line(100, 200, 45, 300, width=4)
  175. root.update()
  176.  
  177.  
  178. def left_leg():
  179. canvas.create_line(100, 200, 145, 300, width=4)
  180. root.update()
  181.  
  182.  
  183. def gallows():
  184. canvas.create_line(10, 20, 10, 300, width=4)
  185. canvas.create_line(10, 20, 150, 20, width=4)
  186. root.update()
  187.  
  188.  
  189. def rope():
  190. canvas.create_line(75, 20, 100, 80, width=4)
  191. root.update()
  192.  
  193.  
  194. # кнопка: начать игру
  195. button_start = Button(root, text='Да!', width=5, height=2, command=lambda: change())
  196. button_start.place(x=260, y=460)
  197. button_start['bg'] = 'yellow'
  198.  
  199. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement