Автор оригинала: Pankaj Kumar.
Ножницы для рок-бумаги в Python – полный пошаговый гид
В этой статье мы пройдемся по шагам для создания собственной игры ножницы рок-бумаги в языке Python.
О ножницах для рок-бумаги
Традиционные ножницы для рок-бумаги – это игра из двух игроков, в которой каждый игрок одновременно выбирает, либо рок, бумагу или ножницы, учитывая, что, рок-раздавшись ножницами, ножницами порезает бумагу, а также бумажные охватывает рок. Основываясь на правилах, победитель решается.
Если вы знакомы с популярным сериалом, Теория большого взрыва , вы можете узнать другую версию игры под названием Rock-Paper-stassors-Lizard-Spock. Ниже инфографики может помочь вам понять.
Направление стрелки определяет победителя. Стрелки, выходящие из сущности, значит, превосходство этого объекта в этом конкретном матче.
GamePlay Demo.
Создание ножницы для рок-бумаги в Python
Игра, которую мы создадим сегодня, поддерживает обе версии рок-бумаги-ножниц. Не все будут стремиться к воспроизведению новой версии игры, поэтому нам нужно игровое меню для разделения базы вентилятора. Меню выглядит так.
Создание структур данных
Существует две конкретные структуры данных, необходимые для полного функционирования игры.
# The mapping between moves and numbers game_map = {0:"rock", 1:"paper", 2:"scissors", 3:"lizard", 4:"Spock"} # Win-lose matrix for traditional game rps_table = [[-1, 1, 0], [1, -1, 2], [0, 2, -1]] # Win-lose matrix for new version of the game rpsls_table = [[-1, 1, 0, 0, 4],[1, -1, 2, 3, 1], [0, 2, -1, 2, 4], [0, 3, 2, -1, 3], [4, 1, 4, 3, -1]]
Игра картографические движения
Нам нужен определенный тип отображения между возможными движениями и цифрами, чтобы определить победителя и неудачник. Мы используем словарь Python для этой цели.
Win-Toble Matrices
Самый простым способом проверить победителей ножниц рок-бумаги в Python, называется ячейкой, соответствующей входу каждого игрока. Ниже приведена матрица для традиционной игры:
Неотрицательные значения матрицы обозначают победителя соответствующих входов. Приму примеру, чтобы полностью постичь матрицу.
Предположим, в определенной игре игрока 1 выбирает ножницы) и игрок 2 выбирает бумагу). Клетки (2, 1) и (1, 2) в матрице обозначают совпадение между ножницами и бумагой. Эти клетки содержат индекс ножниц, потому что ножницы вырезают бумагу.
Клетки, содержащие '-1'
Обозначим галстую игру.
Ниже приведен матрица для новой версии:
Вышеуказанные структуры данных суммируют полную игровую логику, необходимую для создания нашей игры рок-бумаги-ножницы. Две вещи, которые остаются, – это управление входом игрока и перемещение компьютера.
Создание игровой петли
Одной из самых важных частей ножниц рок-бумаги в Python является Игровая петля Отказ В контексте этой игры игровая петля отвечает за поддержание строки спичек между игроками.
# The GAME LOOP while True: # The Game Menu print() print("Let's Play!!!") print("Which version of Rock-Paper-Scissors?") print("Enter 1 to play Rock-Paper-Scissors") print("Enter 2 to play Rock-Paper-Scissors-Lizard-Spock") print("Enter 3 to quit") print() # Try block to handle the player choice try: choice = int(input("Enter your choice = ")) except ValueError: clear() print("Wrong Choice") continue # Play the traditional version of the game if choice == 1: rps() # Play the new version of the game elif choice == 2: rpsls() # Quit the GAME LOOP elif choice == 3: break # Other wrong input else: clear() print("Wrong choice. Read instructions carefully.")
'rps ()'
и 'rpsls ()'
Функции имеют внутреннюю игровую петлю для обработки серии игр своих соответствующих версий.
« Очистить () '
Функция отвечает за очистку терминала, чтобы предотвратить скульбельность выхода.
Игра Инструкции для ножницы для рок-бумаги в Python
Прежде чем ожидать игрока сделать шаг, это обязанность программиста, чтобы обеспечить набор инструкций для Gamer. Нам нужно создать две отдельные функции для получения инструкций для обоих видов игр.
# Set of instructions for Rock-Paper-Scissors def rps_instructions(): print() print("Instructions for Rock-Paper-Scissors : ") print() print("Rock crushes Scissors") print("Scissors cuts Paper") print("Paper covers Rock") print() # Set of instructions for Rock-Paper-Scissors-Lizard-Spock def rpsls_instructions(): print() print("Instructions for Rock-Paper-Scissors-Lizard-Spock : ") print() print("Scissors cuts Paper") print("Paper covers Rock") print("Rock crushes Lizard") print("Lizard poisons Spock") print("Spock smashes Scissors") print("Scissors decapitates Lizard") print("Lizard eats Paper") print("Paper disproves Spock") print("Spock vaporizes Rock") print("Rock crushes Scissors") print()
После отображения инструкций мы просим для ввода игрока.
Работающий игрок ввода
Поскольку наша игра поддерживает игрока против компьютера сценария, мы должны позаботиться об одном перемещении каждый 0гейт ножницы рок-бумаги в Python
Входное меню
Нам нужно предоставить игроку ощущение контроля над игрой. Мы можем сделать это, предоставляя варианты, «спрашивая о помощи», «возможные ходы» и «бросая игру». Следующее входное меню заботится об этом:
Перемещение игрока
Основным направлением обращения с входом проигрывателя преобразует вход строки в числовое отображение. Для традиционной игры для ножниц рок-бумаги в Python мы принимаем следующие входные движения.
# Player Input inp = input("Enter your move : ") if inp.lower() == "help": clear() rps_instructions() continue elif inp.lower() == "exit": clear() break elif inp.lower() == "rock": player_move = 0 elif inp.lower() == "paper": player_move = 1 elif inp.lower() == "scissors": player_move = 2 else: clear() print("Wrong Input!!") rps_instructions() continue
Мы можем выполнить проверки условно с помощью оператора IF-ELIF-ELECT.
Управление компьютером движется
Для управления непредвзятым компьютером двигаться, нам нужно взять на себя помощь Python’s «Случайный»
библиотека. Мы выбираем случайное движение из возможных вариантов.
# Get the computer move randomly comp_move = random.randint(0, 2) # Print the computer move print("Computer chooses ", game_map[comp_move].upper())
Используя «Randint ()»
Функция случайной библиотеки, мы выбираем случайное движение для компьютера.
Решить и объявить победителя
Использование MATRIX WIN-TOTE, мы можем легко выбрать победителя.
# Find the winner of the match winner = rps_table[player_move][comp_move] # Declare the winner if winner == player_move: print(name, "WINS!!!") elif winner == comp_move: print("COMPUTER WINS!!!") else: print("TIE GAME") print() time.sleep(2) clear()
Мы используем «Сон ()»
Функция, чтобы приостановить выполнение сценария Python. В приведенном выше примере скрипт ждет 2 секунды.
Это подводит сумму с объяснением сценария Python, который запускает игру рок-бумаги-ножницы.
Полный код для ножниц рок-бумаги в Python
Ниже приведен полный код для нашей игры каменных бумажных ножниц в Python.
import random import os import time def clear(): os.system("clear") # Set of instructions for Rock-Paper-Scissors def rps_instructions(): print() print("Instructions for Rock-Paper-Scissors : ") print() print("Rock crushes Scissors") print("Scissors cuts Paper") print("Paper covers Rock") print() # Set of instructions for Rock-Paper-Scissors-Lizard-Spock def rpsls_instructions(): print() print("Instructions for Rock-Paper-Scissors-Lizard-Spock : ") print() print("Scissors cuts Paper") print("Paper covers Rock") print("Rock crushes Lizard") print("Lizard poisons Spock") print("Spock smashes Scissors") print("Scissors decapitates Lizard") print("Lizard eats Paper") print("Paper disproves Spock") print("Spock vaporizes Rock") print("Rock crushes Scissors") print() def rps(): global rps_table global game_map global name # Game Loop for each game of Rock-Paper-Scissors while True: print("--------------------------------------") print("\t\tMenu") print("--------------------------------------") print("Enter \"help\" for instructions") print("Enter \"Rock\",\"Paper\",\"Scissors\" to play") print("Enter \"exit\" to quit") print("--------------------------------------") print() # Player Input inp = input("Enter your move : ") if inp.lower() == "help": clear() rps_instructions() continue elif inp.lower() == "exit": clear() break elif inp.lower() == "rock": player_move = 0 elif inp.lower() == "paper": player_move = 1 elif inp.lower() == "scissors": player_move = 2 else: clear() print("Wrong Input!!") rps_instructions() continue print("Computer making a move....") print() time.sleep(2) # Get the computer move randomly comp_move = random.randint(0, 2) # Print the computer move print("Computer chooses ", game_map[comp_move].upper()) # Find the winner of the match winner = rps_table[player_move][comp_move] # Declare the winner if winner == player_move: print(name, "WINS!!!") elif winner == comp_move: print("COMPUTER WINS!!!") else: print("TIE GAME") print() time.sleep(2) clear() def rpsls(): global rpsls_table global game_map global name # Game Loop for each game of Rock-Paper-Scissors-Lizard-Spock while True: print("--------------------------------------") print("\t\tMenu") print("--------------------------------------") print("Enter \"help\" for instructions") print("Enter \"Rock\",\"Paper\",\"Scissors\",\"Lizard\",\"Spock\" to play") print("Enter \"exit\" to quit") print("--------------------------------------") print() # Player Input inp = input("Enter your move : ") if inp.lower() == "help": clear() rpsls_instructions() continue elif inp.lower() == "exit": clear() break elif inp.lower() == "rock": player_move = 0 elif inp.lower() == "paper": player_move = 1 elif inp.lower() == "scissors": player_move = 2 elif inp.lower() == "lizard": player_move = 3 elif inp.lower() == "spock": player_move = 4 else: clear() print("Wrong Input!!") rps_instructions() continue print("Computer making a move....") comp_move = random.randint(0, 4) print() time.sleep(2) print("Computer chooses ", game_map[comp_move].upper()) winner = rpsls_table[player_move][comp_move] print() if winner == player_move: print(name, "WINS!!!") elif winner == comp_move: print("COMPUTER WINS!!!") else: print("TIE GAME") print() time.sleep(2) clear() # The main function if __name__ == '__main__': # The mapping between moves and numbers game_map = {0:"rock", 1:"paper", 2:"scissors", 3:"lizard", 4:"Spock"} # Win-lose matrix for traditional game rps_table = [[-1, 1, 0], [1, -1, 2], [0, 2, -1]] # Win-lose matrix for new version of the game rpsls_table = [[-1, 1, 0, 0, 4],[1, -1, 2, 3, 1], [0, 2, -1, 2, 4], [0, 3, 2, -1, 3], [4, 1, 4, 3, -1]] name = input("Enter your name: ") # The GAME LOOP while True: # The Game Menu print() print("Let's Play!!!") print("Which version of Rock-Paper-Scissors?") print("Enter 1 to play Rock-Paper-Scissors") print("Enter 2 to play Rock-Paper-Scissors-Lizard-Spock") print("Enter 3 to quit") print() # Try block to handle the player choice try: choice = int(input("Enter your choice = ")) except ValueError: clear() print("Wrong Choice") continue # Play the traditional version of the game if choice == 1: rps() # Play the new version of the game elif choice == 2: rpsls() # Quit the GAME LOOP elif choice == 3: break # Other wrong input else: clear() print("Wrong choice. Read instructions carefully.")
Заключение
Создание игры не является сложным процессом, если программист знает основы игровой логики и дизайна. Мы надеемся, что эта статья сделала читателя осознать вышеуказанные принципы разработки простой терминальной игры. Рабочий код также присутствует в моем Аккаунт GitHub Отказ
Спасибо за чтение. Не стесняйтесь пинговать нас в разделе комментариев для любых запросов.