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

Терминальная игра Hi-Lo в Python

Это подводит подводит руководство для создания нашей собственной игры Hi-Lo в языке Python.

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

Терминальная игра Hi-Lo в Python

Эта статья вращается вокруг создания нашей собственной игры Hi-Low Card, которую можно играть в командной строке.

Hi-Lo очень простая, но знаменитая игра в казино, где цель игрока – угадать, является ли следующая карта в колоде высокой или низкой. Рейтинг карты начинается в тузе, как самый низкий звание короля, как самый высокий ранг.

Hi-Lo Game Demo

Выглядит просто, верно? Давайте быстро перейдем к разделу дизайна игры.

Дизайн игры

Самая творческая часть игры игры – это дизайн игры. Будучи картой, основанной на терминале, для программиста не было много степеней свободы.

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

Привет lo показ

На экране мы видим, туз сердца, семь бриллиантов и неизвестной следующей карты. Это делается:

def print_cards(prev_card, current_card):
	
	print()
	print("\t ________________      ________________      ________________")
	print("\t|                |    |                |    |                |")
	if prev_card.value == '10' and current_card.value == '10':
		print("\t|  {}            |    |  {}            |    |                |".format(prev_card.value,current_card.value))
	elif prev_card.value == '10': 
		print("\t|  {}            |    |  {}             |    |                |".format(prev_card.value,current_card.value))	
	elif current_card.value == '10':
		print("\t|  {}             |    |  {}            |    |                |".format(prev_card.value,current_card.value))	
	else:
		print("\t|  {}             |    |  {}             |    |                |".format(prev_card.value,current_card.value))	
	print("\t|                |    |                |    |      * *       |")
	print("\t|                |    |                |    |    *     *     |")
	print("\t|                |    |                |    |   *       *    |")
	print("\t|                |    |                |    |   *       *    |")
	print("\t|       {}        |    |       {}        |    |          *     |".format(prev_card.suit, current_card.suit))
	print("\t|                |    |                |    |         *      |")
	print("\t|                |    |                |    |        *       |")
	print("\t|                |    |                |    |                |")
	print("\t|                |    |                |    |                |")
	if prev_card.value == '10' and current_card.value == '10':
		print("\t|            {}  |    |            {}  |    |        *       |".format(prev_card.value,current_card.value))
	elif prev_card.value == '10': 
		print("\t|            {}  |    |            {}   |    |        *       |".format(prev_card.value,current_card.value))	
	elif current_card.value == '10':
		print("\t|            {}   |    |            {}  |    |        *       |".format(prev_card.value,current_card.value))	
	else:
		print("\t|            {}   |    |            {}   |    |        *       |".format(prev_card.value,current_card.value))	
	print("\t|________________|    |________________|    |________________|")
	print()

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

print_cards () Функция принимает два аргумента, которые являются Карта объекты.

Создание карты

Лучший способ представить «игральную карту», используя объекты. Мы создаем Карта класс.

class Card:
	def __init__(self, suit, value):
		self.suit = suit
		self.value = value

Любая карта имеет две характеристики:

  • Костюм – тип костюма карты, например, пики
  • Ценность – значение для лица карты, например, туз или девять.

Чтобы узнать больше классов и объектов в Python, посетить здесь.

Костюмы и ценности

Нам нужны определенные структуры данных для хранения типов костюмов и карт.

# The type of suit
suits = ["Spades", "Hearts", "Clubs", "Diamonds"]

# The suit value 
suits_values = {"Spades":"\u2664", "Hearts":"\u2661", "Clubs": "\u2667", "Diamonds": "\u2662"}

# The type of card
cards = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]

# The card value
cards_values = {"A": 1, "2":2, "3":3, "4":4, "5":5, "6":6, "7":7, "8":8, "9":9, "10":10, "J":11, "Q":12, "K":13}

Каждая из этих структур данных играет некоторую роль в плавном функционировании игры.

Создать колоду карт

Палуба карт содержит 52 карт, каждая с различной комбинацией костюма и ценности. Используя список объектов, мы храним все карты.

# The deck of cards
deck = []

# Loop for every type of suit
for suit in suits:

	# Loop for every type of card in a suit
	for card in cards:

		# Adding card to the deck
		deck.append(Card(suits_values[suit], card))

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

hi_lo_game(deck)

Функция hi_lo_game () несет ответственность за работу игры. Это требует палубы открыток для его работы.

Настройте переменные игры

Прежде чем мы переместимся на игровую логику, нам нужно настроить некоторые переменные игры:

  • Предыдущая карта – Нам нужно инициализировать предыдущую карту с пустой картой.
  • Текущая карта – Инициализируйте текущую карту

    • Стандартное правило игры Hi-Lo требует, чтобы отправная карта не была самая низкая карта или самая высокая карта.
    • Удалите текущую карту из колоды карт
  • Оценка – счет правильных догадок.
  • Шансы – количество шансов осталось на неверное предположение.
def hi_lo_game(deck):

	global cards_values

	# Initialize the previous card
	prev_card = Card(" ", " ")

	# Initialize the current card
	current_card = random.choice(deck)

	# The starting card cannot be lowest or highest
	while current_card.value == "A" or current_card.value == "K":
		current_card = random.choice(deck)

	# Remove the card from the deck	
	deck.remove(current_card)

	# Number of chances left
	chances = 3

	# The current
	score = 0

глобальный ключевое слово до Card_Values В первой строке функции отвечает за получение глобальной переменной Card_Values Определяется за пределами объема текущей функции hi_lo_game () Отказ

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

Одним из ключевых компонентов игровой логики является игровой петлей. В контексте нашей версии игры Hi-Lo, игровая петля зависит от количества шансов, оставленных для игрока. Следовательно:

# The GAME LOOP
while chances:

Хотя петля проходит до тех пор, пока шансы не останутся для игрока, не нулевой.

Дисплей табло

Есть две вещи, которые необходимо отобразить в нашем табло: Оценка и шансы.

# Function to print the scorebaord	
def print_scoreboard(score, chances):
	print("\t\t\t     ____________________")
	print("\t\t\t    |                    |")
	if score >= 10:
		print("\t\t\t    |     Score = {}     |".format(score))
	else:	
		print("\t\t\t    |     Score = {}      |".format(score))
	print("\t\t\t    |  Chances Left = {}  |".format(chances))	
	print("\t\t\t    |____________________|")

Игровое меню

Наше игровое меню – это интерфейс, необходимый для принятия ввода проигрывателя. Во время игрового процесса меню выглядит так:

Привет lo gameplay

Это меню игры создается:

print_scoreboard(score, chances)
print_cards(prev_card, current_card)

print("\t\t   ------------------------------------")
print("\t\t\t\tGAME MENU")
print("\t\t   ------------------------------------")
print()
print("\t\t      Enter 1 to bet for a high card")
print("\t\t      Enter 0 to bet for a low card")
print()

Примите ввод игрока

Единственное, что игрок делает в этой игре, угадает «высокий» или «низкий». В меню игры мы уже выделили 1 к «высокому», тогда как от 0 до «низкого».

# Try block for player input error
try:
	choice = int(input("\t\t\t  Enter your choice = "))
except ValueError:
	clear()
	print("\t\t\tWrong Input!! Try Again.")
	continue	

# Some wrong choice
if choice > 1 or choice < 0:
	clear()
	print("\t\t\tWrong Input!! Try Again.")
	continue		

Есть попробуйте Блок для подавления ошибок и направляя их через кроме раздел.

Переключить карты

Игра Логика для нашей игры Hi-Lo очень проста. Нам нужно переключить текущую карту на предыдущую и неизвестную карту как текущую карту.

# Switch the current card to the previous card
prev_card = current_card

# Choose the new current card
current_card = random.choice(deck)

# Remove the new card from the deck
deck.remove(current_card)

Проверьте круглый результат

После того, как новая карта выбрана, мы можем проверить результат, то есть высокий или низкий.

# A high card
if cards_values[current_card.value] > cards_values[prev_card.value]:
	result = 1

# A low card	
elif cards_values[current_card.value] < cards_values[prev_card.value]:
	result = 0

# Same value card	
else:
	result = -1	

Управление переменными игры

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

# A Tie Round
if result == -1:
	clear()
	print("\t\t\t TIE GAME!! Play Again")

# Round won
elif choice == result:
	clear()
	print("\t\t\t YOU WIN!!! Play Again")
	score = score + 1	

# Round Lost	
else:
	if chances == 1:
		clear()
		print("\t\t\t\tGAME OVER")
		print_cards(prev_card, current_card)
		print("\t\t        Your Final Score =", score)
		print("\t\t      Thank you for playing!!!")
		break	
	clear()
	print("\t\t\t YOU LOSE!! Play Again")
	chances = chances - 1

Нет проблем, пока игрок не будет выиграть. Когда игрок проигрывает, нам нужно также управлять конечной игрой.

Как только игрок потребляет последний шанс, игра отображает последнее состояние, которое включает в себя печати окончательного балла.

Это подводит подводит руководство для создания нашей собственной игры Hi-Lo в языке Python.

Полный код

import random
import os

# Function to clear the terminal
def clear():
	os.system("clear")

# Function to print the scorebaord	
def print_scoreboard(score, chances):
	print("\t\t\t     ____________________")
	print("\t\t\t    |                    |")
	if score >= 10:
		print("\t\t\t    |     Score = {}     |".format(score))
	else:	
		print("\t\t\t    |     Score = {}      |".format(score))
	print("\t\t\t    |  Chances Left = {}  |".format(chances))	
	print("\t\t\t    |____________________|")

# Function to print the cards
def print_cards(prev_card, current_card):
	
	print()
	print("\t ________________      ________________      ________________")
	print("\t|                |    |                |    |                |")
	if prev_card.value == '10' and current_card.value == '10':
		print("\t|  {}            |    |  {}            |    |                |".format(prev_card.value,current_card.value))
	elif prev_card.value == '10': 
		print("\t|  {}            |    |  {}             |    |                |".format(prev_card.value,current_card.value))	
	elif current_card.value == '10':
		print("\t|  {}             |    |  {}            |    |                |".format(prev_card.value,current_card.value))	
	else:
		print("\t|  {}             |    |  {}             |    |                |".format(prev_card.value,current_card.value))	
	print("\t|                |    |                |    |      * *       |")
	print("\t|                |    |                |    |    *     *     |")
	print("\t|                |    |                |    |   *       *    |")
	print("\t|                |    |                |    |   *       *    |")
	print("\t|       {}        |    |       {}        |    |          *     |".format(prev_card.suit, current_card.suit))
	print("\t|                |    |                |    |         *      |")
	print("\t|                |    |                |    |        *       |")
	print("\t|                |    |                |    |                |")
	print("\t|                |    |                |    |                |")
	if prev_card.value == '10' and current_card.value == '10':
		print("\t|            {}  |    |            {}  |    |        *       |".format(prev_card.value,current_card.value))
	elif prev_card.value == '10': 
		print("\t|            {}  |    |            {}   |    |        *       |".format(prev_card.value,current_card.value))	
	elif current_card.value == '10':
		print("\t|            {}   |    |            {}  |    |        *       |".format(prev_card.value,current_card.value))	
	else:
		print("\t|            {}   |    |            {}   |    |        *       |".format(prev_card.value,current_card.value))	
	print("\t|________________|    |________________|    |________________|")
	print()


# The Card class definition
class Card:
	def __init__(self, suit, value):
		self.suit = suit
		self.value = value

def hi_lo_game(deck):

	global cards_values

	# Initialize the previous card
	prev_card = Card(" ", " ")

	# Initialize the current card
	current_card = random.choice(deck)

	# The starting card cannot be lowest or highest
	while current_card.value == "A" or current_card.value == "K":
		current_card = random.choice(deck)

	# Remove the card from the deck	
	deck.remove(current_card)

	# Number of chances left
	chances = 3

	# The current
	score = 0

	# The GAME LOOP
	while chances:

		print_scoreboard(score, chances)
		print_cards(prev_card, current_card)

		print("\t\t   ------------------------------------")
		print("\t\t\t\tGAME MENU")
		print("\t\t   ------------------------------------")
		print()
		print("\t\t      Enter 1 to bet for a high card")
		print("\t\t      Enter 0 to bet for a low card")
		print()
		
		# Check if we reached the end of the deck
		if len(deck) == 0:
			clear()
			print_cards(prev_card, current_card)
			print("\t\t    YOU HAVE REACHED THE END OF THE DECK!")
			print("\t\t           Congratulations!!!")
			print()
			print("\t\t          Your Final Score =", score)
			print("\t\t        Thank you for playing!!!")
			break

		# Try block for player input error
		try:
			choice = int(input("\t\t\t  Enter your choice = "))
		except ValueError:
			clear()
			print("\t\t\tWrong Input!! Try Again.")
			continue	

		# Some wrong choice
		if choice > 1 or choice < 0:
			clear()
			print("\t\t\tWrong Input!! Try Again.")
			continue		

		# Switch the current card to the previous card
		prev_card = current_card

		# Choose the new current card
		current_card = random.choice(deck)

		# Remove the new card from the deck
		deck.remove(current_card)

		# A high card
		if cards_values[current_card.value] > cards_values[prev_card.value]:
			result = 1

		# A low card	
		elif cards_values[current_card.value] < cards_values[prev_card.value]:
			result = 0

		# Same value card	
		else:
			result = -1	 	

		# A Tie Round
		if result == -1:
			clear()
			print("\t\t\t TIE GAME!! Play Again")

		# Round won
		elif choice == result:
			clear()
			print("\t\t\t YOU WIN!!! Play Again")
			score = score + 1	

		# Round Lost	
		else:
			if chances == 1:
				clear()
				print("\t\t\t\tGAME OVER")
				print_cards(prev_card, current_card)
				print("\t\t        Your Final Score =", score)
				print("\t\t      Thank you for playing!!!")
				break	
			clear()
			print("\t\t\t YOU LOSE!! Play Again")
			chances = chances - 1


if __name__ == '__main__':

	# The type of suit
	suits = ["Spades", "Hearts", "Clubs", "Diamonds"]

	# The suit value 
	suits_values = {"Spades":"\u2664", "Hearts":"\u2661", "Clubs": "\u2667", "Diamonds": "\u2662"}

	# The type of card
	cards = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]

	# The card value
	cards_values = {"A": 1, "2":2, "3":3, "4":4, "5":5, "6":6, "7":7, "8":8, "9":9, "10":10, "J":11, "Q":12, "K":13}

	# The deck of cards
	deck = []

	# Loop for every type of suit
	for suit in suits:

		# Loop for every type of card in a suit
		for card in cards:

			# Adding card to the deck
			deck.append(Card(suits_values[suit], card))

	hi_lo_game(deck)

Заключение

Игра Hi-Lo в Python – очень простая игра для создания. Мы надеемся, что основные концепции создания простой терминальной игры были ясны для читателя.

Если у вас есть какие-либо вопросы или предложения, вы можете бросить нам строку в разделе комментариев ниже.