This section contains the source code of the game along with its comments.
import random
def draw_hangman(num_of_incr_guesses):
options = {
0: "_______________\n | / | \n |/ |\n |\n |\n |\n |\n |\n |\n=====",
1: "_______________\n | / | \n |/ |\n | O\n |\n |\n |\n |\n |\n=====",
2: "_______________\n | / | \n |/ |\n | O\n | |\n | |\n |\n |\n "
"|\n=====",
3: "_______________\n | / | \n |/ |\n | O\n | __|\n | |\n |\n |\n "
"|\n=====",
4: "_______________\n | / | \n |/ |\n | O\n | __|__\n | |\n |\n "
"|\n |\n=====",
5: "_______________\n | / | \n |/ |\n | O\n | __|__\n | |\n | "
" /\n |\n |\n=====",
6: "_______________\n | / | \n |/ |\n | O\n | __|__\n | |\n | "
" / \ \n |\n |\n=====",
7: "_______________\n | / | \n |/ |\n | X\n | __|__\n | |\n | "
" / \ \n |\n |\n=====",
}
print(options[num_of_incr_guesses])
def pick_random_word():
with open('sowpods_dict.txt', 'r') as f:
list_of_words = f.readlines()
dict_size = len(list_of_words)
random_num = random.randint(0, dict_size + 1)
random_word = list_of_words[random_num].strip()
return random_word
def play_hangman():
secret_word = pick_random_word()
secret_word_length = len(secret_word)
secret_word_with_ending_spaces = ""
for letter in secret_word:
secret_word_with_ending_spaces += letter + " "
max_num_of_guesses = 6
guesses_counter = 0
user_word_list = []
user_wrong_letters = []
for i in range(secret_word_length):
user_word_list.append("_ ")
user_word_str = "".join(user_word_list)
print("Welcome to Hangman! Guess the word before your man gets hung!")
draw_hangman(guesses_counter)
print("This is your secret word:")
print(user_word_str)
while user_word_str != secret_word_with_ending_spaces and guesses_counter <= max_num_of_guesses:
user_letter = input("Guess a letter: ").upper()
if not user_letter.isalpha():
print("Only letters please!")
continue
elif len(user_letter) > 1:
print("Only one letter at a time.")
continue
elif user_letter in user_word_str:
print("You've tried this letter already. Choose a different one.")
continue
elif user_letter in secret_word:
letter_indices_in_sw = [i for i, letter in enumerate(secret_word) if letter == user_letter]
for elem in letter_indices_in_sw:
user_word_list[elem] = user_letter + " "
user_word_str = "".join(user_word_list)
print(user_word_str)
elif user_letter in user_wrong_letters:
print("You've tried this letter before and it's not there just trust me.")
continue
else:
guesses_counter += 1
user_wrong_letters.append(user_letter)
if guesses_counter <= max_num_of_guesses:
draw_hangman(guesses_counter)
print("No such letter! Try a different one.")
if guesses_counter > max_num_of_guesses:
draw_hangman(guesses_counter)
print("You lost! You have reached the maximum number of incorrect guesses.\nThe secret word was --> {} "
"<--\nWhy don't you try again? :)".format(secret_word))
else:
print("Congratulations, you won!\nFancy playing one more time?")
play_again = ""
while play_again not in ("1", "2"):
play_again = input("To play press '1', to exit press '2': ")
if play_again == "1":
print("\n---------------------------->>> NEW GAME <<<----------------------------\n")
return play_hangman()
else:
print("See you soon!")
if __name__ == '__main__':
play_hangman()