Hangman

Форк
0
/
main_file.py 
139 строк · 5.4 Кб
1
from random import choice, shuffle
2
SH = '\\'
3
ALPHABET = 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'
4
FILEPATH = r'singular.txt'
5

6

7
def hung(oops):     #функция рисования состояния виселицы
8
    print(f'''
9
          _______
10
          |/    {'|' if oops > 0 else ' '}
11
          |     {'O' if oops > 1 else ' '}
12
          |    {'/' if oops > 2 else ' '}{'|' if oops > 3 else ' '}{SH if oops > 4 else ' '}
13
          |\   {'/' if oops > 5 else ' '} {SH if oops > 6 else ' '}
14
          |_\___
15
        
16
          ''')
17

18

19
def create_list_words() -> list:        #Создание списка угадываемых слов
20
    words = []
21
    file = open(FILEPATH, encoding='utf-8')
22
    for line in file:
23
        line = line.upper().strip()
24
        if len(line) >= 5:
25
            rus_word = True
26
            for x in line:
27
                if x not in ALPHABET:
28
                    rus_word = False
29
            if rus_word:
30
                words.append(line)
31
    file.close()
32
    if len(words) == 0:
33
        print('В файле нет ни одного слова.')
34
        print('Нажмите ENTER для выхода')
35
        exit()
36
    shuffle(words)
37
    return words
38

39

40
def yes_or_no()  -> bool:       #Функция выбора "Да" или "Нет"
41
    flag = True
42
    result = True
43
    while flag:
44
        vvod = input('"Да" или "Нет" : ').lower()
45
        if vvod == 'да':
46
            break
47
        elif vvod == 'нет':
48
            result = False
49
            flag = False
50
        else:
51
            print('Определитесь с выбором: "Да" или "Нет"!')
52
    return result
53

54

55
def input_char(input_simvol) -> str:    #Ввод символа и его проверка на повторный ввод и на русскоязычность
56
    flag = True
57
    while flag:
58
        char = input('Введите букву: ').upper()
59
        if len(char) > 1:
60
            print('Вводите одну букву!')
61
        elif char not in ALPHABET:
62
            print('Введите букву русского алфавита!')
63
        elif char in input_simvol:
64
            print('Такую букву уже вводили. Введите новую!')
65
        else:
66
            input_simvol.append(char)
67
            flag = False
68
    return char
69

70

71
def replace_mask(mask, char, word):     #Функция изменения маски угадываемого слова если введенная буква есть в слове
72
    res = ''
73
    for i in range(len(mask)):
74
        if word[i].lower() == char.lower():
75
            res += char
76
        else:
77
            res += mask[i]
78
    return res
79

80

81
def restart_game(words_list):       #Функция перезапкуска раунда игры
82
    word = choice(words_list)
83
    print()
84
    print(f'Слово загадано! Его длина: {len(word)} букв.')
85
    mask = '*' * len(word)
86
    input_simvol = []
87
    mistakes = 0
88
    return word, mask, input_simvol, mistakes
89

90

91
def print_round(mask, input_simvol, mistakes):      #Функция отображения состояния игры на экране
92
    print()
93
    print(f'Сейчас угадываемое слово выглядит так: {mask}')
94
    hung(mistakes)
95
    print(f'Осталось ошибок: {7 - mistakes}')
96
    print(f'Введенные ранее буквы: {"-" if len(input_simvol) == 0 else input_simvol}')
97

98

99
def checking_char(char, mask, mistakes, word):      #функция проверки наличия введенного символа в угадываемом слове
100
    if char in word.upper():
101
        mask = replace_mask(mask, char, word)
102
        return mask, mistakes
103
    else:
104
        print(f'Буквы {char.upper()} нет в загаданном слове.')
105
        mistakes += 1
106
        return mask, mistakes
107

108

109
def end_game(word, mask, mistakes):     #Функция окончания раунда игры
110
    if mask == word.upper():
111
        print('Поздравляем! Вы угадали слово. Это действтельно ', word)
112
        print('Желаете сыграть еще?')
113
    elif mistakes == 7:
114
        hung(mistakes)
115
        print('Вас "повесили"! Загаданное слово было: ', word)
116
        print('Желаете сыграть еще?')
117
        
118

119
def main():     #Основная функция игры
120
    words_list = create_list_words()
121
    print('''              Вас приветствует игра "Виселица"!
122
            Правила игры просты: отгадайте загаданное слово за 
123
            отведенное число попыток. Удачи!
124
          ''')
125
    print('            Начать новую игру? ', end='')
126
    while yes_or_no():
127
        print('Начинаем новый раунд игры "Виселица"! Удачи!')
128
        word, mask, input_simvol, mistakes = restart_game(words_list)
129
        while not (word.upper() == mask or mistakes == 7):
130
            print_round(mask, input_simvol, mistakes)
131
            char = input_char(input_simvol)
132
            mask, mistakes = checking_char(char, mask, mistakes, word)
133
            end_game(word, mask, mistakes)
134
    print('Игра завершена.')
135
    input('Нажмите "ENTER" чтобы выйти.')
136

137

138
if __name__ == '__main__':
139
    main()

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.