Автор оригинала: Pankaj Kumar.
Создать игру Mastermind в Python – код разбития кода
Mastermind – это разбитая кодовая игра из двух игроков, в которой один игрок скрывает код, состоящий из цветов, в то время как другой игрок должен угадать его, используя подсказки, данные бывшим игроком для каждого хода.
В этом руководстве мы будем создавать нашу собственную игру Mastermind, используя язык Python. В нашей версии Mastermind компьютер будет случайным образом выбирать секретный код, и пользователь пытается угадать его, основываясь на детерминированных подсказках, заданных компьютером.
Игра Mastermind в Python – Демо
Без дальнейшего адо, давайте попадаем в дизайн часть игры.
Игра Mastermind Design
Оригинальная доска Mastermind показана ниже.
Экранированный конец доски скрывает секретный код, тогда как полная доска основана на догадках, сделанных кодовым выключателем. Игра заканчивается, как только пользователь идентифицирует скрытый код.
Правая сторона доски на рисунке содержит серию белых и красных колышек, которые используются для обозначения подсказки, связанных с каждой попыткой.
- Красный – Один из выбранных цветов находится в правильном положении, как в секретном коде
- Белый – Один из выбранных цветов присутствует в коде, но позиция неверна.
Реализация Совета в терминале выглядит как:
Верхний конец доски скрывает секретный код и раскрывается, когда проигрыватель отсутствует из шансов или нарушает код. До этого момента “УНК” для «Неизвестно» Показано.
Каждый участок доски обозначает поворот, сделанный игроком. Игра поддерживает шесть цветов, Красный , Зеленый , Желтый , Синий , Черный, Оранжевый Отказ Летчайшая панель обозначает подсказки на каждом ходу. «W» для белых и «R» для красных, используемых с оригинальным значением позади них
На рисунке, отображаемое выше, три из четырех цветов, выбранных пользователем, верны, но ни один из них не является правильным положением в соответствии с секретным кодом, поэтому три «W» в подсказках.
# Function to print the mastermind board def print_mastermind_board(passcode, guess_codes, guess_flags): print("-----------------------------------------") print("\t MASTERMIND") print("-----------------------------------------") print(" |", end="") for x in passcode: print("\t" + x[:3], end="") print() for i in reversed(range(len(guess_codes))): print("-----------------------------------------") print(guess_flags[i][0], guess_flags[i][1], "|") print(guess_flags[i][2], guess_flags[i][3], end=" |") for x in guess_codes[i]: print("\t" + x[:3], end="") print() print("-----------------------------------------")
Приведенный выше фрагмент кода отвечает за отображение доски MasterMind на терминале.
Структуры данных – Переменные игры
Для удобного разработки игровой логики нам нужна несколько структур данных.
Цвета
– список цветов, участвующих в игреColours_map
– сопоставление между числами и цветамиПлощадь
– секретный кодshow_passcode
– секретный код, который будет показан пользователю, список неизвестныхдогадка_Code
– список списков догадок, сделанных игрокомУгадай_флэлги
– список списков подсказков, данных игроку
# The Main function if __name__ == '__main__': # List of colors colors = ["RED", "GREEN", "YELLOW", "BLUE", "BLACK", "ORANGE"] # Mapping of colors to numbers colors_map = {1:"RED", 2:"GREEN", 3:"YELLOW", 4:"BLUE", 5:"BLACK", 6:"ORANGE"} # Randomly selecting a passcode random.shuffle(colors) passcode = colors[:4] # Number of chances for the player chances = 8 # The passcode to be shown to the user show_passcode = ['UNK', 'UNK', 'UNK', 'UNK'] # The codes guessed by the player each turn guess_codes = [['-', '-', '-', '-'] for x in range(chances)] # The clues provided to the player each turn guess_flags = [['-', '-', '-', '-'] for x in range(chances)]
Каждая из этих структур данных приходит пригодным при работе с логикой игры для нашей реализации игры Mastermind.
Игровая петля
Одной из самых важных частей разработки игр является игровой петлей, которая отвечает за правильное функционирование движений и обновлений и обновлений для переменных игр.
# The current turn turn = 0 # The GAME LOOP while turn < chances:
Игровой цикл зависит от количества шансов и текущей очереди. Предполагается остановить игру всякий раз, когда шансы игрока исчерпаны.
Игровое меню
Меню игры является простым аспектом игры, что помогает программисту взаимодействовать с игроком с инструкциями или правилами.
Наше игровое меню выглядит так:
# The GAME MENU print("-----------------------------------------") print("\t\tMenu") print("-----------------------------------------") print("Enter code using numbers.") print("1 - RED, 2 - GREEN, 3 - YELLOW, 4 - BLUE, 5 - BLACK, 6 - ORANGE") print("Example: RED YELLOW ORANGE BLACK ---> 1 3 6 5") print("-----------------------------------------") print_mastermind_board(show_passcode, guess_codes, guess_flags)
Меню игры должно быть простым и доп.
Обработка ввода игрока
Вход для обработки игрока включает в себя три основных этапа: принимая вход проигрывателя, применяя некоторые достоверности чеков, и если все в порядке, сохраняя его в наши структуры данных.
Принимая ввод игрока
Как уже упоминалось в меню игры, игрок должен ввести четыре числа, каждый из которых соответствует определенному цвету, разделенному пробелами.
Наша работа состоит в том, чтобы разбирать этот игрок ввести в список целых чисел для извлечения правильных цветов.
# Accepting the player input try: code = list(map(int, input("Enter your choice = ").split())) except ValueError: clear() print("\tWrong choice!! Try again!!") continue
Примечание: Очистить ()
Функция несет ответственность за сохранение терминала чистота, путем вымывки предыдущего выхода. Это требует от Python ОС
библиотека.
Проверьте полный код ниже для объявления функции Очистить ()
Отказ
Применение здравоохранения
Next UP делает некоторые достоверные чеки на вход проигрывателя.
# Check if the number of colors nunbers are 4 if len(code) != 4: clear() print("\tWrong choice!! Try again!!") continue # Check if each number entered corresponds to a number flag = 0 for x in code: if x > 6 or x < 1: flag = 1 if flag == 1: clear() print("\tWrong choice!! Try again!!") continue
Хранение игрока движется
После того, как мы узнаем, что игрок сделал действительный ход, мы можем хранить его в игровых контейнерах.
# Storing the player moves for i in range(4): guess_codes[turn][i] = colors_map[code[i]]
Установите подсказки для каждого хода
Существует два набора флагов, которые должны быть назначены, «R», если цвет находится в правильном положении, как в секретном коде, и «W», если цвет правильно, но в неправильном положении.
# Process to apply clues according to the player input dummy_passcode = [x for x in passcode] pos = 0 # Loop to set up clues for the player move for x in code: if colors_map[x] in dummy_passcode: if code.index(x) == passcode.index(colors_map[x]): guess_flags[turn][pos] = 'R' else: guess_flags[turn][pos] = 'W' pos += 1 dummy_passcode.remove(colors_map[x]) random.shuffle(guess_flags[turn])
Одна маленькая вещь, которую нужно помнить, переставляет флаги, поскольку оно может дать подсказки, связанные с позициями цветов.
Проверьте наличие выигрыша
Все, что нам нужно сделать, это проверить последний ввод с скрытым кодом.
# Check for win condition if guess_codes[turn] == passcode: clear() print_mastermind_board(passcode, guess_codes, guess_flags) print("Congratulations!! YOU WIN!!!!") break
Как только игрок вступает в правильный код, мы отображим выигрышное сообщение и закончите игру.
Обновите номер поворота
Одна маленькая, но очень важная задача – обновить номер поворота после каждого успешного движения игрока.
# Update turn turn += 1 clear()
Последнее, но не самое меньшее, обрабатывает состояние потерь.
Проверьте наличие потерь
Когда игрок исчерпал количество шансов, игрок проигрывает. Нам нужно отображать соответствующее сообщение, когда это произойдет.
# Check for loss condiiton if turn == chances: clear() print_mastermind_board(passcode, guess_codes, guess_flags) print("YOU LOSE!!! Better luck next time!!!")
Это завершает объяснение для создания Mastermind с использованием языка Python.
Полный код
import random import os def clear(): os.system("clear") # Function to print the mastermind board def print_mastermind_board(passcode, guess_codes, guess_flags): print("-----------------------------------------") print("\t MASTERMIND") print("-----------------------------------------") print(" |", end="") for x in passcode: print("\t" + x[:3], end="") print() for i in reversed(range(len(guess_codes))): print("-----------------------------------------") print(guess_flags[i][0], guess_flags[i][1], "|") print(guess_flags[i][2], guess_flags[i][3], end=" |") for x in guess_codes[i]: print("\t" + x[:3], end="") print() print("-----------------------------------------") # The Main function if __name__ == '__main__': # List of colors colors = ["RED", "GREEN", "YELLOW", "BLUE", "BLACK", "ORANGE"] # Mapping of colors to numbers colors_map = {1:"RED", 2:"GREEN", 3:"YELLOW", 4:"BLUE", 5:"BLACK", 6:"ORANGE"} # Randomly selecting a passcode random.shuffle(colors) passcode = colors[:4] # Number of chances for the player chances = 8 # The passcode to be shown to the user show_passcode = ['UNK', 'UNK', 'UNK', 'UNK'] # The codes guessed by the player each turn guess_codes = [['-', '-', '-', '-'] for x in range(chances)] # The clues provided to the player each turn guess_flags = [['-', '-', '-', '-'] for x in range(chances)] clear() # The current turn turn = 0 # The GAME LOOP while turn < chances: print("-----------------------------------------") print("\t\tMenu") print("-----------------------------------------") print("Enter code using numbers.") print("1 - RED, 2 - GREEN, 3 - YELLOW, 4 - BLUE, 5 - BLACK, 6 - ORANGE") print("Example: RED YELLOW ORANGE BLACK ---> 1 3 6 5") print("-----------------------------------------") print_mastermind_board(show_passcode, guess_codes, guess_flags) # Accepting the player input try: code = list(map(int, input("Enter your choice = ").split())) except ValueError: clear() print("\tWrong choice!! Try again!!") continue # Check if the number of colors nunbers are 4 if len(code) != 4: clear() print("\tWrong choice!! Try again!!") continue # Check if each number entered corresponds to a number flag = 0 for x in code: if x > 6 or x < 1: flag = 1 if flag == 1: clear() print("\tWrong choice!! Try again!!") continue # Storing the player input for i in range(4): guess_codes[turn][i] = colors_map[code[i]] # Process to apply clues according to the player input dummy_passcode = [x for x in passcode] pos = 0 # Loop to set up clues for the player move for x in code: if colors_map[x] in dummy_passcode: if code.index(x) == passcode.index(colors_map[x]): guess_flags[turn][pos] = 'R' else: guess_flags[turn][pos] = 'W' pos += 1 dummy_passcode.remove(colors_map[x]) random.shuffle(guess_flags[turn]) # Check for win condition if guess_codes[turn] == passcode: clear() print_mastermind_board(passcode, guess_codes, guess_flags) print("Congratulations!! YOU WIN!!!!") break # Update turn turn += 1 clear() # Check for loss condiiton if turn == chances: clear() print_mastermind_board(passcode, guess_codes, guess_flags) print("YOU LOSE!!! Better luck next time!!!")
Заключение
Задача создания наших собственных игр может сначала казаться пугающими для любого новичка Python Programmer. Мы надеемся, что эта статья упростила некоторые концепции Python и сделали задачу, достижимы для читателя.
Не стесняйтесь комментировать ниже для любых предложений или запросов. Спасибо за чтение.