Рубрики
Без рубрики

Создание консольной игры слов с Python

Некоторое время назад, когда я начал учиться кодировать с Python, я написал программу для игры … Tagged с помощью Python, Wordgame, Console, новичков.

Некоторое время назад, когда я начал учиться кодировать с Python, я написал программу для игры, которая очень похожа на Hangman Анкет Особое количество предположений дано, и тогда пользователь пытается угадать буквы секретного слова. Пользователь теряет одно предположение для каждой неправильной попытки, и игра заканчивается либо, когда пользователь полностью догадался, все буквы слова полностью, либо когда у него закончились предположения.

Попасть в это

Вероятно, есть миллион способов написать эту игру, но, поскольку это моя статья, мы будем делать это по -своему.

Мы хотим, чтобы наша игра выглядела как то, что мы имеем ниже:

You've chosen a/an 9-letter word!
Guess a letter: e
Good guess!
Guesses left:  9
Available letters:  a b c d f g h i j k l m n o p q r s t u v w x y z
---E--E--
Guess a letter: l
Good guess!
Guesses left:  9
Available letters:  a b c d f g h i j k m n o p q r s t u v w x y z
---E-LE--
Guess a letter: l
You have already guessed this letter!
Guess a letter:
...........................................

Итак, теперь давайте подумаем о структуре.

  • Нам нужно секретное слово, которое пользователь пытается угадать. Мы могли бы легко сделать это, выбрав случайное слово из списка слов.
  • У пользователя есть 9 догадок или попыток, которые уменьшаются только тогда, когда пользователь ошибочно догадывается.
  • Когда пользователь входит в предположение, мы должны проверить, является ли письмо в нашем секретном словом. Если письмо уже догадалось, мы сообщили пользователю, и, как и те, кто мы являемся, мы не уменьшаем их догадки.
  • После каждого предположения пользователю рассказывают, сколько догадок у него осталось, и буквы, которые еще не пробовали. Им также показано слово с буквами, которые догадались правильно, а остальные буквы заменяются тире, то есть, если слово – банановый, и только «А» догадается правильно, -A-A-A Показано.
  • Мы также должны всегда проверять, не хватает ли у пользователя догадки, чтобы догадки не начали считать негативы.
  • Игра заканчивается либо, когда пользователь смог успешно угадать секретное слово, либо у него заканчиваются догадки.
  • Некоторые краевые случаи, которые следует рассмотреть, являются; Когда пользователь входит в неверное предположение, например, Число, или когда они вводят более одного персонажа одновременно.

Рассматривая все это, код для нашей игры будет разделен на пять отдельных функций/методов.

  • играть в игру
  • check_guess
  • can_be_formed_from
  • display_info
  • format_word

играть в игру

Это точка входа в нашу игру. Здесь пользователь предлагается для их предположения. Затем необходимые проверки проводятся. Чтобы убедиться, что наша игра без ошибок.

import random as r

guesses = 9
letters = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ')


def format_word(guessed_letters, word):
    pass


def display_info(guessed_letters, word):
    pass


def check_guess(guess, word, guessed_letters):
    pass


def can_be_formed_from(letters, word):
    pass


def play_game():
    word_list = ['programmer', 'python', 'defenestrate']
    secret_word = r.choice(word_list)
    word_length = len(secret_word)
    guessed = []
    print(f'You have chosen a/an {word_length}-letter word.')
    while guesses > 0:
        guess = input('Enter a letter: ')
        guess = guess.upper()
        check_guess(guess, secret_word, guessed)
        if can_be_formed_from(guessed, secret_word):
            return print('YOU WON!')
    print('You ran out of guesses.\nYOU LOST!')

Как мы можем видеть выше, случайное слово выбирается из списка слов (вы можете расширить свой список или принести кучу слов в Интернете), а затем мы делаем пользователя, любезно сказать им, как долго это. Тогда до тех пор, пока количество предположений больше нуля, мы продолжаем побуждать пользователя к предположению. check_guess функция (которая Затем мы доберемся до мгновения), чтобы проверить наше предположение и добавить его в Угадал который содержит все буквы, которые были опробованы. can_be_formed_from Функция также вызывается, чтобы проверить, если secret_word может быть сформирован из всех угадаемых букв. Если это возможно, пользователь выигрывает. С другой стороны, если у пользователя заканчиваются предположения, игра закончится. Это будет означать, что пользователь потерял, к сожалению. Но, как однажды сказал Нельсон Мандела:

Вы никогда не проигрываете, вы либо выигрываете, либо учитесь.

check_guess

Эта функция принимает угадаемые буквы, Секретное слово и новое предположение. Он проверяет, если Угадайте, действителен и печатает соответствующее сообщение, если это не так. display_info Функция затем вызывается.

def check_guess(guess, word, guessed_letters):
    global guesses
    if guess in letters and len(guess) == 1 and guess not in guessed_letters:
        guessed_letters.append(guess)
        if guess in word:
            print('Good guess!')
        else:
            print('Bad guess!')
            guesses -= 1
    else:
        if len(guess) != 1:
            print('You must enter one letter, no more, no less!')
        elif guess.upper() not in letters:
            print('Your guess has to be a letter!')
        elif guess in guessed_letters:
            print('This letter has been tried already!')
    display_info(guessed_letters, word)

Выведенный выше, выполняются следующие проверки:

  • Если предположение действительнее, то есть буква английского алфавита (эта игра может быть настроена на работу с любым языком).
  • Если предположение содержит ровно одну букву.
  • Если предположение присутствует в нашем секретном словом.
  • Если введенное письмо уже было опробовано.

can_be_formed_from

Как следует из названия, эта функция принимает две строки и возврата Верно Если вторая строка может быть сформирована из букв первого остального ЛОЖЬ .

def can_be_formed_from(letters, word):
    for letter in word:
        if letter not in letters:
            return False
    return True

display_info

Эта функция принимает угадаемые буквы и секретное слово и генерирует необходимые данные, то есть количество оставшихся предположений, буквы, которые еще не были опробованы и т. Д. Из предоставленных данных.

def display_info(guessed_letters, word):
    available_letters = ' '.join([
        letter for letter in letters if letter not in guessed_letters
    ])
    print(format_word(guessed_letters, word))
    print(f'Guesses left: {guesses}.')
    print(f'Available letters: {available_letters}.')

format_word

Эта функция помогает форматировать наше секретное слово с помощью букв, которые были правильно догаданы. Например, если секретным словом является Python и только ‘n’, ‘o’ и ‘p’ были правильно догаданы, отображается P — On.

def format_word(guessed_letters, word):
    formatted_string = ''
    for letter in word:
        if letter in guessed_letters:
            formatted_string += letter
        else:
            formatted_string += '-'
    return formatted_string

Собираем все это вместе, у нас есть:

word_game.py

import random as r

guesses = 9
letters = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ')


def format_word(guessed_letters, word):
    formatted_string = ''
    for letter in word:
        if letter in guessed_letters:
            formatted_string += letter
        else:
            formatted_string += '-'
    return formatted_string


def display_info(guessed_letters, word):
    available_letters = ' '.join([
        letter for letter in letters if letter not in guessed_letters
    ])
    print(format_word(guessed_letters, word))
    print(f'Guesses left: {guesses}.')
    print(f'Available letters: {available_letters}.')


def check_guess(guess, word, guessed_letters):
    global guesses
    if guess in letters and len(guess) == 1 and guess not in guessed_letters:
        guessed_letters.append(guess)
        if guess in word:
            print('Good guess!')
        else:
            print('Bad guess!')
            guesses -= 1
    else:
        if len(guess) != 1:
            print('You must enter one letter, no more, no less!')
        elif guess.upper() not in letters:
            print('Your guess has to be a letter!')
        elif guess in guessed_letters:
            print('This letter has been tried already!')
    display_info(guessed_letters, word)


def can_be_formed_from(letters, word):
    for letter in word:
        if letter not in letters:
            return False
    return True


def play_game():
    word_list = ['programmer', 'python', 'defenestrate']
    secret_word = r.choice(word_list).upper()
    word_length = len(secret_word)
    guessed = []
    print(f'You have chosen a/an {word_length}-letter word.')
    while guesses > 0:
        guess = input('Enter a letter: ')
        guess = guess.upper()
        check_guess(guess, secret_word, guessed)
        if can_be_formed_from(guessed, secret_word):
            return print('YOU WON!')
    print('You ran out of guesses.\nYOU LOST!')


if __name__ == '__main__':
    play_game()

Вывод

Разделяя наш код на небольшие функции, это заставило создать нашу игру чувствовать себя как прогулка в парке. Я надеюсь, что это чтение было полезно для вас. Полный исходный код можно найти Здесь Анкет Кроме того, подход OOP для нашей игры можно найти Здесь Анкет Не стесняйтесь задавать вопросы здесь или достичь в Twitter @Olumidenwosu Анкет

Оригинал: “https://dev.to/olumidayy/building-a-console-word-game-with-python-5054”