Advertisement
Guest User

4.2.2

a guest
Dec 8th, 2019
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.26 KB | None | 0 0
  1. from tkinter import *
  2.  
  3. with open('dict', 'r', encoding='utf8') as f:
  4. dictionary = [line.replace('\n', '') for line in f.readlines()]
  5.  
  6. rules_and_author = """
  7. Правила очень простые - первый игрок назвает слово,
  8. второй игрок называет слово, первая буква которого
  9. совпадает с последней буквой слова, названного первым
  10. игроком. Далее снова первый игрок и т.д по очереди.
  11. Первый игрок, который отправит фразу 'я сдаюсь' -
  12. проиграл.
  13.  
  14. Автор: Tori, студентка группы P3273
  15. """
  16.  
  17. p1_name = ''
  18. p2_name = ''
  19.  
  20. # start window for setting up nicknames
  21. name_window = Tk()
  22. name_window.title = 'Введите имена'
  23. p1_name_label = Label(name_window, text='Имя первого игрока: ')
  24. p2_name_label = Label(name_window, text='Имя второго игрока: ')
  25. p1_name_label.grid(row=1, column=1)
  26. p2_name_label.grid(row=2, column=1)
  27. p1_name_entry = Entry(name_window, width=50)
  28. p2_name_entry = Entry(name_window, width=50)
  29. p1_name_entry.grid(row=1, column=2)
  30. p2_name_entry.grid(row=2, column=2)
  31. name_submit = Button(name_window, text='Готово!', command=name_window.destroy)
  32. name_submit.grid(row=3, column=1)
  33.  
  34. while True:
  35. try:
  36. name_window.update()
  37. p1_name = p1_name_entry.get()
  38. p2_name = p2_name_entry.get()
  39. except:
  40. break
  41.  
  42. class Game:
  43. def __init__(self, p1_name, p2_name, dictionary):
  44. self.last_letter = '' # last used letter
  45. self.used_words = [] # stores all used words
  46. self.bad_letters = ['ъ', 'ь', 'ы'] # we dont have words starts with this letter in Russian language
  47. self.used_words_index = 2 # gui offset
  48. self.dictionary = dictionary # setting game dictionary
  49. self.current_player_name = p1_name # init player names
  50. self.p1_name = p1_name
  51. self.p2_name = p2_name
  52. self.window = Tk() # gui window
  53. self.window.title = 'Словечки'
  54. self.word_field = Entry(self.window, width=50) # field for entering words
  55. self.word_field.grid(row=1, column=0)
  56. self.submit = Button(self.window, text='Готово', command=self.process_turn) # submit button
  57. self.submit.grid(row=1, column=1)
  58. self.status_label = Label(self.window) # label that displays current game state
  59. self.status_label['text'] = f'{self.current_player_name}, назови первое слово!'
  60. self.status_label.grid(row=0, column=0)
  61.  
  62. self.help_button = Button(self.window, text='Спрака', command=self.show_help) # open help button
  63. self.help_button.grid(row=0, column=1)
  64. self.help_label = Label(self.window)
  65. self.help_label['text'] = rules_and_author
  66.  
  67. self.window.mainloop() # gui mainloop
  68.  
  69. def show_help(self):
  70. self.help_button['text'] = 'Спрятать' # 'open help button' -> 'close help button'
  71. self.help_button['command'] = self.hide_help
  72. self.help_label.grid(row=0, column=2) # display rules and author
  73.  
  74. def hide_help(self):
  75. self.help_label.grid_forget() # hide rules and author
  76. self.help_button['text'] = 'Справка' # 'open help button' -> 'close help button'
  77. self.help_button['command'] = self.show_help
  78.  
  79. def process_turn(self):
  80. word = self.word_field.get().lower() # get current word
  81. if self.last_letter == '': # first turn
  82. if word == '': # empty word
  83. self.status_label['text'] = f'Нельзя задать пустое слово! {self.current_player_name}, попробуй еще раз!'
  84. self.word_field.delete(0, 'end')
  85. return
  86. elif word not in self.dictionary: # unknown word
  87. self.status_label['text'] = f'Я не знаю такого слова... {self.current_player_name}, попробуй еще раз!'
  88. self.word_field.delete(0, 'end')
  89. return
  90. else: # update last letter
  91. for letter in reversed(word):
  92. if letter in self.bad_letters:
  93. continue
  94. self.last_letter = letter
  95. break
  96. self.used_words.append(word) # update used words
  97. else: # not first turn
  98. if word == 'я сдаюсь': # process surrender
  99. if self.current_player_name == p1_name:
  100. self.status_label['text'] = f'Поздравляю {self.p2_name} с победой!'
  101. else:
  102. self.status_label['text'] = f'Поздравляю {self.p1_name} с победой!'
  103. self.submit.grid_forget()
  104. return
  105.  
  106. if word == '': # empty word
  107. self.status_label['text'] = f'Нельзя задать пустое слово! {self.current_player_name}, попробуй еще раз!'
  108. self.word_field.delete(0, 'end')
  109. return
  110. elif word not in self.dictionary: # unknown word
  111. self.status_label['text'] = f'Я не знаю такого слова... {self.current_player_name}, попробуй еще раз!'
  112. self.word_field.delete(0, 'end')
  113. return
  114. elif word[0] != self.last_letter: # wrong first letter
  115. self.status_label['text'] = f'Слово должно начинаться с буквы \'{self.last_letter}\'! {self.current_player_name}, попробуй еще раз!'
  116. self.word_field.delete(0, 'end')
  117. return
  118. elif word in self.used_words: # word already used in this session
  119. self.status_label['text'] = f'Такое слово уже было! {self.current_player_name}, попробуй еще раз!'
  120. self.word_field.delete(0, 'end')
  121. return
  122. else: # update last letter
  123. for letter in reversed(word):
  124. if letter in self.bad_letters:
  125. continue
  126. self.last_letter = letter
  127. break
  128. self.used_words.append(word) # update used words
  129. if self.current_player_name == self.p1_name: # update current player
  130. self.current_player_name = self.p2_name
  131. else:
  132. self.current_player_name = self.p1_name
  133. self.status_label['text'] = f'Текущая буква - \'{self.last_letter}\'! {self.current_player_name} - назови слово на эту букву!'
  134. self.word_field.delete(0, 'end')
  135. label = Label(self.window) # display userd words
  136. label['text'] = word
  137. label.grid(row=self.used_words_index, column=0)
  138. self.used_words_index += 1
  139.  
  140. Game(p1_name, p2_name, dictionary)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement