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

Игра Hangman в Python – пошаговое прохождение

В этом руководстве мы узнаем шаги создания собственной игры Hangman на языке Python.

Автор оригинала: Pankaj Kumar.

В этом руководстве мы узнаем шаги создания собственной игры Hangman на языке Python.

О заднем плане

Hangman – это точка зрения, в которой цель игрока – выяснить скрытое слово. Каждое неверное предположение приводит к уменьшению шансов, оставленных для игрока.

Шансы остались представлены в виде подвесного человека. И работа каждого героя – спасти жизни.

Демо GamePlay Hangman игра в Python

Проектирование зависания

Прежде чем мы перейдем к разделу создания игровой логики, нам сначала нужно выяснить, как игра будет поискать любой игрок. В этой игре есть два конкретных компонента дизайна:

  • Часы – Нам нужно обеспечить визуальную помощь игроку в контексте подвесного человека.
  • Дисплей слова – В начале игры слово должно отображаться как пробелы, а не буквы.

Дизайн часы

Как мы знаем, после каждого неверного движения отображается новая часть тела человека человека. Для реализации этого мы храним части тела в списке.

# Stores the hangman's body values
hangman_values = ['O','/','|','\\','|','/','\\']

# Stores the hangman's body values to be shown to the player
show_hangman_values = [' ', ' ', ' ', ' ', ' ', ' ', ' ']

Функция, которая обрабатывает эти значения Hangman, представлена ниже:

# Functuion to print the hangman
def print_hangman(values):
	print()
	print("\t +--------+")
	print("\t |       | |")
	print("\t {}       | |".format(values[0]))
	print("\t{}{}{}      | |".format(values[1], values[2], values[3]))
	print("\t {}       | |".format(values[4]))
	print("\t{} {}      | |".format(values[5],values[6]))
	print("\t         | |")
	print("  _______________|_|___")
	print("  `````````````````````")
	print()

Видео ниже отображает все возможные состояния Hangman в игре. Каждая неверная ошибка добавляет часть тела, пока корпус не будет завершен, и игрок проигрывает.

Окончательное состояние, отображаемое в видео, представляет Hangman, вытекающий виселицы после того, как игрок угадает полное слово.

# Function to print the hangman after winning
def print_hangman_win():
	print()
	print("\t +--------+")
	print("\t         | |")

	print("\t         | |")
	print("\t O       | |")
	print("\t/|\\      | |")
	print("\t |       | |")
	print("  ______/_\\______|_|___")
	print("  `````````````````````")
	print()

Вышеуказанная функция, 'print_hangman_win ()' Позаботьтесь о печати сбежавшего подвеска, когда игрок побеждает.

Дисплей слова

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

# Stores the letters to be displayed
word_display = []

Изначально список 'word_display' Содержит подчеркивание для каждого алфавита в скрытом слове. Следующая функция используется для отображения этого списка.

# Function to print the word to be guessed
def print_word(values):
	print()
	print("\t", end="")
	for x in values:
		print(x, end="")
	print()

Набор данных для слов

В этой части создания игры мы можем позволить нашему воображению бежать диким. Там могут быть несколько способов доступа к списку слов, такие как импорт из .csv Файл, извлечение из базы данных и т. Д.

Чтобы сохранить этот урок простой, мы будем жестко кодировать некоторые категории и слова.

# Types of categories
topics = {1: "DC characters", 2:"Marvel characters", 3:"Anime characters"}

# Words in each category
dataset = {"DC characters":["SUPERMAN", "JOKER", "HARLEY QUINN", "GREEN LANTERN", "FLASH", "WONDER WOMAN", "AQUAMAN", "MARTIAN MANHUNTER", "BATMAN"],\
			 "Marvel characters":["CAPTAIN AMERICA", "IRON MAN", "THANOS", "HAWKEYE", "BLACK PANTHER", "BLACK WIDOW"],
			 "Anime characters":["MONKEY D. LUFFY", "RORONOA ZORO", "LIGHT YAGAMI", "MIDORIYA IZUKU"]
			 }

Давайте понимать, как здесь используются данные-структуры:

  • «Темы» – Этот словарь Python обеспечивает каждую категорию с числовым значением. Это будет дополнительно использовать для реализации меню на основе категории.
  • «DataSet» – Этот словарь Python содержит список слов в каждой категории. После того, как игрок выбирает категорию, мы должны выбрать слова отсюда.

Игровая петля

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

# The GAME LOOP
while True:

В этой игре Loop мы позаботимся о следующих вещах:

Игровое меню

Игровое меню отвечает за предоставление понятия игрового контроля игроку. Игрок решает категорию на основе своих интересов.

# Printing the game menu
print()
print("-----------------------------------------")
print("\t\tGAME MENU")
print("-----------------------------------------")
for key in topics:
	print("Press", key, "to select", topics[key])
print("Press", len(topics)+1, "to quit")	
print()

Желательно всегда предоставить возможность выхода из игры, всякий раз, когда создается игровая меню.

Обработка по выбору категории игроков

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

# Handling the player category choice
try:
	choice = int(input("Enter your choice = "))
except ValueError:
	clear()
	print("Wrong choice!!! Try again")
	continue

# Sanity checks for input
if choice > len(topics)+1:
	clear()
	print("No such topic!!! Try again.")
	continue	

# The EXIT choice	
elif choice == len(topics)+1:
	print()
	print("Thank you for playing!")
	break

После выполнения определенных достоверных чеков мы готовы выбрать слово для игры в игру.

Примечание: То ‘Чисто()’ Функция отвечает за очистку терминала. Это использует встроенный ‘Операционные системы’ Библиотека Python.

Выберите игру игры

Мы используем встроенные библиотеки Python, «Случайный» Для выбора случайного слова из списка определенного категории.

# The topic chosen
chosen_topic = topics[choice]

# The word randomly selected
ran = random.choice(dataset[chosen_topic])

# The overall game function
hangman_game(ran)

После подбора слова наступает игра Game-Logic.

Игровой логика для подвешивания

Функция 'Hangman ()' содержит всю игру функции игры. Он включает в себя хранение неверных догадок, уменьшая количество шансов влево, и печатать специфическое состояние зависания.

# Function for each hangman game
def hangman_game(word):

	clear()

	# Stores the letters to be displayed
	word_display = []

	# Stores the correct letters in the word
	correct_letters = []

	# Stores the incorrect guesses made by the player
	incorrect = []

	# Number of chances (incorrect guesses)
	chances = 0

	# Stores the hangman's body values
	hangman_values = ['O','/','|','\\','|','/','\\']

	# Stores the hangman's body values to be shown to the player
	show_hangman_values = [' ', ' ', ' ', ' ', ' ', ' ', ' ']

Приведенный выше фрагмент кода содержит все элементарные структуры данных и переменные, необходимые для плавного функционирования нашей игры Hangman.

Инициализировать необходимые компоненты

Одним из важнейших аспектов создания игры является начальное состояние игровых компонентов.

# Loop for creating the display word
for char in word:
	if char.isalpha():
		word_display.append('_')
		correct_letters.append(char.upper())
	else:
		word_display.append(char)

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

Примечание: Наша версия игры Hangman поддерживает только угадывание алфавитов. Если читатель хочет добавить функциональность угадать другие элементы, такие как цифры или специальные символы, изменения должны быть сделаны здесь.

Внутренняя игровая петля

Эта внутренняя игровая петля отвечает за управление потоком одного игрового процесса игры Hangman. Он включает в себя отображение правильного отображения, обрабатывающую вход символа, обновляя необходимые структуры данных и другие ключевые аспекты игры.

# Inner Game Loop			
while True:

	# Printing necessary values
	print_hangman(show_hangman_values)
	print_word(word_display)			
	print()
	print("Incorrect characters : ", incorrect)
	print()

Ввод движения игрока

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

  • Допустимая длина – Поскольку мы принимаем один символ, нам нужно проверить, если проигрыватель озорно вводит несколько символов.
  • Алфавит? – Как сказано до того, как наша версия игра Hangman поддерживает только угадывание алфавитов.
  • Уже пробовал – Быть внимательным программистом, мы должны уведомить, входит ли игрок в неверный и уже попробовал алфавит.
# Accepting player input
inp = input("Enter a character = ")
if len(inp) != 1:
	clear()
	print("Wrong choice!! Try Again")
	continue

# Checking whether it is a alphabet
if not inp[0].isalpha():
	clear()
	print("Wrong choice!! Try Again")
	continue

# Checking if it already tried before	
if inp.upper() in incorrect:
	clear()
	print("Already tried!!")
	continue 	

Управлять движением игрока

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

  • Неверный алфавит – Для неправильного движения мы обновляем список неправильных букв и дисплея Hangman (добавление частей тела).
# Incorrect character input	
if inp.upper() not in correct_letters:
	
	# Adding in the incorrect list
	incorrect.append(inp.upper())
	
	# Updating the hangman display
	show_hangman_values[chances] = hangman_values[chances]
	chances = chances + 1
	
	# Checking if the player lost
	if chances == len(hangman_values):
		print()
		clear()
		print("\tGAME OVER!!!")
		print_hangman(hangman_values)
		print("The word is :", word.upper())
		break
  • Правильный алфавит – В случае, если способный игрок входит в правильный алфавит, мы обновляем наше отображение слов.
# Correct character input
else:

	# Updating the word display
	for i in range(len(word)):
		if word[i].upper() == inp.upper():
			word_display[i] = inp.upper()

	# Checking if the player won		
	if check_win(word_display):
		clear()
		print("\tCongratulations! ")
		print_hangman_win()
		print("The word is :", word.upper())
		break

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

Полный код

Ниже приведен полный и запущенный код игры Hangman, обсуждаемый выше:

import random
import os

# Funtion to clear te terminal
def clear():
	os.system("clear")

# Functuion to print the hangman
def print_hangman(values):
	print()
	print("\t +--------+")
	print("\t |       | |")
	print("\t {}       | |".format(values[0]))
	print("\t{}{}{}      | |".format(values[1], values[2], values[3]))
	print("\t {}       | |".format(values[4]))
	print("\t{} {}      | |".format(values[5],values[6]))
	print("\t         | |")
	print("  _______________|_|___")
	print("  `````````````````````")
	print()

# Function to print the hangman after winning
def print_hangman_win():
	print()
	print("\t +--------+")
	print("\t         | |")

	print("\t         | |")
	print("\t O       | |")
	print("\t/|\\      | |")
	print("\t |       | |")
	print("  ______/_\\______|_|___")
	print("  `````````````````````")
	print()

# Function to print the word to be guessed
def print_word(values):
	print()
	print("\t", end="")
	for x in values:
		print(x, end="")
	print()	

# Function to check for win
def check_win(values):
	for char in values:
		if char == '_':
			return False
	return True		

# Function for each hangman game
def hangman_game(word):

	clear()

	# Stores the letters to be displayed
	word_display = []

	# Stores the correct letters in the word
	correct_letters = []

	# Stores the incorrect guesses made by the player
	incorrect = []

	# Number of chances (incorrect guesses)
	chances = 0

	# Stores the hangman's body values
	hangman_values = ['O','/','|','\\','|','/','\\']

	# Stores the hangman's body values to be shown to the player
	show_hangman_values = [' ', ' ', ' ', ' ', ' ', ' ', ' ']

	# Loop for creating the display word
	for char in word:
		if char.isalpha():
			word_display.append('_')
			correct_letters.append(char.upper())
		else:
			word_display.append(char)

	# Game Loop			
	while True:

		# Printing necessary values
		print_hangman(show_hangman_values)
		print_word(word_display)			
		print()
		print("Incorrect characters : ", incorrect)
		print()


		# Accepting player input
		inp = input("Enter a character = ")
		if len(inp) != 1:
			clear()
			print("Wrong choice!! Try Again")
			continue

		# Checking whether it is a alphabet
		if not inp[0].isalpha():
			clear()
			print("Wrong choice!! Try Again")
			continue

		# Checking if it already tried before	
		if inp.upper() in incorrect:
			clear()
			print("Already tried!!")
			continue 	

		# Incorrect character input	
		if inp.upper() not in correct_letters:
			
			# Adding in the incorrect list
			incorrect.append(inp.upper())
			
			# Updating the hangman display
			show_hangman_values[chances] = hangman_values[chances]
			chances = chances + 1
			
			# Checking if the player lost
			if chances == len(hangman_values):
				print()
				clear()
				print("\tGAME OVER!!!")
				print_hangman(hangman_values)
				print("The word is :", word.upper())
				break

		# Correct character input
		else:

			# Updating the word display
			for i in range(len(word)):
				if word[i].upper() == inp.upper():
					word_display[i] = inp.upper()

			# Checking if the player won		
			if check_win(word_display):
				clear()
				print("\tCongratulations! ")
				print_hangman_win()
				print("The word is :", word.upper())
				break
		clear()	
	

if __name__ == "__main__":

	clear()

	# Types of categories
	topics = {1: "DC characters", 2:"Marvel characters", 3:"Anime characters"}

	# Words in each category
	dataset = {"DC characters":["SUPERMAN", "JOKER", "HARLEY QUINN", "GREEN LANTERN", "FLASH", "WONDER WOMAN", "AQUAMAN", "MARTIAN MANHUNTER", "BATMAN"],\
				 "Marvel characters":["CAPTAIN AMERICA", "IRON MAN", "THANOS", "HAWKEYE", "BLACK PANTHER", "BLACK WIDOW"],
				 "Anime characters":["MONKEY D. LUFFY", "RORONOA ZORO", "LIGHT YAGAMI", "MIDORIYA IZUKU"]
				 }
	
	# The GAME LOOP
	while True:

		# Printing the game menu
		print()
		print("-----------------------------------------")
		print("\t\tGAME MENU")
		print("-----------------------------------------")
		for key in topics:
			print("Press", key, "to select", topics[key])
		print("Press", len(topics)+1, "to quit")	
		print()
		
		# Handling the player category choice
		try:
			choice = int(input("Enter your choice = "))
		except ValueError:
			clear()
			print("Wrong choice!!! Try again")
			continue

		# Sanity checks for input
		if choice > len(topics)+1:
			clear()
			print("No such topic!!! Try again.")
			continue	

		# The EXIT choice	
		elif choice == len(topics)+1:
			print()
			print("Thank you for playing!")
			break

		# The topic chosen
		chosen_topic = topics[choice]

		# The word randomly selected
		ran = random.choice(dataset[chosen_topic])

		# The overall game function
		hangman_game(ran)

Заключение

Сначала создание игры Hangman может показаться непростой задачей, но мы надеемся, что этот учебник может очистить заблуждения читателя. Для любых запросов или критики не стесняйтесь комментировать ниже.

Если вы хотите узнать больше о разработке игр на основе терминалов в Python, вы можете проверить другие игры, такие как MineSeeper или Tic-Tac-Toe.