Автор оригинала: Pankaj Kumar.
Терминальная игра Hi-Lo в Python
Эта статья вращается вокруг создания нашей собственной игры Hi-Low Card, которую можно играть в командной строке.
Hi-Lo очень простая, но знаменитая игра в казино, где цель игрока – угадать, является ли следующая карта в колоде высокой или низкой. Рейтинг карты начинается в тузе, как самый низкий звание короля, как самый высокий ранг.
Hi-Lo Game Demo
Выглядит просто, верно? Давайте быстро перейдем к разделу дизайна игры.
Дизайн игры
Самая творческая часть игры игры – это дизайн игры. Будучи картой, основанной на терминале, для программиста не было много степеней свободы.
В определенном мгновении игры отображаются три карты, предыдущая, текущая, и в нижней стороне следующая карта в колоде. Наш дизайн игры выглядит как:
На экране мы видим, туз сердца, семь бриллиантов и неизвестной следующей карты. Это делается:
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 |____________________|")
Игровое меню
Наше игровое меню – это интерфейс, необходимый для принятия ввода проигрывателя. Во время игрового процесса меню выглядит так:
Это меню игры создается:
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 – очень простая игра для создания. Мы надеемся, что основные концепции создания простой терминальной игры были ясны для читателя.
Если у вас есть какие-либо вопросы или предложения, вы можете бросить нам строку в разделе комментариев ниже.