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

Ножницы для рок-бумаги в Python – полный пошаговый гид

В этой статье мы пройдемся по шагам для создания собственной игры ножницы рок-бумаги в языке Python.

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

Ножницы для рок-бумаги в Python – полный пошаговый гид

В этой статье мы пройдемся по шагам для создания собственной игры ножницы рок-бумаги в языке Python.

О ножницах для рок-бумаги

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

Если вы знакомы с популярным сериалом, Теория большого взрыва , вы можете узнать другую версию игры под названием Rock-Paper-stassors-Lizard-Spock. Ниже инфографики может помочь вам понять.

RPSLS.

Направление стрелки определяет победителя. Стрелки, выходящие из сущности, значит, превосходство этого объекта в этом конкретном матче.

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, называется ячейкой, соответствующей входу каждого игрока. Ниже приведена матрица для традиционной игры:

Таблица RPS

Неотрицательные значения матрицы обозначают победителя соответствующих входов. Приму примеру, чтобы полностью постичь матрицу.

Предположим, в определенной игре игрока 1 выбирает ножницы) и игрок 2 выбирает бумагу). Клетки (2, 1) и (1, 2) в матрице обозначают совпадение между ножницами и бумагой. Эти клетки содержат индекс ножниц, потому что ножницы вырезают бумагу.

Клетки, содержащие '-1' Обозначим галстую игру.

Ниже приведен матрица для новой версии:

Rpsls Таблица

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

Создание игровой петли

Одной из самых важных частей ножниц рок-бумаги в 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 Отказ

Спасибо за чтение. Не стесняйтесь пинговать нас в разделе комментариев для любых запросов.